Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Tabellen zusammenfügen bei doppelten IDs

Begonnen von Beate1953, September 03, 2012, 19:00:41

⏪ vorheriges - nächstes ⏩

Beate1953

Hallo,

ich habe eine Datenbank mit mehreren Tabellen die miteinander in Beziehung stehen und Autowertfelder als Primärschlüssel haben. Nun würde ich die Datenbank gerne vervielfältigen (3-5x), in den verschiedenen Datenbanken paralell Daten erfassen und die jeweiligen Tabellen am Schluß zusammenfügen.

Da die Autowertfelder immer ab 1 hochzählen hätte ich in den verschiedenen Datenbanken aber gleiche IDs, so daß das nicht klappt. Ich habe vor vielen Jahren mal unter Access2000 mit Replikation gearbeitet, weiß aber leider fast nichts mehr darüber. Wäre das eine Lösung für mein Problem?

Oder sollte ich statt Autowert lieber den Datentyp Replikations-ID verwenden und darauf hoffen, daß keiner der Werte doppelt vorkommt?

Vielen Dank im Voraus für Eure Hilfe
Beate1953Beate1953



Beiträge: 12
Registriert: So 11. Mär 2012, 15:41
Private Nachricht

MzKlMu

Hallo,
Du kannst eien Autowert auch auf einen Anfangswert setzen.
Z.B.:
Tab1 auf100000
Tab2 auf 200000
Tab3 auf 300000

Die Nummernkreise so wählen, dass es in der Zukunft keine Überschneidungen gibt. Mit dem Beispiel könntest Du in jeder Tabelle 99999 DS erfassen.

Autowert setzen z.B. so:
Public Function fncAutowertFestlegen()
Dim Rs As DAO.Recordset
Set Rs = CurrentDb.OpenRecordset("Tabelle1")
   Rs.AddNew
   Rs!AW1 = 99999 'setzt den AW auf 99999, nächster DS erhält dann den AW 100000
   Rs.Update
Rs.Close
End Function

Es gibt auch einen SQL Befehl dazu, daber den weis ich nicht genau.
Gruß Klaus

ebs17

Es gibt noch einen weiteren Aspekt, der zu beachten wäre: Geben diese Einzelnutzer ausschließlich Werte ein, die andere Einzelnutzer nie verwenden?

Beispiel: Gibt man Kontaktdaten ein, wird es mit hoher Wahrscheinlichkeit Personen mit gleicher PLZ geben. Eine gleiche PLZ mit dann unterschiedlichen ID's, egal ob Nummernkreis oder Replikation, dann sauber zusammenzuführen wird problematisch angesichts der Tatsache, dass dann noch einige abhängige Fremd-ID's dabei sein können.

Denkbarer Ansatz: Wenn es nicht gar zu viele Tabellen sind, könnte man für die Zusammenführung der Daten über einen JOIN über alle Tabellen eine "Exceltabelle" erzeugen und diese dann analog dem Verfahren in der verlinkten Demo an die Ziel-DB anfügen: Importtabelle in m:n-Beziehung auflösen

Bei wiederholter Zusammenführung könnte man in den Tabellen zusätzlich ein Timestamp-Feld mitführen, um dann nur jeweils neue Datensätze seit letztem gemerkten Abgleich erkennen zu können und verarbeiten zu müssen.

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard

compinaut

Hallo,
ist es nicht möglich, die Datenbank in FE und BE aufzuteilen? Dann können alle Personen am gleichen Datenbestand arbeiten und eine spätere Zusammenfügung ist nicht notwendig.
Gruß
compinaut

MzKlMu

Hallo,
das geht ja nur wenn man an einem Server hängt. Wenn aber z.B. 4 Außendienstmitarbeiter je ein Laptop mitnehmen und an den Daten arbeiten geht das ja nicht.

Gruß Klaus

Stapi

Hallo Beate

