Abfrage finktioniert bei Direkteingabe aber nicht im code

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Abfrage finktioniert bei Direkteingabe aber nicht im code

    Ich benutze fogende Abfrage:

    SQL-Abfrage

    1. INSERT INTO ds_firma (ds_firma_nr,ds_firma_name) SELECT max(ds_stamm_id), 'Unternehmensname' FROM ds_stamm


    Bei der direkten EIngabe in phpMyAdmin funktioniert dieser. Allerdings im vb Code nicht:

    VB.NET-Quellcode

    1. Using MyAdapter As New MySqlDataAdapter("INSERT INTO ds_firma (ds_firma_nr,ds_firma_name) SELECT max(ds_stamm_id), 'Unternehmensname' FROM ds_stamm)", connection)
    2. Using myTable As New DataTable()
    3. MyAdapter.Fill(myTable)
    4. End Using
    5. End Using


    ...ich finde den Fehler nicht. ;(
    Ich bekomme die klassische Fehlermeldung bei Ausführung zur Laufzeit.

    INSERT INTO ds_firma (ds_firma_nr,ds_firma_name) SELECT max(ds_stamm_id), 'Unternehmensname' FROM ds_stamm

    Tabellen: ds_stamm, ds_firma
    Spalten: ds_stamm_id (Primärschlüsselfeld), ds_firma_nr, ds_firma_name

    In "ds_firma_nr" soll die max ds_stamm_id aus Tabelle ds_stamm beim INSERT übernommen werden.
    Wie gesagt; bei Direkteingabe läuft die Abfrage so wie es soll.
    Dieser aus einer vorherigen Anweisung funktioniert sehr gut:

    VB.NET-Quellcode

    1. 'Using MyAdapter As New MySqlDataAdapter("INSERT INTO ds_stamm (ds_stamm_status,ds_stamm_benutzer,ds_stamm_benutzerpasswort,ds_stamm_bezug,ds_stamm_geodaten1,ds_stamm_geodaten2) VALUES ('" & ds_stamm_status & "','" & ds_stamm_benutzer & "','" & ds_stamm_benutzerpasswort & "','" & ds_stamm_aktiv_deaktiv & "','" & ds_stamm_geodaten1 & "','" & ds_stamm_geodaten2 & "')", connection)
    2. ' Using myTable As New DataTable()
    3. ' MyAdapter.Fill(myTable)
    4. ' End Using
    5. 'End Using


    Es muß ein Fehler in der Syntax sein.
    Schreib doch mal in Worten, ohne SQL, was du da machst/machen willst. Weil dein INSERT ist
    A. Falsch, so vong Syntax her
    B. In meinen Augen nicht ganz sinnvoll
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    mrMo

    Lege einen neuen Datensatz an.
    Setze inTabelle ds_firma, in Spalte ds_firma_nr die höchste ID aus Spalte ds_stamm_id aus Tabelle ds_stamm und in ds_firma_name die Bezeichnung "Unternehmensname"

    Die Syntax funktioniert; nur nicht im code. Es muß irgendein Komma oder Semikolon fehlen oder am falschen Platz sein?
    So gehts:

    VB.NET-Quellcode

    1. Using MyAdapter As New MySqlDataAdapter("INSERT INTO ds_firma (ds_firma_nr,ds_firma_name, ds_firma_ort, ds_firma_strasse, ds_firma_hausnummer, ds_firma_plz) SELECT MAX(ds_stamm_id),'" & ds_firma_name & "', '" & ds_firma_ort & "', '" & ds_firma_strasse & "', '" & ds_firma_hausnummer & "','" & ds_firma_plz & "'FROM ds_stamm", connection)
    Hallo Thomas,
    wie zwei Vorredner bereits schrieben - der Adapter erwartet eine Selection-Abfrage (Asuwahl), und du übergibst eine Aktionsabfrage. Das macht keinen Sinn.
    Und wenn Du Dich mit deiner Aussage wiederholst, dass "Das" klappt - es kann nicht klappen.

    ' Assumes that connection is a valid SqlConnection object.
    Dim queryString As String = _
    "SELECT CustomerID, CompanyName FROM dbo.Customers"
    Dim adapter As SqlDataAdapter = New SqlDataAdapter( _
    queryString, connection)

    Dim customers As DataSet = New DataSet
    adapter.Fill(customers, "Customers")


    Fill erwartet Daten. INSERT INTO liefert aber keine - deshalb macht es keinen Sinn.
    Eigentlich will er ein ExecuteNoQuery absetzen, das den INSERT durchführt.
    Mangels besseren Wissens vergewaltigt er jetzt DataAdapter.Fill.
    Ihm kommt's wohl auch gar nicht auf den DataAdapter und dessen Inhalt an, sondern er will nur sein INSERT durchbringen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --