Was ist an dieser INSERT INTO-Anweisung falsch?

  • VB.NET

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von Edwardschn.

    alles alles bleibt spekulativ, solange nicht der tatsächliche CommandText bekannt ist.

    5 Regeln für sinnvolle Fragen - Regel#6

    nein, das mit den DBParametern ist natürlich keine Spekulation, nur macht das ja keinerlei Aussagen darüber, was zum Kuckuck mit dem tatsächlich abgeschickten Commandtext nicht stimmt.
    Nochmal für alle: Um herauszufinden, was damit nicht stimmt, muss der CommandText uns kundgetan werden.

    VB.NET-Quellcode

    1. cmd2.CommandText = "insert into ProfileData (language, startparam, sizeh, sizeb, autostart, laoddb, autoupdates, dbpath, dbbackup, dbbackuppath, dbbackupsize, sview, sgroup, stime, stimevalue, clip, compweek, workhours, workhoursa, workhoursb, autoorder) VALUES ('" _
    2. & ComboBoxEdit2.SelectedItem & "','" & ComboBoxEdit1.SelectedItem & "','" & TextEdit2.Text & "','" & TextEdit4.Text & "','" & CheckEdit1.CheckState _
    3. & "', '" & CheckEdit2.CheckState & "', '" & CheckEdit3.CheckState & "', '" & TextEdit1.Text & "', '" & CheckEdit4.CheckState & "', '" & TextEdit3.Text _
    4. & "', '" & NumericUpDown2.Value & "', '" & ComboBoxEdit3.SelectedItem & "', '" & ComboBoxEdit4.SelectedItem & "', '" & ComboBoxEdit6.SelectedItem _
    5. & "', '" & NumericUpDown1.Value & "', '" & ComboBoxEdit5.SelectedItem & "', '" & CheckEdit5.CheckState & "', '" & CheckEdit6.CheckState & "', '" _
    6. & TimeEdit1.Time & "', '" & TimeEdit2.Time & "', '" & CheckEdit7.CheckState & "')"
    kann meinetwegen noch hundertmal gepostet werden, davon weiß man immer noch nicht, was im CommandText steht, denn wir sehen ja nicht, was zb in ComboBoxEdit2.SelectedItem drinnesteht etc..
    @Dodo: Ah wusst ich auch noch nicht.
    Jedoch finde ich es übersichtlicher, und programmtechnisch leichter lösbar, wenn man dies in einer Zeile unterbringt.
    Wüsste auch nicht ob man dies zu 100% mit DB-Parameter lösen könnte.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    also den Syntax-Fehler sehe ich bei diesem Mammut nicht auf Anhieb, wohl aber endlos Type-Mismatches, also Fehler, die erst noch auftreten werden, wenn der SyntaxFehler behoben ist.
    Weil du übergibst ausnahmslos String-Werte, ob da nun Zahlen, bools oder Datumse erwartet werden.

    Ich kann dir nur raten, fang die ganze geschichte nochmal neu an, nach den Konzepten von "Datenbank in 10 Minuten" auf Movie-Tuts.
    Weil dieses Mammut-Problem ist ja noch nur das Insert-Command, es sind ja noch Update und Delete-Commands zu coden, und nicht nur für diese Tabelle, so gott will.

    Auch erkennbar die Abwesenheit von Datenmodellierung, etwa "Language" sollte besser auf eine annere Tabelle verweisen, als dass da Freitext oder was das ist, eingegeben wird.
    Und auch erkennbar, dass das GestaltungsPrinzip Databinding unbekannt ist - das wirkt sich bei sonem umfangreichen Teil natürlich verheerend aus.

    :D ah - jetzt habich auch den Syntax-Fehler:
    Du verwendest die Syntax eines Insert-Commands (also das mit Values (bla,bla) ) in einem Update-Commands.
    Update-Command hat aber annere Syntax (weil Sql blöd ist).
    :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Alles klar! Danke! :)

    Habe allerdings 3 Fragen noch...

    1. Was genau bedeutet Datenmodellierung? "Language" ist teil einer ComboBox zum auswählen und kein freier Text. Ist also vordefiniert.
    2. TypeMismatches? Eigentlich habe ich dies berücksichtigt, wie man es an dem Bild erkennen kann."1" und "0" sind ja in dem Fall z.B. False oder True, also Boolean, stimmt mit der Tabelle also ein. So auch bei den anderen Werten...*hoffentlich* :whistling:
    3. Was genau meinst du mit "GestaltungsPrinzip Databinding" Was ist daran so negativ?


    Danke für die Hilfe!



    EDIT: Vielen Dank an alle, die versucht haben mir zu helfen! Im Endeffekt habe ich das Teil doch noch nach meiner Methode zum laufen gebracht. Falls es jemanden interessiert:
    Alles was man machen musste ist, alle reservierten Namen (sprich: alle Spaltenbezeichnungen z.B. "language"), in einer eckigen Klammer zu schreiben. Außerdem darf man nicht vergessen den Tabellennamen selber auch in eckigen Klammern zu schreiben. Der Code für die Update/Insert Command sieht demzufolge so aus:

    VB.NET-Quellcode

    1. cmd2.CommandText = _
    2. "update [ProfileData] set " & _
    3. "[language] = '" & ComboBoxEdit2.SelectedItem.ToString & "', " & _
    4. "[startparam] = '" & ComboBoxEdit1.SelectedItem.ToString & "', " & _
    5. "[sizeh] = '" & TextEdit2.Text & "', " & _
    6. "[sizeb] = '" & TextEdit4.Text & "', " & _
    7. "[autostart] = '" & CheckEdit1.CheckState & "', " & _
    8. "[laoddb] = '" & CheckEdit2.CheckState & "', " & _
    9. "[autoupdates] = '" & CheckEdit3.CheckState & "', " & _
    10. "[dbpath] = '" & TextEdit1.Text & "', " & _
    11. "[dbbackup] = '" & CheckEdit4.CheckState & "'"


    Vielen Dank an die Tipps. Diese werde ich mir auf jeden Fall aneignen. Danke.

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Monk32“ ()

    Zu Type-Mismatches: Also '1' ist ein String, und kein Boolean. Access ist offenbar irrsinnig gnädig, den String als Zahl auszulesen, und die Zahl als Boolean zu interpretieren. Ein Bool wäre True oder False
    Das ist dein Glück oder dein Pech, denn so kann man natürlich nicht lernen, Datentypen voneinander zu unterscheiden und für sich arbeiten zu lassen.


    Zu die annere Fragen:
    guck dir doch einfach die Sample-Solution von "Datenbank in 10 Minuten" auf Movie-Tuts an.
    Dir wird auffallen, dasse bereits wesentlich mehr kann, als vmtl. dein Projekt, und dabei braucht sie < 50 Zeilen Code.
    Und der Code ist auch noch leicht verständlich, typsicher und zuverlässig, was man bei deine Sql-Monstren glaub nicht so sagen kann.

    Im Main.doc lasse ich mich ja auch über Datenmodellierung aus, also "Datenbank in 10 Minuten" auf Movie-Tuts sollte alle deine Fragen beantworten.

    Da dir aber Datenmodellierung und Databinding unbekannt sind, täte ich noch einen Schritt zurückgehen, auf Datenbänkerei-Einstieg

    Nicht alles auf einmal bewältigen wollen, sondern in einer aufeinander aufbauenden Reihenfolge.
    @monk,

    jedes Field in deinem INSERT String, sieht etwa so aus: '" & ComboBoxEdit1.SelectedItem & "'
    Ist es denn so, dass jedes Field in deiner Tabelle auf einen String wartet?
    Wenn nicht, die Werte aber als String in den Comboboxen sind(aus was für Gründen auch immer), musst du diese mit Variabln abgreifen, wandlen, und die Variabln in den String aufnehmen.
    Eventuell reicht auch " & CInt(ComboBoxEdit1.SelectedItem) & "

    Cint sthet da als platzhalter für alle anderen

    Mit Paramtern geht das auch, seh aber kein Muss, für dich, für das was du machen willst.