Avatar billede Slettet bruger
31. januar 2002 - 21:10 Der er 39 kommentarer og
2 løsninger

SQL bøvl

Er der nogen der kan se hvad der er galt m flg.?

Navn = Request.form("Navn")
Brugernavn = Request.form("Brugernavn")
Password = Request.form("Password")
Adresse = Request.form("Adresse")
Postnummer = Request.form("Postnummer")
By = Request.form("By")
Telefonnummer = Request.form("Telefonnummer")
Email = Request.form("Email")
Timenow = (Now)
Godkendt = False

SQL = "INSERT INTO tbl_users (Navn, Brugernavn, Password, Adresse, Postnummer, By, Telefonnummer, Email, Timenow, Godkendt, PID) values ('" & Navn & "', '" & Brugernavn & "', '" & Password & "', '" & Adresse &"', '" & Postnummer &"', '" & By &"', '" & Telefonnummer &"', '" & Email &"', " & Now() &", & Godkendt & , '" & IDpas & "');"

Conn.execute SQL

Jeg får at vide at der er en syntaksfejl i sætningen - men hvor er den??? Eller hvis det jeg har skrevet er helt grimt - hvordan skal det så skrives for at virke?
Avatar billede entracore Nybegynder
31. januar 2002 - 21:16 #1
Postnummer ??? Prøver du at indsætte en tal værdi i en kolonne der kun accepterere tal. I så fald skal du fjerne dine plinger omkring denne værdi.

Det samme skal selvfølge gælde for alle de variabler der kun må indeholder tal.
Avatar billede entracore Nybegynder
31. januar 2002 - 21:17 #2
og hvis PID har datatypen True/False så skala der heller ikke plinger om IDPas.
Avatar billede Slettet bruger
31. januar 2002 - 21:19 #3
entra > Nope - det eneste der ikke står som txt-felter i tbl'en er "ID" (som er autonummereret) og "Godkendt" som står til Ja/Nej
Avatar billede entracore Nybegynder
31. januar 2002 - 21:20 #4
Så skal Now() og Godkent da også indenfor plinger.
Avatar billede entracore Nybegynder
31. januar 2002 - 21:21 #5
Stryg Godkendt... undskyld
Avatar billede Slettet bruger
31. januar 2002 - 21:26 #6
Det bliver så uoverskueligt med alle de plinger, men jeg prøver lige...
Avatar billede Slettet bruger
31. januar 2002 - 21:45 #7
entra > Jeg fedter vildt rundt i det - kan du ikke prøve at skrive den som den skal se ud?
Avatar billede entracore Nybegynder
31. januar 2002 - 21:47 #8
Jo sec...
Avatar billede entracore Nybegynder
31. januar 2002 - 21:49 #9
SQL = "INSERT INTO tbl_users (Navn, Brugernavn, Password, Adresse, Postnummer, By, Telefonnummer, Email, Timenow, Godkendt, PID) values ('" & Navn & "', '" & Brugernavn & "', '" & Password & "', '" & Adresse &"', '" & Postnummer &"', '" & By &"', '" & Telefonnummer &"', '" & Email &"', '" & Now() &"', " & Godkendt & ", '" & IDpas & "');"
Avatar billede entracore Nybegynder
31. januar 2002 - 21:49 #10
Sådan.... glem den første.

SQL = "INSERT INTO tbl_users (Navn, Brugernavn, Password, Adresse, Postnummer, By, Telefonnummer, Email, Timenow, Godkendt, PID) values ('" & Navn & "', '" & Brugernavn & "', '" & Password & "', '" & Adresse &"', '" & Postnummer &"', '" & By &"', '" & Telefonnummer &"', '" & Email &"', '" & Now() &"', " & Godkendt & ", '" & IDpas & "')"
Avatar billede entracore Nybegynder
31. januar 2002 - 21:50 #11
Hvis det ikke virker - så prøv lige at kom med en fejlmeddelse.
Avatar billede Slettet bruger
31. januar 2002 - 21:53 #12
entra > Det virker ikke : får beskeden "Der er en syntaksfejl i INSERT INTO-sætningen"
Avatar billede entracore Nybegynder
31. januar 2002 - 22:01 #13
Har du angivet en værdi til "IDpas". Hvis ikke og "Allow Zero Length" i kolonnen i din tabel er sat til "No" så fejler den.

