thales: INSERT INTO tabelle mit AutoWert

Hallo Forumer,

wie es scheint muss ich bei einem Problem, mit dem ich mich schon länger
rumschlage, eure Hilfe in Anspruch nehmen:
Ich benutze ASP zusammen mit einer Access-DB (ODBC) und möchte an eine
vorhandene Tabelle (book) eine einen Datensatz anfügen. Alles kein Ding,
aber meine Tabelle hat ein Feld namens "nr", das gleichzeitig AutoWert und
Primärschlüssel ist.

Ich habe schon verschiedene Lösungen für dieses Problem ausprobiert:
Eine Lösung, die anscheinend bei MySQL klappt:

Angenommen, das feld "nr" hat die eigenschaft "auto_wert", dann darf man
nicht schreiben:
        "insert into table (id,feld1,feld2) values (null,'inhalt1','inhalt2')"
sondern:
        "insert into table (feld1,feld2) values ('inhalt1','inhalt2')"
Also das feld einfach weglassen.

Das funktioniert in meinem Fall:

SQL = "insert into book (date,name,text,email,sortierdatum) values_
      ('inhalt1','inhalt2','inhalt3','inhalt4','inhalt5')"

leider nicht! Statt dessen schleudert mir der ODBC-Treiber eine
Fehlermeldung entgegen: "Fehler in der INSERT INTO-Syntax"

Also, wenn euch das Problem gerade mit ASP + Access + ODBC schon mal
untergekommen ist, wäre ich über Lösungsansätze dankbar.

MfG thales

  1. Hi

    --------
    SQL= "INSERT INTO Abfahrten (Schiff, Abfahrtshafen,Abfahrtsdatum ) VALUES("&_
        "'" & Schiff &_
           "', '" & Hafen &_
        "', '"& Datum &_
        "')"
    --------

    sollt's tun...
    wenn nicht, post mal die ganze fehlermeldung

    schöne, cu
      capior

    1. Danke, dass du dich meinem Problem angenommen hast :)

      sollt's tun...
      wenn nicht, post mal die ganze fehlermeldung

      Also bei mir ergibt folgende Zeile:

      SQL = "INSERT INTO book (date,name,email,text,sortierdatum) VALUES ('"& Request("date") &"', '"& lcase(name) &"', '"& email &"', '"& lcase(text) &"','"& cuurdate &"')"

      folgende Fehlermeldung:

      Microsoft OLE DB Provider for ODBC Drivers-Fehler '80040e14'

      [Microsoft][ODBC Microsoft Access Driver] Syntaxfehler in der INSERT INTO-Anweisung.

      /thales/book.asp, Zeile 13

      1. Hallo thales,

        irgendwie ist Deine ganze SQL Anweisung verdorben:

        1.)

        SQL = "INSERT INTO book (date,name,email,text,sortierdatum)

        Das Verwenden von Schlüsselwörtern ist immer riskant - und Du verwendest gleich drei davon:

        date
        name
        text

        Besser ist es Datenfeldern etwas harmlosere Bezeichnungen zu geben, z.B.:

        fldDate
        fldName
        fldEMail
        fldText
        fldSortierdatum

        2.)
        Ich vermute mal, daß Du mit ASP arbeitest. ASP kennt Request.Form und Request.QueryString, aber nicht:

        Request("date")

        Also dann entweder:

        Request.Form("date") oder
        Request.QueryString("date")

        Zusätzlich ist es übersichtlicher die gesendeten Formulardaten direkt in Variable zu speichern und dann mit diesen weiter zu arbeiten:

        myDate = Request.Form("date") oder
        myDate = Request.QueryString("date")

        3.) Die Funktion LCase solltest Du nicht in einer SQL Anweisung ausführen, sondern vorher:

        strName = LCase(strName)
        strText = Lacse(strText)

        Somit sollte Deine SQL Anweisung (hoffentlich ;-) so laufen:

        SQL = "INSERT INTO book (fldDate,fldName,fldEMail,fldText,fldSortierdatum) VALUES ('" & myDate & "','" & strName & "','" & strEMail & "','" & strText & "','" & strCuurdate & "');"

        HTH

        Viele Grüße aus Köln
        Markus

        1. hi!

          2.)
          Ich vermute mal, daß Du mit ASP arbeitest. ASP kennt Request.Form und Request.QueryString, aber nicht:

          Request("date")

          doch doch.

          Also dann entweder:

          Request.Form("date") oder
          Request.QueryString("date")

          Request("date") fängt beides ab. Empfiehlt sich, wenn mal mit post und mal mit get "geformulart" wird.

          Bye, AdHoc

          1. Hallo,

            Ich vermute mal, daß Du mit ASP arbeitest. ASP kennt Request.Form und Request.QueryString, aber nicht:

            doch doch.

            Ok, ok :-)

            war vollkommen falsch ausgedrückt.

            Request("Feld") funkioniert auch, aber damit ASP dies interpretieren kann, wird das gesamte Request Objekt durchlaufen:

            1. QueryString
            2. Form
            3. Cookies
            4. ClientCertificate
            5. ServerVariables

            Und genau in dieser Reihenfolge.

            Daraus folgt, daß z.B. eine Anweisung Request.ServerVariables deutlich performanter als nur Request ist, da ASP sofort erkennt auf welche Collection zugegriffen wird und nicht erst alle Collections durchlaufen muß.

            Kritischer ist noch, daß bei der Variante Request bei gleichen Namen/Werten in zwei oder mehr Collections immer der zu erst gefundene ausgewertet wird.

            Ist natürlich schlecht, wenn ich zwei Namen "online" habe, einer für QueryString und der andere für die Cookie Collection.

            Daher ist es IMO besser die Collection des Objekts mit anzugeben, welche "Requested" werden soll.

            Trotzdem - sorry - vollkommen falsch von mir ausgedrückt.

            Viele Grüße aus Köln
            Markus

            1. Hallo!
              Sorry das ich mich hier als unwissender einmisch, hab nur kurz die Frage, was das jetzt mit dem AutoWert zu tun hat. Heißt das dann, wenn man etwas in z.B. 4 Spalten schreiben will, wovon in einer der Autowert steht, ignoriert man das einfach und "tut so" als hätte man nur 3 Spalten?
              Gruß
              Alexander

              1. Hallo Alexander,

                wovon in einer der Autowert steht, ignoriert man das einfach und "tut so" als hätte man nur 3 Spalten?

                Ja, das ist ja der Sinn und Zweck eines Autowerts. Wärend des Einfügens wird der Autowert des neu eingefügten Datensatzes selbstständig um genau einen Zähler gegenüber des vorher eingefügten Datensatz erhöht.

                Achtung:
                Selbst wenn ein Datensatz gelöscht wird, ist dessen Autowert immer noch vorhanden. Dies hat zur Folge, daß nachdem ein Datensatz gelöscht wurde, der darauffolgende neu eingefügte Datensatz eben den um einen Wert erhöhten Autowert erhält.

                Erst durch das Komprimieren/Reparieren der Datenbank werden alle Autowerte der gelöschten Datensätze wirklich "zerstört" und sind somit wieder verfügbar.

                Viele Grüße aus Köln
                Markus