Benutzer mit den meisten Antworten
SQL Abfrage funktioniert nicht.

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)
- Verschoben Robert BreitenhoferModerator Mittwoch, 14. April 2010 08:56 SQL Abfrage (Von:Visual Basic)
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- Als Antwort vorgeschlagen Robert BreitenhoferModerator Mittwoch, 14. April 2010 07:33
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Mittwoch, 14. April 2010 07:33
- Als Antwort markiert sphinxx Mittwoch, 14. April 2010 08:14
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- Als Antwort vorgeschlagen Robert BreitenhoferModerator Mittwoch, 14. April 2010 07:33
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Mittwoch, 14. April 2010 07:33
- Als Antwort markiert sphinxx Mittwoch, 14. April 2010 08:14