Avatar billede lazeric Nybegynder
19. september 2006 - 17:21 Der er 25 kommentarer og
1 løsning

Syntax problemer

Jeg har lavet denne lille ting som skal oprette et Table i databasen førs og derefter lave et entry deri.
Det går fint med at oprette databasen (som hedder dags dato f.eks "2006_09_19") men derefter kan jeg ikke få lov til at putte noget deri og får fejlen:

Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[MySQL][ODBC 3.51 Driver][mysqld-5.0.18-nt]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''2006_09_19' (ansvarlig, vagt) values(''TBZ', 'morgen')' at line 1
/vo/vagt-startstop.asp, line 95

Linie 95 er "set rs = conn.execute(strSQL)" og her er hvad den forsøger at smide i DB:
strSQL="Insert into " & Request.querystring("table") & " (ansvarlig, vagt) values('" & Request.querystring("ansvarlig")& "', '" & Request.querystring("vagt") & "')"

Hvor er fejlen i det?
Avatar billede erikjacobsen Ekspert
19. september 2006 - 17:37 #1
strSQL="Insert into `" & Request.querystring("table") & "` (ansvarlig, vagt) values('" & Request.querystring("ansvarlig")& "', '" & Request.querystring("vagt") & "')"
Avatar billede erikjacobsen Ekspert
19. september 2006 - 17:38 #2
Iøvrigt generelt en rigtig dårlig idé at repræsentere værdier som tabelnavne. Din dato skal du have i et felt i en tabel, der så indeholder alle disse oplysninger.
Avatar billede lazeric Nybegynder
19. september 2006 - 20:20 #3
Jeg er enig med at det er en dårlig ide, men det er et lukket system som ikke ligger på internettet, så det gør ikke noget :-)

Desværre hjalp det ikke blot med ' på hver side af tabel navnet:

"Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[MySQL][ODBC 3.51 Driver][mysqld-5.0.18-nt]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ansvarlig', 'vagt')' at line 1"
Avatar billede erikjacobsen Ekspert
19. september 2006 - 20:33 #4
Det er heller ikke en ' du skal sætte, men en `