Prøv lige at se om PID tillader NULL værdier.
Avatar billede Slettet bruger
31. januar 2002 - 22:06 #14
Ja jeg har en funktion som laver et password på 10 karakterer, men det sjove er at lortet virker fint hvis man bruger den "anden" metode :

        Set rs = Server.CreateObject("ADODB.RecordSet")
        strSQL = "SELECT * FROM tbl_users WHERE (ID = 0)"
        rs.Open strSQL, tempConn, adOpenKeyset, adLockOptimistic
        If (rs.BOF Or rs.EOF) Then
            rs.AddNew
            rs("Navn") = Navn
            rs("Brugernavn") = Brugernavn
            rs("Password") = Password
            rs("Adresse") = Adresse
            rs("Postnummer") = Postnummer
            rs("By") = By
            rs("Telefonnummer") = Telefonnummer
            rs("Email") = Email
            rs("Timenow") = Now()
            rs("PID") = IDpas
            rs.Update
Avatar billede entracore Nybegynder
31. januar 2002 - 22:09 #15
Ahhh her fejlen tror jeg nok. Conn.execute SQL skal være Conn.execute(SQL)
med parantes omkring SQL.

Prøv det
Avatar billede Slettet bruger
31. januar 2002 - 22:11 #16
Nope heller ikke...
Avatar billede entracore Nybegynder
31. januar 2002 - 22:14 #17
Ok Timenow = (Now) er defineret forkert. Skrive istedet Timenow = Now()

Og se hvad det gør.
Avatar billede Slettet bruger
31. januar 2002 - 22:15 #18
Opdagede det selv ligefør - har rettet det - uden resultat :(
Avatar billede entracore Nybegynder
31. januar 2002 - 22:19 #19
Hvis du vil - må du gerne sende databasen til mig... så har jeg nok en større mulighed for at finde fejlen.

Du kan sende den til jg@parnell.dk
Avatar billede Slettet bruger
31. januar 2002 - 22:30 #20
Er hermed gjort...
Avatar billede entracore Nybegynder
31. januar 2002 - 22:49 #21
Tak - jeg kigger på det nu og vender forhåbenlig hurtig tilbage.
Avatar billede entracore Nybegynder
31. januar 2002 - 23:09 #22
Fandt fejlen. Den burde jeg egenlig have set med det samme da jeg også selv har begået den. Du skriver By = Request.form("By"). Det kan ikke lade sig gøre. "By" er et reseveret ord. Skriv istedet City = Request.form("By")

Prøv det :-)
Avatar billede entracore Nybegynder
31. januar 2002 - 23:10 #23
også selvfølgelig ændre by til city i din sql streng.
Avatar billede sorenmhansen Nybegynder
31. januar 2002 - 23:22 #24
Prøv at skrive din SQL-streng ud, så opdager du sikkert hvor fejlen er. Eller så post udskriften her. Derudover skal du huske at udskifte ' med dobbelt ' . Følgende er nyttig

Function MakeSQLString(strSQL)
    strSQL=Trim(strSQL)
    strSQL=Replace(strSQL,"'","''")   
    MakeSQLString="'" & strSQL & "'"
End Function

strNavn = "Peter's bil"
strSQL = "INSERT INTO garage (hvad) VALUES (" & MakeSQLString(strNavn) & ");"
Avatar billede 2-maz Nybegynder
01. februar 2002 - 09:09 #25
http://www.html.dk under asp tutorial.
Avatar billede Slettet bruger
01. februar 2002 - 17:30 #26
entra > Det er jo i grunden klart nok :o) Tak skal du ha' men nu får jeg altså følgende fejlmelding : Microsoft OLE DB Provider for ODBC Drivers fejl '80040e14'

