Avatar billede turbo2000 Nybegynder
06. oktober 2009 - 22:11 Der er 17 kommentarer og
1 løsning

Tomt tal i access hjælp?

Hej jeg har et lille problem når jeg prøver at oprette i access.
Det viker fint hvis jeg bruger text men hvis jeg ændre feltet til number så laver den Data type mismatch in criteria expression. Men det skulle helst være number felt da jeg skal bruge det til at sortere efter i rigtig rækkefølge. Jeg har prøvet at sætte default value til 0 og null i access men uden held.

her er min sql kode:

SQL = "INSERT INTO boliger (navn, sortering) VALUES ('" & Replace(Request.Form("navn"), "'", "''") & "', '" & Replace(Request.Form("sortering"), "'", "''") & "')"
       
Conn.Execute ( SQL )
Avatar billede keysersoze Guru
06. oktober 2009 - 22:19 #1
SQL = "INSERT INTO boliger (navn, sortering) VALUES ('" & Replace(Request.Form("navn"), "'", "''") & "', " & Replace(Request.Form("sortering"), "'", "''") & ")"
Avatar billede michael_stim Ekspert
06. oktober 2009 - 22:20 #2
SQL = "INSERT INTO boliger (navn, sortering) VALUES ('" & Replace(Request.Form("navn"), "'", "''") & "', '" & Request.Form("sortering") & "')"
Avatar billede keysersoze Guru
06. oktober 2009 - 22:21 #3
Hvis "sortering" kan være tom skal du indsætte NULL i stedet for.
Avatar billede michael_stim Ekspert
06. oktober 2009 - 22:22 #4
Hov:
SQL = "INSERT INTO boliger (navn, sortering) VALUES ('" & Replace(Request.Form("navn"), "'", "''") & "', "& Request.Form("sortering") &")"

Burde være nok.
Avatar billede turbo2000 Nybegynder
06. oktober 2009 - 22:33 #5
tak for de hurtige svar :-) zoze hvor sætter jeg null ind henne?
Avatar billede turbo2000 Nybegynder
06. oktober 2009 - 22:40 #6
hmmm.. nu laver den bare Syntax error in INSERT INTO statement, hvis jeg fjerner plingerne..
Avatar billede keysersoze Guru
06. oktober 2009 - 22:48 #7
du skal indsætte NULL hvis du ingen talværdi har - dvs du bliver nødt til at lave et tjek inden du når til selve SQL'en. Du bliver nødt til at udskrive din SQL så du (og måske vi) kan se hvordan den reelt ser ud inden den eksekveres og på den måde spotte fejl.
Avatar billede turbo2000 Nybegynder
06. oktober 2009 - 22:59 #8
sql:

POST Data:
mode=gem&navn=jjjjjjj&sortering=

Hvordan laver jeg det tjek?

Jeg er også i tvivl om mit talfelt i access er sat korrekt op..
Pt. har jeg fjernet alt ved default value og format er general number.
Avatar billede keysersoze Guru
07. oktober 2009 - 07:47 #9
Response.Write SQL for at udskrive din sql.

Til dit tjek kan du fx benytte IsNumeric

If IsNumeric(Request.Form("sortering")) Then
  var = Request.Form("sortering")
Else
  var = "NULL"
End If

og så indsætter du var.
Avatar billede turbo2000 Nybegynder
07. oktober 2009 - 08:06 #10
skal dit tjek bare ind før min sql? og hvordan med databasen? skulle der stå noget ved default value?
Avatar billede keysersoze Guru
07. oktober 2009 - 09:24 #11
du får i hvert fald ikke noget ud af at placere det efter din SQL så ja, det skal ind før. I og med at du altid indsætter en værdi, enten NULL eller et tal, vil en defaultvalue være irrelevant.
Avatar billede turbo2000 Nybegynder
07. oktober 2009 - 17:42 #12
Hmm det virker stadig ikke..

FEJL:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement.
/boliger.asp, line 954

MIN KODE:

if mode = "gem" then
    if Request.Form("bolig_id") = "" Then

        If IsNumeric(Request.Form("sortering")) Then
          var = Request.Form("sortering")
        Else
          var = "NULL"
        End If

        SQL = "INSERT INTO boliger (navn, sortering) VALUES ('" & Replace(Request.Form("navn"), "'", "''") & "', " & Request.Form("sortering") & ")"

        Conn.Execute ( SQL )

        Response.redirect "boliger.asp?Created=true"
    else
        SQL = "UPDATE boliger SET navn = '" & Replace(Request.Form("navn"), "'", "''") & "',  sortering = " & Request.Form("sortering") & " WHERE bolig_id = " & Request.Form("bolig_id")
        Conn.Execute ( SQL )
        Response.redirect "boliger.asp?Updated=true"
    end if
end If
Avatar billede keysersoze Guru
07. oktober 2009 - 18:02 #13
Som skrevet i #9 skal du selvfølgelig benytte variablen ved navn "var" tuk at indsætte i stedet for din Request.Form("sortering") - ellers giver det ingen mening at lave tjekket.

Som forsøgt forklaret så brug også de (simple) debug-værktøjer man nu kan i ASP - nemlig udskrivning af variabler, i dit tilfælde din SQL så vi kan se hvad den reelt set indeholder.

En sidste påmindelse er måske at læse lidt om SQL Injection.
Avatar billede turbo2000 Nybegynder
07. oktober 2009 - 18:22 #14
Soze det virker sgu.. efter 20 timers irritation :-) tusinde tak for hjælpen.. nu har jeg kun et sidste problem.. som det ser ud nu sorterer den null'erne før 0,1,2,3 - kan man på en eller anden måde få smidt null'erne bagest?
Avatar billede keysersoze Guru
07. oktober 2009 - 19:02 #15
Det burde du kunne fx ved at kigge på IIF i en ORDER BY (ikke noget jeg lige kan i hovedet).
Avatar billede turbo2000 Nybegynder
07. oktober 2009 - 19:14 #16
okay prøver at rodde lidt med det.. mange tak for hjælpen :-) Hvordan er det nu man gir point?
Avatar billede keysersoze Guru
07. oktober 2009 - 22:20 #17
jeg skal lægge et svar først :)
Avatar billede keysersoze Guru
29. december 2009 - 11:30 #18
lukketid?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB

Københavns Professionshøjskole

Cloudarkitekt

Cognizant Technology Solutions Denmark ApS

Test Manager