Anzeige

Zurück   Adobe UserGroup Dreamworker.de > Tutorials, Links, Tipps & Tricks > Tutorials

Tutorials Hier werden häufig gestellte Fragen genauer in kurzen Tutorials beantwortet und allgemeine Tipps & Tricks gegeben.

Antwort
 
Themen-Optionen Thema durchsuchen
Alt 06.04.2003, 15:48   #1
Gudula
die Gütige ...
 
Benutzerbild von Gudula
 
Registriert seit: 04/2001
Ort: aus dem Sauerland
Beiträge: 10.257
[SQL]...Reservierte Schlüsselwörter

Beispiel serverseitige Programmierung mit ASP/vbScript/Access

Kennen wir das nicht alle, da erstellt man eine Tabelle, legt alle Felder an, baut sich ein Recordset, ruft die Daten im Script auf und freut sich, dass man es endlich geschafft hat, eine Verbindung zur Datenbank herzustellen.

Nun, Daten müssen ja auch irgendwann mal in eine Tabelle eingefügt werden. Man baut sich also ein Insert-Script und lässt es via Execute ausführen oder nutzt das Serververhalten (Datensatz einfügen) im Falle UltraDev/MX.

Bsp.

<%@LANGUAGE="VBSCRIPT" %>
<%
dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "DSN=DeineVerbindung"
' --- update, insert oder delete anweisung
strSQL = "insert into [tabelle] (text) values ('MeinText')"
objConn.Execute( strSQL )
' --- Verbindung schließen
objConn.close
set objConn = Nothing
%>

Dann der Schock, alles, was vorher so schön funktioniert hat, geht jetzt nicht mehr.

Es kommt folgende Fehlermeldung:

Kompilierungsfehler in Microsoft VBScript- Fehler '800a03ea'
Syntaxfehler
/iisHelp/common/500-100.asp, line 160
elseIf (objASPError.Description > "") Then
^
Microsoft OLE DB Provider for ODBC Drivers- Fehler '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntaxfehler in der INSERT INTO-Anweisung.
/Seite/UltraDev/Datenhinein.asp, line 14


Was tun:

Man schaut sich die Insert-Anweisung an, die ja in der Fehlermeldung angemeckert wird
und überprüft

1. ob Schreibweise des Statements korrekt ist

strSQL = "INSERT INTO [Tabelle] (text) VALUES ('MeinText')"
Das eingefügte Statement ist von der Syntax her korrekt.

2. Man überprüft, ob die Tabellenbezeichnung/Feldbezeichnungen mit der DB-Tabelle übereinstimmen (wobei in dem Falle die Fehlermeldung auch anders lauten kann),

3. Man überprüft, wird der korrekte Feldwert übergeben, sprich Textfeld, der Wert muss in Hochkommata eingefasst werden oder Integer, hier müssen die Hochkommata weggelassen werden. In dem Falle korrekt, da es ja ein Textfeld ist.

4. Im Falle, dass der Wert über eine Variable ausgelesen wird, überprüfen, ob der Variablen das korrekte Formularfeld zugewiesen worden ist, Tippfehler schleichen sich schnell ein.

myVar = Request.Form("MyName")

Statement:

strSQL = "INSERT INTO [Tabelle] (text) VALUES ('" & myVar & "')"

Um etwas klarer zu sehen, was nun jetzt eigentlich in die Tabelle eingefügt werden soll, kann man sich zur weiteren Fehlererkennung den SQL-String auf dem Bildschirm anzeigen lassen. Da objConn.Execute ja noch nicht ausgeführt wurde, setzt man diese einfach davor:

strSQL = "insert into [tabelle] (text) values ('MeinText')"
Response.write strSQL
objConn.Execute( strSQL )

Das Ergebnis ist:

insert into tabelle (text) values ('MeinText')
Kompilierungsfehler in Microsoft VBScript- Fehler '800a03ea'
...


Der Wert sollte eigentlich reingeschrieben werden, tut er aber nicht, WO LIEGT JETZT DER FEHLER ?

Ganz einfach..

Die Lösung ist: text ist ein reserviertes Schlüsselwort und die sollten als Feldbezeichnungen der Tabelle nicht verwendet werden. Diese Wörter sind vorbelegt und haben im SQL-Statement oder auch in der nachherigen Programmierung eine besondere Bedeutung.

Es gibt jetzt 2 Möglichkeiten der Lösung:

1. Man fügt diese Feldbezeichung im SQL-Statement in eckige Klammern

strSQL = "insert into [tabelle] ([text]) values ('MeinText')"
objConn.Execute( strSQL )

2. Man schließt von vornherein aus, dass man in die Verlegenheit kommt, doch mal eines zu erwischen. Einfach, indem man einen Su- bzw. präfix um die Feldbezeichnung setzt (in der DB-Tabelle und auch im Statement)

strSQL = "insert into [tabelle] (text_t) values ('MeinText')"
objConn.Execute( strSQL )

Eine Liste über reservierte Schlüsselwörter ist hier nachzulesen.
http://support.microsoft.com/default...d=kb;de;D35589^

Nachtrag:
Hier sind zwar die gängigsten aufgelistet aber z.b. language ist auch ein Schlüsselwort. Gerade interessant für die, die Ihre Website mehrsprachig erstellen müssen.

Anmerkung:
Es gibt mehrere Arten der Programmierung.
Dieses Beispiel stellt nur eine Version dar.
Anmerkungen darüber bzw. Verbesserungsvorschläge bitte ich in diesem Board ASP,IIS & Co. oder ASP-bezogen in Dreamweaver (MX) / UltraDev zu posten.

Eine Zusammenfassung der Ergebnisse bzw. weitere Scriptvorschläge werden dann wiederum hier im FAQ-Board veröffentlicht.

[Edited by Gudula on 04-16-2003 at 08:56 PM GMT]
__________________
Herzliche Grüße, Gudula
per aspera ad astra
Ich bin kein Klugscheißer, ich weiß es wirklich besser!
Gudula ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:06 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.