Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Datensätze duplizieren DAO





Frage

Hallo zusammen, ich hätte hier ein Problem welches ich seit Tagen nicht hinbekomme (kann AC wahnsinnig machen?!): wie kann ich einen Datensatz in mehrere verknüpfte Tabellen schreiben. Folgende Tabellenstruktur (alles 1:n Beziehungen) liegt vor: Tabelle1:[ID] [Datum(PS)] Tabelle2:[ID(PS)] [Datum] [AnlageNr] Tabelle3:[ID] [ID2 (PS)] [Produktion] [Position] Tabelle4:[ID2] [ID3 (PS)] [Störungen] Tabelle5 usw. Mithilfe einer Hilfstabelle wird der zu erstellende Datensatz zunächst zwischengespeichert. [code] DoCmd.RunCommand acCmdPasteAppend ´in Hilfstabelle speichern[/code] Nun würde ich gerne wie folgt vorgehen: [code]Set RS_old = CurrentDb.OpenRecordset("SELECT * FROM Hilfstabelle") Set RS_new = CurrentDb.OpenRecordset("Tabelle1") [/code] Jetzt hab ich aber folgendes Problem: Wenn in der Tabelle1 das [Datum] bereits vorhanden ist darf kein neuer DS angelegt werden (Primärschlüssel), vielmehr sollte der entsprechende DS bearbeitet werden indem nun aktuelle Recordset wieder geschlossen wird und das nächste Recordset, also Tabelle2 geöffnet wird und dort die entsprechenden Informationen geschrieben werden. Es wiederholt sich obiger Vorgang auf das Feld mit dem PS. Dies sollte bis zur letzten verknüpften Tabelle durchgeführt werden. Im anderen Fall, wenn also das [Datum] noch nicht vorhanden ist, soll es geschrieben werden. Warum ich den Weg über eine Hilfstabelle gehe hat folgende Bewandnis: die User sollen ihre eingegebenen Datensätze nachträglich nicht mehr ändern können. Vielleicht kann mir jemand aus dieser Bredullie befreien Besten Dank Chris (access newbee )

Antwort 1 von trekking

Hallo Chris,

du kannst das lösen indem du vorher in der Tabelle nachsschust ob dein Schlüssel schon vorhanden ist und zwar über ein weiteres Recordset. Du machst dann aus diesem recordset mit rs.noMatch=false eine If abfrage.

so in etwa:

set rs.dbopenrecordset("DeineOriginaltabell", dbopentable)

rs.index ="PrimaryKey"(oder der Indexname deines Feldes)
rs.seek"=", Datum (oder wie dein Feld sonst heißt als variable)

If rs.noMatch = false then
rs_old.edit
.
.
rs_old.update

if rs.noMatch=false then
rs_new.addNew
.
.
rs_new.update

Dann sollte es gehen.

Viele Grüße trekking

Antwort 2 von kilambu

Hallo Trekking,

danke für die Hilfe, sieht schon ganz gut aus, bekomme noch zwei Rügen vom Compiler (Syntax blabla). Werd das Kind schon hinkriegen.
Es ist doch immer wieder erstaunlich was es alles gibt in dieser (unerschöpflichen?) VBA Biblio.
Also, Trekking danke nochmal für die Hilfe, wenn es gar nicht hinhaut meld ich mich nochmal.

Grüße
Chris

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: