Syntax Error in Insert Into Statement
tuhde
- datenbank
0 Cheatah
Hi, bin grad am Verzweifeln, ich finde diesen ominösen Syntax Error einfach nicht. Er tritt ziemlich spontan auf, dies aber häufig. Also ich hab es bis jetzt 1 mal hinbekommen den SQL ohne Error auszuführen (ich weis jedoch nichtmehr wie.....;(
Vielleicht kann ja der ein oder andere mal einen Blick drauf werfen.....glaub ich bin schon "betriebsblind"....
sql = "INSERT INTO vk_haus (Region, Beschreibung, Strasse, " &_
"Hausnummer, PLZ, Ort, Objekt_ID, Kaufpreis, Wohnflaeche, " &_
"Zimmer, Lage, Sonstiges, Haustyp, Etagen, Nutzflaeche, " &_
"Grundstuecksflaeche, Schlafzimmer, Badezimmer, " &_
"Heizungsart, Garage_Stellplatz, Zustand, Baujahr, " &_
"Verfuegbar_ab, Provision, verkauft, anz_bilder, " &_
"adresse_anzeigen, aktiv, neu_im_angebot, Ueberschrift)" & _
"VALUES ('" & strRegion &_
"', '" & strBeschreibung &_
"', '" & strStrasse &_
"', " & strHausnummer &_
", " & strPLZ &_
", '" & strOrt &_
"', '" & strObjekt_ID &_
"', " & strKaufpreis & _
", " & strWohnflaeche & _
", " & Zimmer & _
", '" & strLage & _
"', '" & strSonstiges & _
"', '" & strHaustyp & _
"', " & strEtagen & _
", " & strNutzflaeche & _
", " & strGrundstuecksflaeche & _
", " & strSchlafzimmer & _
", " & strBadezimmer & _
", '" & strHeizungsart & _
"', " & strGarage_Stellplatz & _
", '" & strZustand & _
"', " & strBaujahr & _
", '" & strVerfuegbar_ab & _
"', '" & strProvision & _
"', " & strVerkauft & _
", " & strAnz_Bilder & _
", " & strAdresse_Anzeigen & _
", " & strAktiv & _
", " & strNeu_Im_Angebot & _
", '" & strUeberschrift & "')"
die Datentypen lassen sich glaub vom Namen her ableiten.....
Danke für alle Versuche!!!
tuhde
Hi,
Also ich hab es bis jetzt 1 mal hinbekommen den SQL ohne Error auszuführen (ich weis jedoch nichtmehr wie.....;(
indem Du einen der Werte ein zu maskierendes Zeichen hast enthalten lassen, ohne es zu maskieren, beispielsweise ein Singlequote.
Bei einem Fehler im SQL-Statement ist übrigens das Statement viel interessanter als der ASP-Code, der es erzeugt. Du solltest es Dir mal auf dem Bildschirm ausgeben lassen, anstatt es auszuführen.
Cheatah
Hi,
Also ich hab es bis jetzt 1 mal hinbekommen den SQL ohne Error auszuführen (ich weis jedoch nichtmehr wie.....;(
indem Du einen der Werte ein zu maskierendes Zeichen hast enthalten lassen, ohne es zu maskieren, beispielsweise ein Singlequote.
ne soweit ich weis nich, aber trotzdem guter Einfall ;)
Bei einem Fehler im SQL-Statement ist übrigens das Statement viel interessanter als der ASP-Code, der es erzeugt. Du solltest es Dir mal auf dem Bildschirm ausgeben lassen, anstatt es auszuführen.
öhm sry kannst du mir vielleicht sagen wie man dies macht? *FlehendGuck
DANKE!!
Cheatah
Hi,
Also ich hab es bis jetzt 1 mal hinbekommen den SQL ohne Error auszuführen (ich weis jedoch nichtmehr wie.....;(
indem Du einen der Werte ein zu maskierendes Zeichen hast enthalten lassen, ohne es zu maskieren, beispielsweise ein Singlequote.
ne soweit ich weis nich, aber trotzdem guter Einfall ;)
Bei einem Fehler im SQL-Statement ist übrigens das Statement viel interessanter als der ASP-Code, der es erzeugt. Du solltest es Dir mal auf dem Bildschirm ausgeben lassen, anstatt es auszuführen.
öhm sry kannst du mir vielleicht sagen wie man dies macht? *FlehendGuck
sorry hatte grade den grandiosen Einfall zu response.write(sql) hehe
Hier das Ergebnis:
INSERT INTO vk_haus (Region, Beschreibung, Strasse, Hausnummer, PLZ, Ort, Objekt_ID, Kaufpreis, Wohnflaeche, Zimmer, Lage, Sonstiges, Haustyp, Etagen, Nutzflaeche, Grundstuecksflaeche, Schlafzimmer, Badezimmer, Heizungsart, Garage_Stellplatz, Zustand, Baujahr, Verfuegbar_ab, Provision, verkauft, anz_bilder, adresse_anzeigen, aktiv, neu_im_angebot, Ueberschrift)VALUES ('a', 'a', '', , , 'a', '1122aaa', 1, 1, , 'a', 'a', 'Einfamilienhaus', , 1, 1, , , 'Ölheizung', false, '', 1111, '11.11.1111', 'a', false, , false, true, true, 'a')
ich fang mal an zu checken....die "'', , , '', " dürften ja eigentlich keine Fehler machen oder?
DANKE!!
Cheatah
okay fehler ist lokalisiert ;)
Zahlen müssen nach dem Auslesen aus dem DB-Feld mit CINT() umgewandelt werden. Problem: es müssen nicht immer _alle_ Formularfelder angegeben werden.
Wie kann man das _ohne_ If-Schleifen lösen? Ich will nicht elendig viele Zeilen Code damit zubringen um abzufragen ob der Eintrag nun vorhanden ist oder nicht.
Wenn ich CINT() auf einen Leerwert anwende bringt er Fehler.
(man müsste das Topic jetz eigentlich auf ASP setzen, sry, war nicht abzusehen...)
Hat da jemand eine Lösungsidee?
Sonst setze ich die Felder einfach auf den Datentyp Text und prüfe mittels JS ob in den Feldern wo man nur Zahlen eingeben darf auch nur Zahlen stehen..das wäre mein Lösungsansatz....
danke
Hi,
okay fehler ist lokalisiert ;)
gartuliere :-) Du hast soeben gelernt, wie wichtig Debug-Ausgaben sind.
Wie kann man das _ohne_ If-Schleifen lösen?
Ich kann nicht für ASP sprechen. In Perl gibt es bei der Variablendeklaration jedoch folgende Möglichkeit:
my $var = param('var') || 'var';
Da param('var') (Request-Parameter auslesen) undefined zurückliefern kann, wird über "|| Defaultwert" ein Fallback definiert. Möglicherweise gibt es in ASP etwas ähnliches; ansonsten kapsele Dir eine Funktion, die z.B. nvl() heißen könnte ;-) und im Falle eines undefinierten Wertes bei (sinngemäß) "$var = nvl(getFromDB(), 'var')" den zweiten übergebenen Parameter zurückliefert.
Sonst setze ich die Felder einfach auf den Datentyp Text und prüfe mittels JS ob in den Feldern wo man nur Zahlen eingeben darf auch nur Zahlen stehen..das wäre mein Lösungsansatz....
Nein, eine clientseitige Technik ist immer nur Hilfe, niemals Lösung. Wenn jemand JavaScript deaktiviert hat, kann Dein Programm weiterhin abstürzen, und das gilt es in jedem Fall zu vermeiden.
Cheatah
Danke für die ganzen Antworten. Mir scheint das die sicherste und unkomplizierteste Lösung für diesen Fall ein JS zu sein. Da das eh nur eine Administration für eine Website ist, an der nur wenige Leute rumadministrieren und ich denen auch noch die Rechner einrichte, weis ich was dort gespielt wird, und wenn sie was verstellen dann geschieht es ihnen recht das das nicht mehr geht ;)
Ich habe es mittels JS Funktion gelöst die auf Zahlen / Buchstaben / Sonderzeichen checkt, das funktioniert auch ziemlich gut.
Danke für die Mühe!
tuhde
Hi tuhde,
Mir scheint das die sicherste und unkomplizierteste Lösung für diesen
Fall ein JS zu sein.
also wenn die "sicherste" Lösung eine sein soll, die auf etwas beruht,
das jeder Besucher abschalten kann, wenn er das für sinnvoll hält, dann
unterscheiden sich unsere Vorstellungen des Begriffs "Sicherheit".
und wenn sie was verstellen dann geschieht es ihnen recht das das nicht
mehr geht ;)
Und Dir geschieht es recht, wenn sie Deine serverseitige Anwendung damit
zum Absturz bringen und Deine sämtlichen Besucher nicht mehr an Deine
Daten kommen.
Viele Grüße
Michael
okay fehler ist lokalisiert ;)
Zahlen müssen nach dem Auslesen aus dem DB-Feld mit CINT() umgewandelt werden. Problem: es müssen nicht immer _alle_ Formularfelder angegeben werden.
Wie kann man das _ohne_ If-Schleifen lösen? Ich will nicht elendig viele Zeilen Code damit zubringen um abzufragen ob der Eintrag nun vorhanden ist oder nicht.
Wenn ich CINT() auf einen Leerwert anwende bringt er Fehler.
(man müsste das Topic jetz eigentlich auf ASP setzen, sry, war nicht abzusehen...)
Hat da jemand eine Lösungsidee?
Sonst setze ich die Felder einfach auf den Datentyp Text und prüfe mittels JS ob in den Feldern wo man nur Zahlen eingeben darf auch nur Zahlen stehen..das wäre mein Lösungsansatz....
danke
Hi,
was wollen wir denn jetzt eigentlich?
ASP bzw. VBScript besitzt eine Implizite Variablenkonvertierung
der Fehler mit CInt(NULL) ist logisch, denn wie will man einen NULL (nicht 0)-Wert auch in ein Integer umwandeln?
Bei deinem SQL-Statement ist mir aufgefallen, das VALUES direkt an einer Klammer klebt. Da sollte mal besser ein Leerzeichen dazwischen.
Und, du mußt immer mit der maximalen Blödheit des Anwenders rechnen, der z.b. Text in ein Feld eingibt, wo eigentlich nur Nummern drinstehen sollen. Deswegen ist eine Validierung der gesendeten Werte unbedingt serverseitig erforderlich, denn wie Cheatah schon sagte, man kann nicht davon ausgehen, dass die Leute immer Javascript angeknipst haben. Du bräuchtest dann für jede Variable eine IF-Checkung dieser Art (natürlich nicht jedesmal mit sub/function davor):
function dataintodb
IF not isNumeric(variable) THEN
Response.Write "Eingabe sowieso entspricht nicht den Vorgaben"
dataintodb = "error"
exit function
end if
....
'bis hierhin gekommen? dann alles okay, also sql formulieren
insert_sql = "..... bla bla ....."
dbconn.execute insert_sql
dataintodb = "error"
end function
HTH, tschau, Frank