[Microsoft][ODBC Microsoft Access-driver] Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket "01-02-02 17:33:54".


altså er der noget galt med min variabel Timenow = Now() ???
Avatar billede Slettet bruger
02. februar 2002 - 19:45 #27
Hvor bliver I af???
Avatar billede sorenmhansen Nybegynder
03. februar 2002 - 00:20 #28
Hvor bliver udskriften af din SQL-streng af ??
Indsæt Response.Write(SQL) lige før Conn.Execute(SQL) og indsæt resultatet her på Eksperten.
Avatar billede Slettet bruger
03. februar 2002 - 10:24 #29
soren > Så ser de sådan ud : INSERT INTO tbl_users (Brugernavn, Password, Email, Navn, Adresse, Postnummer, Bynavn, Telefonnummer, PID, Timenow, Godkendt) VALUES ('Test', 'Test', 'Test', 'Test', 'Test', 'Test', '', 'Test', 'F5tyX5d236', 03-02-02 10:29:37, 'Falsk')
Avatar billede sorenmhansen Nybegynder
03. februar 2002 - 11:03 #30
Der skal ' rundt om datoen. Access bruger nogle gange # rundt om datoer, men standarden sige '.
Er Godkendt defineret som en streng eller som en boolean i databasen. Hvis det er en streng skal der ' om, som der er nu. Hvis det er en boolean skal der ikke, men jeg ville nok sørge for at den skrev True/False i stedet for Sand/Falsk.
Avatar billede Slettet bruger
03. februar 2002 - 12:26 #31
soren > OK - prøver lige det med datoen... Godkendt er sat til Ja/Nej i db'en. Min variabel Godkendt er sat til False og ikke falsk, men det må være fordi det er dansk PWS og Dansk Access....
Avatar billede Slettet bruger
03. februar 2002 - 12:32 #32
Får nu "Der er for få parametre. Der var ventet 1. Grrrrrrrrrrrrrr
Avatar billede Slettet bruger
03. februar 2002 - 12:40 #33
Soren > Hvad i al verden kan der være galt med den :

**********************************
INSERT INTO tbl_users (Brugernavn, Password, Email, Navn, Adresse, Postnummer, Bynavn, Telefonnummer, PID, Timenow, Godkendt) VALUES ('John Doe', 'Doe', 'doe@doe.dk', 'John Doe', 'Sunset Boulevard 20', 0000, 'Hollywood', 00000000, 'QkGLdlo457', '03-02-02 12:44:14', Falsk)
Microsoft OLE DB Provider for ODBC Drivers fejl '80040e10'

[Microsoft][ODBC Microsoft Access-driver] Der er for få parametre. Der var ventet 1.
**********************************
Og i db'en er flg felter ID (Autonum) Brugernavn (Tekst) Password (Tekst) Email (Tekst) Navn (Tekst) Adresse (Tekst) Postnummer (Tal) Bynavn (Tekst) Telefonnummer (Tal) PID (Tekst) Timenow (Dato og klokkeslæt) Godkendt (Ja/Nej)
Avatar billede sorenmhansen Nybegynder
03. februar 2002 - 13:11 #34
Jeg har prøvet din SQL-sætning af direkte i en forespørgsel i en database med en tabel magen til din og det forløber fint. Derfor tror jeg ikke det er din SQL-sætning det er noget i vejen med. Hvad linienummer opstår fejlen på. Post den linie her plus et par linierne før og efter.
Avatar billede Slettet bruger
03. februar 2002 - 18:09 #35
soren > Jeg tror nu alligevel det er i SQL'en at det går galt for den fejlen ligger i linie 111 som er der hvor SQL'en eksekveres - Conn.execute(SQL)
Jeg får følgende fejl :