Bis zu der Access Version 2003 ist das eröffnen einer Replikat Gruppe möglich. Im Vorfeld kannst du eine zusätzliche Replikat ID als Autowert hinzufügen. die wird aber nur für die spätere synchronisieren deiner einzelnen Replikate verwendet. Solltest du einen Autowert als "Integer" verwenden, so ist zu empfehlen diesen als "Zufall" um zu stellen. Machst du es nicht so kann oder wird es sein das bei erstellen der Replikat Gruppe Access dieses Automatisch ausführt. So wird es dann einen Desingmaster und weitere Replikat geben, in dem Desingmaster können Änderungen aller Art vorgenommen werden die dann mit einem Replikat synchronisiert werden. Bei der Datenerfassung sind dann alle Außendienst Mitarbeiter autark, erfasste Daten stehen den andren nach dem erfolgten synchronisieren auch zur Verfügung.
Grüße aus dem schönen NRW
Stefan

Beate1953

Hallo an alle, die geantwortet haben,
ich danke Euch vielmals für Eure hilfreichen Tipps. Ich denke, daß ich es jetzt hinbekomme.

Übrigens: Wo kann ich mich über die Replikation neu informieren? Im Buch Access2010 steht darüber nichts. Oder gibt es das in Access2010 nicht mehr?

Jonny

Hallo Beate,
ab 2007 ist die Replikation praktisch abgeschaft.
Ich habe deshalb noch meine Backends auf 2003 mit Replikation.
Frontend ist auf 2007.
Klappt so ganz gut.

Infos findest du nur noch bis Version 2003 oder Google halt.

Gruß

Johann

Beate1953

Hallo MzKlMu,

ich habe Deine Public Function in ein neues Modul eingefügt (weil es ja Public ist). Aber wie rufe ich sie dann auf, wenn ich das Formular zum eingeben der Werte öffne. Bei den Ereignissen öffnen sich ja immer "Private Sub ...". Soll ich die Function da hineinschreiben? Aber mit welchem Code rufe ich sie auf?

Gruß
Beate1953

MzKlMu

Hallo,
die Funktion hat sonst keine Aufgabe als einmalig den Anfangswert des Autowertes auf einen bestimmten Wert zu setzen.
Die Funktion wird einfach mit F8 (Cursor in die 1.Zeile stellen) gestartet und mit F8 fortgeführt. Tabellennamen, Feldnamen und letzter Wert (99...) sind anzupassen. Das wird einmalig für jede Tabelle gemacht. Die Funktion kannst Du anschließend löschen, wird dann nicht mehr benötigt.

PS:
das persönlche Ansprechen eines Users würde ich unterlassen, es gibt bestimmt auch andere die Dir helfen können bzw. wollen. Und der extra Beitrag war auch überflüssig.
Gruß Klaus

Beate1953

Hallo,

Sorry für die persönliche Ansprache; das habe ich nicht gewußt/bedacht.

Wenn ich Deinen Code mit F8 starte dann wird die Überschriftenzeile gelb hinterlegt und links von dem Text erscheint ein kleiner gelber Pfeil. Ich muß irgend etwas falsch gemacht haben. Für das AW1 in Deinem Code habe ich den Namen des Feldes genommen, in dem der Autowert steht.
Also:  Rs!ID = 99999
Stimmt das so?

Gruß
Beate1953

Beaker s.a.

Hallo Beate,
Zitatund mit F8 fortgeführt
Hast Du das auch gemacht?
Jedesmal wenn Du F8 drückst wird die gelb hinterlegte
Zeile ausgeführt, und die Markierung spring zur nächsten,
dem Code (oder der Fehlerbehandlung) entsprechenden
Zeile.
Dabei kannst Du den Cursor über Variablen oder Objekte
stellen, und bekommst den momentanen Wert angezeigt.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Beate1953

Hallo,

Vielen Dank an alle. Jetzt hat es geklappt!
Ich hielt die gelbe Färbung der 1.Zeile für eine Fehlermeldung (bisher war es das immer).

Das mit dem F8 war mir neu.

Nochmals vielen, vielen Dank
Gruß
Beate1953