none
SQL Abfrage funktioniert nicht. RRS feed

  • Frage

  • Hallo liebe VB Gurus,

    ich habe heute ein Problem mit einer Insert Query, vielleicht kann mir jemand helfen:
    die Query soll Datensätze einfügen, aber keine Duplikate.
    Der 1. Wert ist die SNr aus der Eingabemaske (Tabelle Schulungen), der 2. Wert ist die BNr aus einer datengebundenen Listbox (Tabelle Bereiche). Die BNr, SNr und die SRNr(verknüpft mit der SNr in Tabelle Schulungen) soll in die Tabelle B_Schulungen übernommen werden, aber nur wenn die BNr und SNr noch nicht existieren.

    Solange ich die WHERE NOT EXISTS Bedingung weglasse, funktioniert meine Query. Füge ich die Bedingung hinzu, läuft die Query auf einen Fehler, die Anzahl der Parameter stimmt nicht. Übergebe ich zwei Parameter mehr für die EXISTS Bedingung, hauts auch nicht hin.

    Vielen Dank vorab und herzliche Gruesse

    Christina

    INSERT INTO B_Schulungen (BNr, SNr, SRNr)
    SELECT     ? AS Expr1, SNr, SRNr
    FROM         Schulungen
    WHERE     (SNr = ?) AND (NOT EXISTS
                              (SELECT     Id, BNr, SNr, SRNr, Angelegt
                                FROM          B_Schulungen b
                                WHERE      (BNr = ?) AND (SNr = ?)))
    
    
    'zum Auslesen des Wertes muss bei datengebundener Listbox die DataRow verwendet werden
    Dim BRow As dsMSchulungen.BereicheRow = CType(CType(.Items(i), DataRowView).Row, dsMSchulungen.BereicheRow)
    Dim xBNr As Integer
    xBNr = BRow.BNr
    Dim B_SchulungenTableAdapter As New dsMSchulungenTableAdapters.B_SchulungenTableAdapter
    Dim xSNr As Integer
    xSNr = Val(Me.SNrTextBox.Text)
    'Aufruf der Query mit Parametern                             B_SchulungenTableAdapter.BereicheZuweisenInsertQuery(xBNr, xSNr)
    
    Dienstag, 13. April 2010 16:13

Antworten

  • Hallo Christina,

    wenn ich das richtig interpretiere, müsste die Abfrage lauten:

    INSERT INTO B_Schulungen (BNr, SNr, SRNr)
    SELECT ? AS BNr, SNr, SRNr
    FROM Schulungen AS s
    WHERE SNr = ?
       AND NOT EXISTS (SELECT *
    	FROM B_Schulungen b
            WHERE b.BNr = ? AND s.SNr = b.SNr)
    
    -- benötigt als Parameter
    1. BNr = BNr für SELECT Konstante
    2. SNr = WHERE SNR = ? 
    3. BNr = WHERE BNr = ? (EXISTS)

    Darauf achten mußt Du, dass die richtigen Werte den Parametern zugewiesen werden,
    wie ich sie unten als Kommentar angehängt habe.

    Wenn Du OleDb/ODBC mit positionellen Parametern benutz mußt Du für jeden Platzhalter
    einen Parameter haben - auch wenn es mehrmals der gleiche Wert ist wie hier bei "BNr".

    Gruß Elmar

    Dienstag, 13. April 2010 18:15
    Beantworter

Alle Antworten

  • Hallo Christina,

    wenn ich das richtig interpretiere, müsste die Abfrage lauten:

    INSERT INTO B_Schulungen (BNr, SNr, SRNr)
    SELECT ? AS BNr, SNr, SRNr
    FROM Schulungen AS s
    WHERE SNr = ?
       AND NOT EXISTS (SELECT *
    	FROM B_Schulungen b
            WHERE b.BNr = ? AND s.SNr = b.SNr)
    
    -- benötigt als Parameter
    1. BNr = BNr für SELECT Konstante
    2. SNr = WHERE SNR = ? 
    3. BNr = WHERE BNr = ? (EXISTS)

    Darauf achten mußt Du, dass die richtigen Werte den Parametern zugewiesen werden,
    wie ich sie unten als Kommentar angehängt habe.

    Wenn Du OleDb/ODBC mit positionellen Parametern benutz mußt Du für jeden Platzhalter
    einen Parameter haben - auch wenn es mehrmals der gleiche Wert ist wie hier bei "BNr".

    Gruß Elmar

    Dienstag, 13. April 2010 18:15
    Beantworter
  • Hallo Elmar,

    so funktioniert's! Und zum Dank schicke ich hiermit noch ein Stueck "virtuellen" Nusskuchen ;-)

    Viele Gruesse Christina

     

    Mittwoch, 14. April 2010 08:14