UPDATE einer Tabelle auf letzten Eintrag begrenzen

Hallo Forum,

ich habe zwei Tabellen nun wollte ich immer wenn ich einen neuen Datensatz hinzufüge diesen danach updaten.
Ich habe eine Access Datenbank und ein kleines VB Programm das auf die Datenbank zugreift.
Ich kann Daten hinzufügen und auch Abfragen die in Access hinterlegt sind starten.
Ich habe nun diese zwei Tabellen in einer Tabelle gibt es zwei Nummernaus zwei Tabellen(AutoNummer) welche die den gleichen Datensatz zeigen.
Die eine ist zur speicherung in der Datenbank die zweite nur eine Hilfstabelle.
Mal zu Erklärung ich habe ein Zugangssystem das 20 Zahlencodes speichern kann, wenn ich nun diese auslese und in die Daten bank speichere werden neue Autonummern vergeben also ist zB. der 10 Zahlencode in der Hardware der 123 in der Datenbank.
Wenn ich nun ein Log-File auf die Datenbank speichere ist natürlich dann der Zahlencode(10) hinterlegt und ich will diesen updaten das dieser den Zahlencode(123) der Datenbank erhält.
Momentan lese ich den Zahlencodes ein und vergleiche diese mit den schon in der Datenbank gespeicherten Codes ist einer neu wird dieser addiert. Somit habe ich eine Tabelle die sowohl den Hardwarecode als auch den Datenbankcode enthält.
Nun wollte ich immer wenn ich einen neuen Log Event addiere diesen Code updaten jedoch muss ich dann diesen Vorgang auf den letzten Eintrag begrenzen und ich kriege das nicht hin da Access ja LIMIT nicht kennt und auch GROUP BY meckert Access mit UPDATE an.
Ich habe bis jetzt folgendes

UPDATE Tabelle1,Tabelle2 SET Tabelle1.CodeID = Tabelle2.CodeDatabaseID
WHERE Tabelle1.CodeID = Tabelle2.CodeHardwareID;

Das macht ein Update der gesamten Tabelle das würde soweit funktionieren wenn es keine gleichen ID der Hardware und Datenbank gibt.
Hat hier jemand eine Idee zur Begrenzung auf einen Datensatz.
Also in Access SQL Syntax.

Gruß

Thomas

Moin, Thomas,

aus der Beschreibung werde ich nicht schlau. Versuch doch mal das Datenmodell hier zu zeigen, ganz simple Form:

**Tabelle1** (<u>T1_Id</u>, Feld1, ... )
**Tabelle2** (<u>T2_Id</u>, FS\_T1\_Id, Feld1, ... )

UPDATE Tabelle1,Tabelle2 SET Tabelle1.CodeID =
Tabelle2.CodeDatabaseID
WHERE Tabelle1.CodeID = Tabelle2.CodeHardwareID;

  1. Mir ist völlig neu, dass in der Update-Klausel 2 Tabellen angegeben werden können. Meckert da niemand?
  2. Der Update kennt keinen „letzten“ Satz, die Where-Klausel muss einen Satz eindeutig identifizieren. Wenn das nicht gelingt, ist das Datenmodell falsch.

Gruß Ralf

Ich bin zwar nicht der Profi doch in der UPDATE kann ich zwei Tabellen angeben ohne mekern glaube ich habe das auch in einem Buch gelesen (SQL kompakt).

Also meine Tabellen dehen wie folgt aus

Tabelle1 (T1_ID,T1_ZugangNrHW, T1_ZugangsNrDatabase,T1_Zahl_01, T1_Zahl_02, … ,T1_Zahl_10)
Tabelle2 (T2_ID, T2_ZugangsNrDatabase, T2_Zahl_01, T2_Zahl_02, … , T2_Zahl_10)

Nach dem einlesen der in den HW gespeicherten Codes sind in der Tabelle1 Alle Felder beschrieben ausser T1_ZugangsNrDatabase dieses wird mit einem UPDATE erzeugt mittels Tabelle2.
Lese ich nun meine Log Daten ein werden diese in die Tabelle3 gespeichert.
Tabelle3 (T3_ID,Feld1, Feld2, Feld3, T3_Zugangsnummer, Datum, Uhrzeit)

