Hallo,
ich brauche Hilfe bei einer Aktualisierungsabfrage. Mit denen habe ich leider Null Erfahrung.
Ich habe eine Tabelle mit (u.a.) den Feldern Barcode(LongInt), Ort(LongInt) und InvDatum(Date). Die meisten Barcodes haben sowohl in 2011 wie auch 2013 einen Datensatz, wobei in dem Satz von 2011 ein Ort eingetragen ist, aber in dem DS von 2013 keiner. Nun möchte ich, dass der Ort aus den 2011er Datensätzen in den jeweiligen (gleicher Barcode) DS von 2013 übernommen wird.
Es gibt auch einige Barcodes, die nur in 2011 oder nur in 2013 einen DS haben. Bei denen soll natürlich nichts aktualisiert werden.
Liege ich da mit einer Aktualisierungsabfrage richtig, oder geht das ganz anders?
Vielen Dank im Voraus
Beate1953
Hallo,
ja, ist richtig. Beide Tabellen mit einer Verknüpfung über den Barcode.
Barcode und Ort als LongInt scheint mir falsch. Der Barcode könnte nur 10 Stellen haben und ein Ort als Zahl?
Hallo,
es handelt sich um nur eine Tabelle, die folgendermaßen aussieht:
Barcode Ort Datum
1 5 01.01.2011
1 01.01.2013
2 7 01.01.2011
2 01.01.2013
3 6 01.01.2011
4 01.01.2013
5 8 01.01.2011
5 01.01.2013
u.s.w.
Ich brauche die Aktualisierung also innerhalb einer Tabelle
Das LongInt für Ort kommt daher, dass ich eine extra Tabelle mit den möglichen Standorten habe, die verknüpft ist.
Warum ist LongInteger für Barcode falsch? Gibt es einen Datentyp, der mir noch mehr Stellen für eine Ganzzahl zur Verfügung stellt?
Viele Grüße
Beate1953
Hallo,
ZitatGibt es einen Datentyp, der mir noch mehr Stellen für eine Ganzzahl zur Verfügung stellt?
nein. üblicherweise verwendet man für den Barcode den Datentyp Text.
Aber bei Dir scheint das ja wie beim Ort nur eine Schlüsselzahl zu sein.
Hallo,
z. B. mit Dlookup in einem Abfrage-SQL-String(eine Unterabfrage ist auch möglich)
Update tblTabelle as A set Ort = Dlookup("Ort","tblTabelle","Barcode= " & A.Barcode & " and year(Datum) = 2011") Where year(A.Datum) = 2013
Update tblTabelle as A set Ort = (Select top 1 Ort from tblTabelle as B Where B.Barcode= A.Barcode and year(Datum) = 2011) Where year(A.Datum) = 2013
Hallo,
der Code mit dem DLookUp funktioniert prima. Vielen herzlichen Dank!
Bei dem Code mit dem SubSelect kommt die Meldung: Operation muss eine aktualisierbare Abfrage verwenden. Wieso ist der Code nicht aktualisierbar und was bedeutet das?
Viele Grüße
Beate1953
Hallo,
sorry für die Luft-SQL, besser ist dies:
UPDATE tblTabelle as A
inner join tblTabelle as B on B.Barcode=A.Barcode
Set A.Ort =B.Ort
WHERE Year(B.Datum)=2011
'falls erforderlich: and Year(A.Datum)=2013
Hallo,
auf diese Lösung wäre ich nie gekommen. Vielen, vielen Dank
Viele Grüße
Beate1953