Sytaxfehler???
Stefan
- asp.net
0 Janko Wellmeier0 Stefan0 Janko Wellmeier0 Stefan0 Alexander Ganz0 Stefan
0 Alexander Ganz0 Stefan
0 Stefan Falz0 Markus Mühlich
Hallo,
ich bekomme bei fogendem Script immer die Fhelermeldung:
Microsoft OLE DB Provider for ODBC Drivers-Fehler '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntaxfehler in der INSERT INTO-Anweisung.
/eingabe.asp, Zeile 221
Das Script sieht so aus:
<%
T1=Request.Form("Name")
Vorname=Request.Form("Vorname")
Anschrift=Request.Form("Anschrift")
lngTelefon=Request.Form("Telefon")
Mail=Request.Form("Mail")
Taetigkeit=Request.Form("Taetigkeit")
Anbieter=Request.Form("Anbieter")
Region=Request.Form("Region")
lngEingang=Request.Form("Eingang")
lngab=Request.Form("ab dem")
Firmenprofil=Request.Form("Firmenprofil")
Jobprofil=Request.Form("Jobprofil")
Anforderungsprofil=Request.Form("Anforderungsprofil")
if not Request.Form.Count=0 then
ok = true
if ok then
Set Conn = Server.CreateObject("ADODB.Connection")
strcon = "driver={Microsoft Access-Treiber (*.mdb)};" & _
"dbq=" & Server.MapPath("db1.mdb")
Conn.Open strcon,"",""
' ADO Recordset-Objekt erzeugen und öffnen.
Set rs = Server.CreateObject("ADODB.Recordset")
sql = "INSERT INTO angebote (Name, Vorname, Anschrift, Telefon, Mail, Taetigkeit, Anbieter,"
sql = sql & "Region, Eingang, ab dem, Firmenprofil, Jobprofil, Anforderungsprofil)"
sql = sql & "VALUES ('" & T1 & "', '" & Vorname & "', '"
sql = sql & Anschrift & "', '" & lngTelefon & "', '" & Mail & "', '"
sql = sql & Taetigkeit & "', '" & Anbieter & "', '" & Region & "', '"
sql = sql & lngEingang & "', '" & lngab & "', '" & Firmenprofil & "', '"
sql = sql & Jobprofil & "', '" & Anforderungsprofil & "');"
Set rs = Conn.execute(sql)
Conn.close
Set Conn = Nothing
end if
end if
%>
Erkennt jemand den Fehler?
Grüße Stefan
Hallo,
du hast in Deiner Insert Anweisung alle Values mit ' ' versehen. Sind das denn alles wirklich Strings oder auch Zahlen,Daten oder ähnliches?? Dann wären die Zeichen nämlich falsch.
Gruß
JankoW
Hallo,
du hast in Deiner Insert Anweisung alle Values mit ' ' versehen. Sind das denn alles wirklich Strings oder auch Zahlen,Daten oder ähnliches?? Dann wären die Zeichen nämlich falsch.
Gruß
JankoW
Hallo und danke Jankow,
ich habe es versucht, die '' bei den Zahlenwerten zu entfernen, bekomme aber immer noch die gleiche Fehlermeldung.
Was muss ich denn bei Zahlen berücksichtigen?
Gruß
Stefan
Hi,
also die Hochkommas bei den Zahlenwerten zu entfernen ist schon mal richtig. Hast Du ein Datum dabei?? Wenn ja, dann muß die Eingabe folgendermaßen aussehen:
"#" & Monat & "/" & Tag & "/" & Jahr & "#" damit es richtig aufgenommen wird.
Sollte das nicht funktionieren, dann lass Dir bitte mal die sql-Anweisung ausgeben, poste sie hier und gib zur Not noch die einzelnen Felder mit Feldertypen an. Dann schauen wir weiter.
Aber vielleicht klappt das ja auch schon.
Ciao
JankoW
huhu Jankow,
also das hab ich versucht und ich hab mir auch die sql-Anweisung ausgeben lassen:
INSERT INTO angebote (Name, Vorname, Anschrift, Telefon, Mail, Taetigkeit, Anbieter, Region, Eingang, ab dem, Firmenprofil, Jobprofil, Anforderungsprofil)VALUES ('z', 'z', 'z', 1, 'z', 'z', 'z', 'z', #//#", #//#", ' ', ' ', '');
Microsoft OLE DB Provider for ODBC Drivers-Fehler '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntaxfehler in der INSERT INTO-Anweisung.
/eingabe.asp, Zeile 223
Nur Z eingegeben nd bei ab dem und Eingang Datumswerte. Immer noch
Syntaxfehler. Vielleicht habe ich es ja falsch geschrieben.
Set Conn = Server.CreateObject("ADODB.Connection")
strcon = "driver={Microsoft Access-Treiber (*.mdb)};" & _
"dbq=" & Server.MapPath("db1.mdb")
Conn.Open strcon,"",""
' ADO Recordset-Objekt erzeugen und öffnen.
Set rs = Server.CreateObject("ADODB.Recordset")
sql = "INSERT INTO angebote (Name, Vorname, Anschrift, Telefon, Mail, Taetigkeit, Anbieter, " & _
"Region, Eingang, ab dem, Firmenprofil, Jobprofil, Anforderungsprofil)"
sql = sql & "VALUES ('" & stef & "', '" & Vorname & "', " & _
"'" & Anschrift & "', " & lngTelefon & ", '" & Mail & "', " & _
"'" & Taetigkeit & "', '" & Anbieter & "', '" & Region & "', " & _
"#" & Monat & "/" & Tag & "/" & Jahr & "#"", " & _
"#" & Monat & "/" & Tag & "/" & Jahr & "#"", '" & Firmenprofil & "', " & _
"'" & Jobprofil & "', '" & Anforderungsprofil & "');"
Response.Write(sql)
Set rs = Conn.execute(sql)
Conn.close
Set Conn = Nothing
end if
end if
Gruß Stefan
Hallo Stefan!
Du hast die Anführungszeichen beim Datum doppelt:
"#" & Monat & "/" & Tag & "/" & Jahr & "#"", " & _
"#" & Monat & "/" & Tag & "/" & Jahr & "#"", '" &
^^
Eins muss weg.
Bis dann
Alex
Hallo Stefan!
Du hast die Anführungszeichen beim Datum doppelt:
"#" & Monat & "/" & Tag & "/" & Jahr & "#"", " & _
"#" & Monat & "/" & Tag & "/" & Jahr & "#"", '" &
^^
Eins muss weg.
Bis dann
Alex
Hallo Alex,
wenn ich eins weg nehme, bekomme ich die Fehlermeldung, dass ein Anweisungsende erwratet wurde.???????
Stefan
Hallo Stefan!
Poste bitte nochmal den ausgegeben Sql String und den Code dazu.
Bis dann
Alex
Hallo Alex,
wenn ich eins weg nehme, bekomme ich die Fehlermeldung, dass ein Anweisungsende erwratet wurde.???????
Stefan
Hallo Stefan!
Poste bitte nochmal den ausgegeben Sql String und den Code dazu.
Bis dann
Alex
Hallo ALex,
also, ich habe über Response.Write den sql String aufgerufen und das Ergebniss bekommen:
INSERT INTO angebote (Name, Vorname, Anschrift, Telefon, Mail, Taetigkeit, Anbieter, Region, Eingang, ab dem, Firmenprofil,
Jobprofil, Anforderungsprofil)VALUES ('z', 'z', 'z', 1, 'z', 'z', 'z', 'z', #//#", #//#", ' ', ' ', '');
Microsoft OLE DB Provider for ODBC Drivers-Fehler '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntaxfehler in der INSERT INTO-Anweisung.
/eingabe.asp, Zeile 223
Nur Z eingegeben und bei 'ab dem' und 'Eingang' Datumswerte.
Set Conn = Server.CreateObject("ADODB.Connection")
strcon = "driver={Microsoft Access-Treiber (*.mdb)};" & _
"dbq=" & Server.MapPath("db1.mdb")
Conn.Open strcon,"",""
' ADO Recordset-Objekt erzeugen und öffnen.
Set rs = Server.CreateObject("ADODB.Recordset")
sql = "INSERT INTO angebote (Name, Vorname, Anschrift, Telefon, Mail, Taetigkeit, Anbieter, " & _
"Region, Eingang, ab dem, Firmenprofil, Jobprofil, Anforderungsprofil)"
sql = sql & "VALUES ('" & stef & "', '" & Vorname & "', " & _
"'" & Anschrift & "', " & lngTelefon & ", '" & Mail & "', " & _
"'" & Taetigkeit & "', '" & Anbieter & "', '" & Region & "', " & _
"#" & Monat & "/" & Tag & "/" & Jahr & "#"", " & _
"#" & Monat & "/" & Tag & "/" & Jahr & "#"", '" & Firmenprofil & "', " & _
"'" & Jobprofil & "', '" & Anforderungsprofil & "');"
Response.Write(sql)
Set rs = Conn.execute(sql)
Conn.close
Set Conn = Nothing
end if
end if
Gruß und Danke
Stefan
Hallo Stefan!
Das ist ja immernoch derselbe Quellcode, wie von vorhin.
Wie gesagt, die " beim Datum müssen raus.
Das Ergebnis von dieser Änderung hätte mich interessiert.
Trag am Besten mal vernüftige Daten ein. (Datum)
Hast du schon Markus Mühlich´s Methode ausprobiert?
(ist sehr viel übersichtlicher)
Dann kannst du besser die Fehler finden.
Also bis dann nochmal
Alex
Hallo,
Das ist ja immernoch derselbe Quellcode, wie von vorhin.
Wie gesagt, die " beim Datum müssen raus.
Das Ergebnis von dieser Änderung hätte mich interessiert.
Trag am Besten mal vernüftige Daten ein. (Datum)
Hast du schon Markus Mühlich´s Methode ausprobiert?
(ist sehr viel übersichtlicher)
Dann kannst du besser die Fehler finden.
schaut euch doch einfach mal die Antwort von mir an.
Name ist ein reserviertes Wort und der Fehler kommt
zu 99% deswegen.
Tschau, Stefan
DANKE, DANKE, DANKE,
so Problem behoben!!!
Ich danke Euch, das war mit eine grosse Hilfe.
Überhaupt hab ich noch nirgends ein Forum wie dieses entdeckt.
Ich bin begeistert.
Stefan
Hallo Stefan,
schaut euch doch einfach mal die Antwort von mir an.
Name ist ein reserviertes Wort und der Fehler kommt
zu 99% deswegen.
das hatte ich Deinem Namensvetter gestern auch schon mal gesagt, aber zumndest bei mir läuft das Konstrukt auch mit dem Feldnamen "Namen".
Wobei ich Dir aber absolut zustimme, das die Verwendung von reservierten Namen zu Vermeiden ist.
Gruß
Markus
Hi,
ich will jetzt wirklich nicht kleinlich wirken und sicher war es auch nur ein Schreibfehler aber natürlich müßte es mit "Namen" funktionieren nur eben nicht mit "Name" (ohne "n").
Nur rein zur Klärung.
Ciao
JankoW
Hallo,
ich will jetzt wirklich nicht kleinlich wirken
Nein ist schon i.O., denn Name <> Namen.
Ich habe jetzt das Konstrukt von Stefan nochmal mit seinem Originalquellcode und Anweisungen auf IIS4 und IIS5 durchlaufen lassen, und bei beiden wird die Datenbank mit dem Feldnamen "Name" gefüllt.
Und das war mein (versaubeutelter) Erklärungsversuch, daß zumindest in diesem Fall dieser Feldname IMO keinen Einfluß auf die Fehlermeldung haben kann.
Natürlich bin ich selber der Ansicht grundsätzlich reservierte Wörter nicht zu verwenden, allerdings ebenso
keine Feldnamen aus zwei Wörtern (notfalls gibt es den Unterstrich)
keine Großschreibung
nur Buchstaben und Ziffern, keine Sonderzeichen
nach Möglichkeit Feldnamen verwenden die den Datentyp spiegeln
Alleine durch diese Verwendung können viele Syntaxfehler in SQL Anweisungen und mit der Verarbeitung von Variablen verhindert werden.
Gruß
Markus
ich will jetzt wirklich nicht kleinlich wirken
Nein ist schon i.O., denn Name <> Namen.
Ich habe jetzt das Konstrukt von Stefan nochmal mit seinem Originalquellcode und Anweisungen auf IIS4 und IIS5 durchlaufen lassen, und bei beiden wird die Datenbank mit dem Feldnamen "Name" gefüllt.
Soweit ich weiss, darf man bei einer Access-Tabelle keine Feldnamen wie 'Name' oder 'Text' haben.
Bei einer ECHTEN SQL-Datenbank spielt das wiederum keine Rolle!
Bye Andreas
Hallo Andreas,
Soweit ich weiss, darf man bei einer Access-Tabelle keine Feldnamen wie 'Name' oder 'Text' haben.
Wenn dem so wäre, würde sich Access 97/2000 schon bei der Definition der Feldnamen mit einer Fehlermeldung beschweren. Dem ist aber nicht so.
Leg mal eine Tabelle mit diesen Feldnamen an, und definiere eine Auswahlabfrage - die sich aus der Tabelle bedient. Da wird es auch keine Probleme geben. Was auch vollkommen korrekt ist, da es hier zu keinem Konflikt zu reservierten Wörten kommen kann.
Problematisch wird es erst dann, wenn Du Dich der Access eigenen Funktionen bedienst, oder mit VBA selbst Funktionen schreibst. Dann kann es zu Konflikten kommen, muß aber nicht. Wann genau es zu Konflikten kommt, ist nicht mit Bestimmheit zu sagen.
Wenn Du dazu weitere Informationen benötigst, kann ich Dir Karl Donaubauers AccessFAQ (www.donkarl.com) empfehlen.
Auf dieser IMO besten deutschsprachigen AccessFAQ stehen nicht nur Hinweise zu Namenskonventionen, sondern auch weitere nützliche Tipps und Links.
Gruß
Markus
Hallo Markus,
Soweit ich weiss, darf man bei einer Access-Tabelle keine Feldnamen wie 'Name' oder 'Text' haben.
Wenn dem so wäre, würde sich Access 97/2000 schon bei der Definition der Feldnamen mit einer Fehlermeldung beschweren. Dem ist aber nicht so.
Access beschwert sich zwar nicht, aber man sollte es trotzdem nicht machen.
Leg mal eine Tabelle mit diesen Feldnamen an, und definiere eine Auswahlabfrage - die sich aus der Tabelle bedient. Da wird es auch keine Probleme geben. Was auch vollkommen korrekt ist, da es hier zu keinem Konflikt zu reservierten Wörten kommen kann.
Da Accessintern.
Problematisch wird es erst dann, wenn Du Dich der Access eigenen Funktionen bedienst, oder mit VBA selbst Funktionen schreibst. Dann kann es zu Konflikten kommen, muß aber nicht. Wann genau es zu Konflikten kommt, ist nicht mit Bestimmheit zu sagen.
Eigentlich schon. Und zwar, wenn über ODBC bzw. die Jet-Engine eine
Abfrage gestartet wird, die die bösen Wörter im Statement enthält.
SELECT text FROM tabelle WHERE ... bringt einen Fehler
SELECT [text] FROM tabelle WHERE ... funzt, da text in [...] steht.
Ansonsten geht der Treiber hin und prüft das Statement, bzw
übergibt es an die Anwendung. text wird dann erstmal als Schlüsselwort
angesehen, das weder der Feldname weder in [...] eingegrenz ist noch
ein Tabellenname voransteht. (SELECT tabelle.text FROM tabelle WHERE ...)
Wenn Du dazu weitere Informationen benötigst, kann ich Dir Karl Donaubauers AccessFAQ (www.donkarl.com) empfehlen.
ACK.
Tschau, Stefan
Hallo Markus,
Problematisch wird es erst dann, wenn Du Dich der Access eigenen Funktionen bedienst, oder mit VBA selbst Funktionen schreibst. Dann kann es zu Konflikten kommen, muß aber nicht. Wann genau es zu Konflikten kommt, ist nicht mit Bestimmheit zu sagen.
Eigentlich schon. Und zwar, wenn über ODBC bzw. die Jet-Engine eine
Abfrage gestartet wird, die die bösen Wörter im Statement enthält.
SELECT text FROM tabelle WHERE ... bringt einen Fehler
SELECT [text] FROM tabelle WHERE ... funzt, da text in [...] steht.
der Teil war natrülcih Quatsch. Bei DML-Statements (INSERT, ...)
gilt obiges Verfahren. Entweder tabelle.name oder [name] schreiben,
dann gehts auch, ist aber trotzdem nicht zu empfehlen.
Tschau, Stefan
Hallo Stefan
SELECT text FROM tabelle WHERE ... bringt einen Fehler
SELECT [text] FROM tabelle WHERE ... funzt, da text in [...] steht.
Folgende Testsituation auf Access97:
text = "text"
strsql(1) = "SELECT text FROM Tabelle1 WHERE (((text)= 'text'));"
strsql(2) = "SELECT " & text
strsql(2) = strsql(2) & " FROM Tabelle1 WHERE (((" & text & ") = 'text'));"
For i = 1 To 2
Set rs(i) = db.OpenRecordset(strsql(i), dbOpenDynaset)
rs(i).AddNew
rs(i)!text = text
rs(i).Update
rs(i).MoveFirst
Do Until rs(i).EOF
MsgBox rs(i)!text
rs(i).MoveNext
Loop
Next
Set db = Nothing
For i = 1 To 2
Set rs(i) = Nothing
Next
Diese Funktion definiert eine Auswahlabfrage die mit dem Schlüsselwort text arbeitet, sowie eine zweite Auswahlabfrage die über die Variable text den String "text" erhält.
Beim Aufruf dieser Funktion treten keine der o.g. Konflikte auf, obwohl eine reserviertes Wort mehrfach verwendet wurde, egal ob als String oder Variable.
Ich werde das heute Abend mal auf den IIS4 und IIS5 setzen, wahlweise mit ODBC und DSN-loser Verbindung. Ich gehe mal davon aus, daß es auch dort zu keinen Konflikten kommt.
Nicht das wir uns falsch verstehen, ich bin absolut davon überzeugt (schon alleine der Lesbarkeit wegen), daß das Einhalten einer Namenskonventionen der einzige sichere Weg ist um 100%ig Konflikte zu vermeiden.
Ich wollte lediglich mal zeigen, daß das Auftreten von Namenskonflikten nicht oder nur schwer replizierbar ist.
Gruß
Markus
Hallo,
INSERT INTO angebote (..,..,..,[ab dem],...,...)
Gruß
Markus
Hallo Stefan!
Auf Anhieb sehe ich keinen Fehler. Bei dem Semikolon am Ende des Sql Strings bin ich mir nicht ganz sicher - lass es mal weg.
Falls es dann immer noch nicht funktionieren sollte, lass dir den SQL String über Response.Write mal ausgeben.
Vielleicht musst du noch was in den Formularfeldern abfangen (Hochkomma?) '
Bis dann
Alex
Hallo Stefan!
Auf Anhieb sehe ich keinen Fehler. Bei dem Semikolon am Ende des Sql Strings bin ich mir nicht ganz sicher - lass es mal weg.
Falls es dann immer noch nicht funktionieren sollte, lass dir den SQL String über Response.Write mal ausgeben.
Vielleicht musst du noch was in den Formularfeldern abfangen (Hochkomma?) '
Bis dann
Alex
Hallo Alex,
was meinst Du mit abfangen?
Hallo Stefan,
ich bekomme bei fogendem Script immer die Fhelermeldung:
Microsoft OLE DB Provider for ODBC Drivers-Fehler '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntaxfehler in der INSERT INTO-Anweisung.
evtl. hilft: http://www.aspfaq.de/faq/index.asp?FID=85&ELE=7403
[...]
sql = "INSERT INTO angebote (Name, Vorname, Anschrift, Telefon, Mail, Taetigkeit, Anbieter,"
In deinem Fall dürfte das Problem am Spaltennamen "Name" liegen.
Siehe Artikel.
HTH, Stefan
Hallo,
sql = "INSERT INTO angebote (Name, Vorname, Anschrift, Telefon, Mail, Taetigkeit, Anbieter,"
sql = sql & "Region, Eingang, ab dem, Firmenprofil, Jobprofil, Anforderungsprofil)"
sql = sql & "VALUES ('" & T1 & "', '" & Vorname & "', '"
sql = sql & Anschrift & "', '" & lngTelefon & "', '" & Mail & "', '"
sql = sql & Taetigkeit & "', '" & Anbieter & "', '" & Region & "', '"
sql = sql & lngEingang & "', '" & lngab & "', '" & Firmenprofil & "', '"
sql = sql & Jobprofil & "', '" & Anforderungsprofil & "');"
huihui, da hast Du aber eine SQL Anweisung.
1. Wenn Du alle Felder der Tabelle füllen möchtest reicht die Anweisung: sql = "INSERT INTO angebote "
Nur wenn Du bestimmte Felder der Tabelle füllen möchtest, müssen diese expilizit in Klammern aufgeführt werden.
2. Es gibt besimmte Regeln zum definieren der Tabellenfelder. Eine hhabe ich dir schon bei Deinem ersten Problem geannt, die zweite Regel heißt: Benenne Feldnamen niemals mit zwei getrennten Worten, denn das kann enorme Probleme bereiten, da dann diese Feldnamen in eckigen Klammern [ab dem] angesprochen werden müssen.
sql = sql = "INSERT INTO angebote (Name, Vorname, Anschrift, Telefon, Mail, Taetigkeit, Anbieter,Region, Eingang, [ab dem], Firmenprofil, Jobprofil, Anforderungsprofil) VALUES ("
3. Jetzt noch die einzelnen Values dazu, und der Aufbau der SQL Anweisung ist korrekt:
sql = sql = "INSERT INTO angebote (Name, Vorname, Anschrift, Telefon, Mail, Taetigkeit, Anbieter,Region, Eingang, [ab dem], Firmenprofil, Jobprofil, Anforderungsprofil) VALUES ("
sql = sql & "'" & t1 & "',"
sql = sql & "'" & Vorname & "',"
sql = sql & "'" & anschrift & "',"
sql = sql & "'" & lngtelefon & "',"
sql = sql & "'" & mail & "',"
sql = sql & "'" & taetigkeit & "',"
sql = sql & "'" & anbieter & "',"
sql = sql & "'" & Region & "',"
sql = sql & "'" & lngEingang & "',"
sql = sql & "'" & lngab & "',"
sql = sql & "'" & firmenprofil & "',"
sql = sql & "'" & jobprofil & "',"
sql = sql & "'" & Anforderungsprofil & "');"
Wenn jetzt noch Fehler kommen, kann dies eigentlich nur mit Typumwandlungsproblemen zu tun haben. Aber die bekommst Du wieder mit einer anderen Fehlermeldung angezeigt.
Du kannst Dich ja dann nochmal melden.
Gruß
Markus