INSERT INTO tbl_users (Brugernavn, Password, Email, Navn, Adresse, Postnummer, Bynavn, Telefonnummer, PID, Timenow, Godkendt) VALUES ('John Doe', 'Doe', 'doe@doe.com', 'John', 'Solitudevej 30', 0000, 'Månen', 00457812, 'fwSXp9B679', '03-02-02 17:58:06', Falsk)
Microsoft OLE DB Provider for ODBC Drivers fejl '80040e10'

[Microsoft][ODBC Microsoft Access-driver] Der er for få parametre. Der var ventet 1.

/www/opret.asp, linje 111

Linierne før ser således ud:
*****************************************
Function MakePassword(intAntaltegn)
Dim intChooser,x,intWildChar, strpassword

  For x = 1 To intAntalTegn
    Randomize
    intChooser = Int(Rnd * 2) + 1
    Select Case intChooser
    Case 1
      intWildChar = Int(Rnd * 57) + 65
      If intWildChar => 91 And intWildChar <= 96 Then
        intWildChar = intWildChar + 8
      End If
      strPassword = strPassword & Chr(intWildChar)
    Case Else
      intWildChar = Int(Rnd * 9) + 1
      strPassword = strPassword & intWildChar
    End Select
  Next
  MakePassword = strPassword
End Function

IDpas = MakePassword(10)



Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("../db/DB.mdb")

'Hvis formen bliver postet
if Request.ServerVariables("REQUEST_METHOD") = "POST" then

Navn = Request.form("Navn")
Brugernavn = Request.form("Brugernavn")
Password = Request.form("Password")
Adresse = Request.form("Adresse")
Postnummer = Request.form("Postnummer")
Bynavn = Request.form("Bynavn")
Telefonnummer = Request.form("Telefonnummer")
Email = Request.form("Email")
Timenow = Now()
Godkendt = False
*****************************************

Lininerne efter har så vidt jeg kan se ikke noget som helt at sige....
Avatar billede sorenmhansen Nybegynder
03. februar 2002 - 18:33 #36
Yeps, du har ret.. det er din SQL. Jeg får samme fejl.

Det virker hos mig hvis man bruger True/False i stedet for Sand/Falsk.
Følgende funktiom er altid er god hjælp:

Function IIf(blnExpression, strTruepart, strFalsepart)

End Functuon
Avatar billede sorenmhansen Nybegynder
03. februar 2002 - 18:38 #37
Pokkers.. fik trykket Tab + Enter ved en fejl. Her kommer den:

Function IIf(blnExpression, strTruepart, strFalsepart)
  If blnExpression Then
      IIf = strTruepart
  Else
      IIf = strFalsepart
  End If
End Function

Den bruger du så når du laver SQL-sætningen:
..... & IIf(Godkendt, "True", "False") & .....
Avatar billede sorenmhansen Nybegynder
03. februar 2002 - 18:40 #38
IIf betyder "inline if"
Avatar billede Slettet bruger
03. februar 2002 - 18:40 #39
soren > Mener du at ændre feltet i db'en fra "flueben" til tekst og så ganske enkelt indsætte teksten True/False i stedet?
Avatar billede Slettet bruger
03. februar 2002 - 18:59 #40
Tusind tak Entra og Soren!!!
Avatar billede sorenmhansen Nybegynder
03. februar 2002 - 19:00 #41
Nej.
Hvis du ser på den færdige SQL-streng så ser den således ud i slutningen:  ....  'fwSXp9B679', '03-02-02 17:58:06', Falsk)
Men den forstår ikke hvad "Falsk" betyder. I stedet for skal der stå  .... , 'fwSXp9B679', '03-02-02 17:58:06', False)

strSQL = "INSERT INTO tbl_users (Brugernavn, Password, Email, Navn, Adresse, Postnummer, Bynavn, Telefonnummer, PID, Timenow, Godkendt) VALUES ('" & Brugernavn & "', '" & Password & "', '" & Email  & "', '" & Navn & "', '" & Adresse & "', " & Postnummer & ", '" & Bynavn & "', " & Telefonnummer & ", '" & IDpas & "', '" & Timenow  & "', " & IIf(Godkendt, "True", "False") & ")"
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