Hallo,
ich habe zwei Tabellen namens Posten und Posten1 mit exakt der gleichen Struktur. Allerdings haben beide Tabellen zusätzlich zu einem Stamm von DS, der in beiden Tabellen gleich ist, noch weitere DS, die in beiden Tabellen unterschiedlich sind. Zur Verdeutlichung:
Tab Posten Tab Posten1
PoID Barcode Bezeichnung PoID Barcode Bezeichnung
1 17 Lampe 1 17 Lampe
2 35 Stuhl 2 35 Stuhl
3 47 Bügeleisen 3 47 Bügeleisen
4 50 Tisch 4 1046 Schrank
5 89 Ventilator 5 1133 Computer
Bis zur PoID 3 ist alles gleich, danach verschieden. Ich möchte erreichen, dass er mir die DS mit PoID 4-5 aus Posten1 an die DS der Tabelle Posten anfügt.
Ich habe folgende Anfügeabfrage:
Private Sub PostenAnfuegen_Click()
MsgBox(LPID)
SQLstr = "INSERT INTO Posten ( Barcode, [Bezeichnung (Typ, genaue Bezeichnung)], Leasing, Diverses, Standort ) "
SQLstr = SQLstr & "SELECT Posten1.Barcode, Posten1.[Bezeichnung (Typ, genaue Bezeichnung)], "
SQLstr = "Posten1.Leasing, Posten1.Diverses, Posten1.Standort "
SQLstr = SQLstr & "FROM Posten INNER JOIN Posten1 ON Posten.Barcode = Posten1.Barcode "
SQLstr = SQLstr & "WHERE (Posten1.PoID > " & LPID & ")"
MsgBox("SQLstr= " & SQLstr)
End Sub
LPID ist eine öffentliche Variable vom Typ Long und hätte in obigem Beispiel den Wert 3. Wenn ich den Button anklicke macht der Code genau gar nichts und LPID ist im SQLstr leer, obwohl es vor der Erstellung des SQLstr in der MsgBox noch den richtigen Wert hatte.
Fragen: Wieso nimmt er LPID nicht im SQLstr und ist eventuell der INNER JOIN falsch?
Vielen Dank im Voraus
Beate1953
Hallo,
ich habe inzwischen festgestellt, dass
CurrentDB.Execute SQLstr
gefehlt hat. Aber das nützt auch nichts, es ergibt genau dasselbe wie vorher.
Viele Grüße
Beate1953
Hallo Beate1953!
Beim InnerJoin werden nur Werte genommen die in beiden Tabellen vorhanden sind.
Entweder du möchtest alle Posten1 mit der ID > 3 anhängen dann
"INSERT INTO Posten ( PoID, Barcode, Bezeichnung )" & _
" SELECT Posten1.PoID, Posten1.Barcode, Posten1.Bezeichnung" & _
" FROM Posten1" & _
" WHERE (((Posten1.PoID)>" & LPID & "));"
oder du möchtest alle nicht in Posten vorhandenen hinzufügen dann
"INSERT INTO Posten ( PoID, Barcode, Bezeichnung )" & _
" SELECT Posten1.PoID, Posten1.Barcode, Posten1.Bezeichnung" & _
" FROM Posten1 LEFT JOIN Posten ON Posten1.Barcode = Posten.Barcode" & _
" WHERE (((Posten.Barcode) Is Null));"
im zweiten Fall musst du als Identifier den Barcode oder etwas anderes nehmen was die Datensätze unterscheidet
LPID sollte auch in deinem Code nicht leer sein
LG
Golfidur
Hallo Beate1953,
abgesehen davon, dass der Code wie bereits erklärt wurde so keinen Sinn macht,
hier machst du dir den SQL-String kaputt:SQLstr = "Posten1.Leasing, Posten1.Diverses, Posten1.Standort "da du die Verkettung mit dem bisherigen vergessen hast.
Noch ein Tipp: führe den Code mit dem Parameter dbFailOnError aus, dann bekommst du eine Fehlermeldung:CurrentDB.Execute SQLstr, dbFailOnError