Det er nu en ualmindelig dårlig idé med datoen som tabelnavn, uanset hvor systemet skal anvendes.
Avatar billede lazeric Nybegynder
19. september 2006 - 21:19 #5
Ok, så `.. taste fejl her i kommentarfeltet, men det virker stadig ikke.

Men om du synes det er en dårlig ide eller ej kan egentlig være lige meget :-) Det skal bruges som log system, så det optimale for det system er at have datoen i tabelnavnet.
Avatar billede erikjacobsen Ekspert
19. september 2006 - 22:03 #6
Nej, du skal ikke tro det er optimalt. Hvis det stadig ikke virker, må du vise hvad du gør, og hvad der sker.
Avatar billede lazeric Nybegynder
19. september 2006 - 22:26 #7
Ok... Her får du hele koden:

<% if not request.querystring("vagt") = "" and Request.QueryString("start")="" and Request.QueryString("opdater")="" then %>

<form action="default.asp?funktion=vagt&tilstand=start&vagt=<%= request.querystring("vagt")%>&start=ja" method="POST">
    <tr><td align="right" width="50%">
   
    Initialer:
    </td><td align="left" >
   
    <input type="text" class="knap" size="20" name="ansvarlig">
    (Indtast dine initialer)
   
    </td></tr>
    <tr><td align="center" colspan="2">
   
   
    <input type="text" value="<%= year(date) %>_<%= Right("0" & month(now),2)&"_"&Right("0" & day(now),2)&"" %>" style="display: none;" name="dato">
    <input type="text" value="<%= request.querystring("vagt")%>" style="display: none;" name="vagt">
    <input type="submit" class="knap" value="Påbegynd <%= request.querystring("vagt")%>vagt" onClick="return confirmStart()">
   
    </td></tr>
</form>
<%End if%>
    </table>

</td></tr>
</table>
<%end if %>

<!--- OPRET TABLE --->
<%if Request.Querystring("vagt") = "morgen" and Request.QueryString("start")="ja" then%>
<!---#include file="dbcon.asp" --->
<%

Const adOpenKeyset = 1
Const adLockOptimistic = 3

    strSQL="CREATE TABLE " & Request.Form("dato") & " (`id` int(11) NOT NULL auto_increment, `ansvarlig` varchar(6) NOT NULL default '', `remedy` int(1) NOT NULL default '0', `fhs` int(1) NOT NULL default '0', `elog` int(1) NOT NULL default '0', `email` char(1) NOT NULL default '0', `zeel-bl` char(1) NOT NULL default '0', `status` char(1) NOT NULL default '0', PRIMARY KEY  (`id`)) TYPE=MyISAM;"
    set rs = conn.execute(strSQL)

Conn.Close
set Conn = Nothing
response.redirect "?funktion=vagt&tilstand=start&vagt=morgen&opdater=ja&ansvarlig='" & Request.Form("ansvarlig") & "&table='" & Request.Form("dato") & "'"

end if
%>

<!-- PUT INFO I TABLE -->

<%if Request.Querystring("vagt") = "morgen" and Request.QueryString("opdater")="ja" and not Request.QueryString("ansvarlig")="" then %>
<!---#include file="dbcon.asp" --->
<%
    strSQL="Insert into `" & Request.querystring("table") & "` (ansvarlig, vagt) values('" & Request.querystring("ansvarlig")& "', '" & Request.querystring("vagt") & "')"
    set rs = conn.execute(strSQL)

Conn.Close
set Conn = Nothing
response.write = " Vagten er nu startet!"

end if
%>
Avatar billede erikjacobsen Ekspert
19. september 2006 - 22:37 #8
Og hvad sker der?  Kunne det tænkes der var andre steder der skulle `...` omkring?
Avatar billede lazeric Nybegynder
19. september 2006 - 22:47 #9
Det er først i denne del af koden at den går galt:

<%if Request.Querystring("vagt") = "morgen" and Request.QueryString("opdater")="ja" and not Request.QueryString("ansvarlig")="" then %>
<!---#include file="dbcon.asp" --->
<%
    strSQL="Insert into `" & Request.querystring("table") & "` (ansvarlig, vagt) values('" & Request.querystring("ansvarlig")& "', '" & Request.querystring("vagt") & "')"
    set rs = conn.execute(strSQL)

Conn.Close
set Conn = Nothing
response.write = " Vagten er nu startet!"

end if
%>

Her får jeg fejlen:
"Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[MySQL][ODBC 3.51 Driver][mysqld-5.0.18-nt]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ansvarlig', 'vagt')' at line 1"

Det peger på at det er her fejlen ligger:
strSQL="Insert into `" & Request.querystring("table") & "` (ansvarlig, vagt) values('" & Request.querystring("ansvarlig")& "', '" & Request.querystring("vagt") & "')"

Men hvor?
Jeg kan ikke lige se at der skulle mangle `...` omkring andre ting...?
Avatar billede erikjacobsen Ekspert
19. september 2006 - 23:24 #10
"Det peger på at det er her fejlen ligger:" ... egentlig ikke. Det ser ikke ud til at du har skrevet

  ...'ansvarlig', 'vagt')

i den linie. Med mindre det kommer fra :

    ('" & Request.querystring("ansvarlig")& "', '" & Request.querystring("vagt") & "')"
Avatar billede erikjacobsen Ekspert
19. september 2006 - 23:26 #11
Dit tabelnavn i din CREATE TABLE sku' vel også have `...` omkring tabelnavnet.
Avatar billede erikjacobsen Ekspert
19. september 2006 - 23:26 #12
....hvis det altså overhovedet er det der er galt. Jeg får en mistanke om du ikke kigger på den rigtige kode.
Avatar billede lazeric Nybegynder
20. september 2006 - 00:05 #13
Den kan fint create table, men den kan bare ikke putte i table bagefter.

Og ja "...'ansvarlig', 'vagt')" er noget jeg har skrevet ind, så den tager de rigtige værdier med :-)

Jeg må prøve at bryde koden ned og tage det bid for bid.
Avatar billede erikjacobsen Ekspert
20. september 2006 - 00:21 #14
Du indtaster vel ikke et ' i et inputfelt?
Avatar billede lazeric Nybegynder
20. september 2006 - 00:36 #15
nej
Avatar billede ellebaek Nybegynder
20. september 2006 - 00:42 #16
hvordan ser din create table ud...?
Avatar billede lazeric Nybegynder
20. september 2006 - 01:07 #17
<!--- OPRET TABLE --->
<%if Request.Querystring("vagt") = "morgen" and Request.QueryString("start")="ja" then%>
<!---#include file="dbcon.asp" --->
<%

Const adOpenKeyset = 1
Const adLockOptimistic = 3

    strSQL="CREATE TABLE " & Request.Form("dato") & " (`id` int(11) NOT NULL auto_increment, `ansvarlig` varchar(6) NOT NULL default '', `remedy` int(1) NOT NULL default '0', `fhs` int(1) NOT NULL default '0', `elog` int(1) NOT NULL default '0', `email` char(1) NOT NULL default '0', `zeel-bl` char(1) NOT NULL default '0', `status` char(1) NOT NULL default '0', PRIMARY KEY  (`id`)) TYPE=MyISAM;"
    set rs = conn.execute(strSQL)

Conn.Close
set Conn = Nothing
response.redirect "?funktion=vagt&tilstand=start&vagt=morgen&opdater=ja&ansvarlig='" & Request.Form("ansvarlig") & "&table='" & Request.Form("dato") & "'"

end if
%>
Avatar billede ellebaek Nybegynder
20. september 2006 - 01:19 #18
som erik siger, så skal du sætte `'er omkring dit tabelnavn....

