tuhde: Syntax Error in Insert Into Statement

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

  1. 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

    1. 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

      1. 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

        1. 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

          1. 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

            1. 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

              1. 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

          2. 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