Wenn ich nun einen Datensatz zu Tabelle3 addiere steht und der Spalte T3_Zugangsnummer die Zugangsnummer der HW als die in Tabelle1 (T1_ZugangNrHW) und diese möchte ich durch die in der Tabelle2 hinterlehten Nummer(T2_ZugangsNrDatabase) ersetzen.
In Tabelle1 ist ja solange die Übertragung dauert sowohl die in der Hardware verwendete Nummer T1_ZugangNrHW als auch die in der Datenbank verwendete Nummer T1_ZugangsNrDatabase verfügbar.
Daher würde ich nach jedem addierten Datensatz in Tabelle3 ein Update ausführen aber nur für diesen einen Datensatz.

UPDATE Tabelle3,Tabelle1 SET Tabelle3.T3_Zugangsnummer = Tabelle1.T1_ZugangsNrDatabase
WHERE Tabelle3.T3_Zugangsnummer = Tabelle1.T1_ZugangNrHW
und Jetzt nur letzter Eintrag!!!

Wenn nicht anderst geht werde ich in Tabelle3 ein Feld JA7NEIN Feld hinzufügen aus welchem ich erkennen kann ob bereits ein Update durchgeführt wurde.

Thomas

Hi Thomas,

und Jetzt nur letzter Eintrag!!!

vergiss es, es gibt kein Kriterium, an dem SQL einen „letzten“ erkennen könnte.

Gruß Ralf

Hallo,

Also meine Tabellen dehen wie folgt aus

Tabelle1 (T1_ID,T1_ZugangNrHW,
T1_ZugangsNrDatabase,T1_Zahl_01, T1_Zahl_02, … ,T1_Zahl_10)
Tabelle2 (T2_ID, T2_ZugangsNrDatabase, T2_Zahl_01, T2_Zahl_02,
… , T2_Zahl_10)

Nach dem einlesen der in den HW gespeicherten Codes sind in
der Tabelle1 Alle Felder beschrieben ausser
T1_ZugangsNrDatabase dieses wird mit einem UPDATE erzeugt
mittels Tabelle2.
Lese ich nun meine Log Daten ein werden diese in die Tabelle3
gespeichert.
Tabelle3 (T3_ID,Feld1, Feld2, Feld3, T3_Zugangsnummer, Datum,
Uhrzeit)

Wenn ich nun einen Datensatz zu Tabelle3 addiere steht und der
Spalte T3_Zugangsnummer die Zugangsnummer der HW als die in
Tabelle1 (T1_ZugangNrHW) und diese möchte ich durch die in der
Tabelle2 hinterlehten Nummer(T2_ZugangsNrDatabase) ersetzen.
In Tabelle1 ist ja solange die Übertragung dauert sowohl die
in der Hardware verwendete Nummer T1_ZugangNrHW als auch die
in der Datenbank verwendete Nummer T1_ZugangsNrDatabase
verfügbar.
Daher würde ich nach jedem addierten Datensatz in Tabelle3 ein
Update ausführen aber nur für diesen einen Datensatz.

UPDATE Tabelle3,Tabelle1 SET Tabelle3.T3_Zugangsnummer =
Tabelle1.T1_ZugangsNrDatabase
WHERE Tabelle3.T3_Zugangsnummer = Tabelle1.T1_ZugangNrHW
und Jetzt nur letzter Eintrag!!!

Wenn nicht anderst geht werde ich in Tabelle3 ein Feld JA7NEIN
Feld hinzufügen aus welchem ich erkennen kann ob bereits ein
Update durchgeführt wurde.

Also, ich versteh auch nur Bahnhof…

Eines ist aber klar: Wenn Du Deine Tabellen nicht normalisierst (
http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
), dann kommst Du auf keine grünen Zweig und ärgerst Dich dauernd mit nicht funktionierenden Methodiken herum., soll heißen, die Db wird nie gescheit ablaufen.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!