og så vil det jo nok også give dig nogle problemer at du prøver at indsætte "ansvarlig" i et felt hvor der kun er plads til 6 tegn...?

men du har da heller ikke defineret feltet vagt i den create table..?
Avatar billede lazeric Nybegynder
20. september 2006 - 01:33 #19
Netop... VAGT.. for f)(/¤¤"#.. tak, den havde jeg glemt at definere :-P
Det med "ansvarlig" var bare for at dække over hvad der egentlig stod i outputtet, men det var kun 6 karakterer.
Avatar billede ellebaek Nybegynder
20. september 2006 - 09:28 #20
hjalp det at få defineret vagt så...?
Avatar billede lazeric Nybegynder
20. september 2006 - 14:21 #21
Nej desværre :-(

Her kommer fejlen uden at jeg har ændret i teksten:

Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[MySQL][ODBC 3.51 Driver][mysqld-5.0.18-nt]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TBZ', 'morgen')' at line 1


Og her er koden for Create Table:
<!--- OPRET TABLE --->
<%if Request.Querystring("vagt") = "morgen" and Request.QueryString("start")="ja" then%>
<!---#include file="dbcon.asp" --->
<%

Const adOpenKeyset = 1
Const adLockOptimistic = 3

    strSQL="CREATE TABLE " & Request.Form("dato") & " (`id` int(11) NOT NULL auto_increment, `ansvarlig` varchar(6) NOT NULL default '', `vagt` varchar(10) NOT NULL default '', `remedy` int(1) NOT NULL default '0', `fhs` int(1) NOT NULL default '0', `elog` int(1) NOT NULL default '0', `email` char(1) NOT NULL default '0', `zeel-bl` char(1) NOT NULL default '0', `status` char(1) NOT NULL default '0', PRIMARY KEY  (`id`)) TYPE=MyISAM;"
    set rs = conn.execute(strSQL)

Conn.Close
set Conn = Nothing
response.redirect "?funktion=vagt&tilstand=start&vagt=morgen&opdater=ja&ansvarlig='" & Request.Form("ansvarlig") & "&table='" & Request.Form("dato") & "'"

end if
%>

Og her er koden for input i table:
<!-- PUT INFO I TABLE -->

<%if Request.Querystring("vagt") = "morgen" and Request.QueryString("opdater")="ja" and not Request.QueryString("ansvarlig")="" then %>
<!---#include file="dbcon.asp" --->
<%

    strSQL="Insert into `" & Request.querystring("table") & "` (ansvarlig, vagt) values('" & Request.querystring("ansvarlig")& "', '" & Request.querystring("vagt") & "')"
    set rs = conn.execute(strSQL)

Conn.Close
set Conn = Nothing
response.write = " Vagten er nu startet!"

end if
%>
Avatar billede erikjacobsen Ekspert
20. september 2006 - 14:31 #22
Der ser ikke ud til at være noget galt. Men lad os nu lige se alligevel... hvad står der rent faktisk i din SQL - tilføj en lille udskrift:

    strSQL="Insert into `" & Request.querystring("table") & "` (ansvarlig, vagt) values('" & Request.querystring("ansvarlig")& "', '" & Request.querystring("vagt") & "')"
    response.write(strSQL)
    set rs = conn.execute(strSQL)
Avatar billede lazeric Nybegynder
20. september 2006 - 14:48 #23
Den kode virker ikke rigtigt. Den viser bare fejlmeldingen men hopper over "response.write(strSQL)".

Jeg har prøvet at udkommentere:
set rs = conn.execute(strSQL)

Men så fejler den med:
Error Type:
Microsoft VBScript runtime (0x800A01B6)
Object doesn't support this property or method: 'Write'
Avatar billede lazeric Nybegynder
20. september 2006 - 15:15 #24
Aaaha! Så fandt jeg fejlen... og det var noget du spurgte om tidligere :-(
Der var et ' i koden som blev smidt ind i den boks hvor den hiver "ansvarlig" fra.

Beklager tidsspildet!!

Læg et svar så du kan få nogle point :-)
Avatar billede erikjacobsen Ekspert
20. september 2006 - 15:52 #25
Helt i orden. Man plejer at lave en replace

    a = "O'Brian"
    b = replace(a,"'","''")

og så kan man bruge '-ere i felter i databasen med indholdet af b. Jeg samler slet ikke på point, tak.
Avatar billede lazeric Nybegynder
20. september 2006 - 16:04 #26
hehe, jamen tak alligevel ;-)
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