Und noch n Problem

Hallo,

Problem:
Eine Tabelle enthält viele Daten und auch eine ID auf die zweite Tabelle mit Orten.

In der Ort-Tabelle sollen alle vorkommenen Orte nur einmal abgelegt werden.

Bei mir werden die jetzt aber immer neu angelegt. So dass eben z.B. Karlsruhe 2 mal drin steht, mit 2 verschiedenen IDs.

Was tun?

Dario

Problem:
Eine Tabelle enthält viele Daten und auch eine ID auf die
zweite Tabelle mit Orten.

In der Ort-Tabelle sollen alle vorkommenen Orte nur einmal
abgelegt werden.

Bei mir werden die jetzt aber immer neu angelegt. So dass eben
z.B. Karlsruhe 2 mal drin steht, mit 2 verschiedenen IDs.

Da der Primary Key (PK) eine ID ist (AutoWert) werden datenbankseitig die Orte wohl nicht auf Eindeutigkeit geprüft. Entweder du verwendest einen fachlichen (ggfs. aus mehreren Feldern zusammengesetzten) PK (z.b. PLZ + Ort) oder du nimmst diese zwei (oder mehr) fachlich eindeutig identifizierenden Felder und legst eine Unique-Index auf diese Felder:

  • Tabellenentwurf
  • Menü Ansicht/Indizes
  • Wichtig: Unten bei Eindeutig „Ja“ auswählen

Steffen

Jetzt habe ich die ID für den Ort rausgenommen und wollte den Namen als Primärschlüssel nehmen, aber da ging das Formular nicht mehr. Auch nach der Rückgängigmachung bekomme ich das Formular nicht mehr zum laufen, es bleibt ein leeres Formular ohne Felder.

Was nun?

Hab jetzt ein Backup der Arbeit zur Hilfe genommen und die alten Abfragen importiert.

Das Problem bleibt aber,

das mit den Indizes geht nicht, da kommt dann bei der Eingabe eine Fehlermeldung. Das ich genau das ändern soll, damit die Eingabe möglich ist.

Beim Versuch den Primärschlüssel auf den Namen auszuweiten, gehen weder Formular (bleibt wieder leer) noch kann man bei der Beziehung „referentielle Integrität“ verwenden.

Dario

das mit den Indizes geht nicht, da kommt dann bei der Eingabe
eine Fehlermeldung. Das ich genau das ändern soll, damit die
Eingabe möglich ist.

Das Problem bei solchen Geschichten ist, wenn erst mal Daten drin sind, die den Bedingungen nicht entsprechen (RI oder Unique-Index) kann man diese schärferen Bedingungen auch nicht ohne weiteres nachträglich einbauen. D.h. es müssten erst RI-Verletzungen und Duplikate beseitigt werden. Je nach Datenumfang natürlich etwas mühselig.

Beim Versuch den Primärschlüssel auf den Namen auszuweiten,
gehen weder Formular (bleibt wieder leer) noch kann man bei
der Beziehung „referentielle Integrität“ verwenden.

Das ist zwangsläufig so:
Die Beziehung zwischen den Tabellen wird derzeit über die ID hergestellt (Primär-Fremdschlüssel-Beziehung). Man kann jetzt nicht einfach den PK erweitern (die entsprechenden Felder fehlen ja in der anderen Tabelle)

Eine Ferndiagnose ist natürlich schwierig, ich würde es aber folgendermaßen probieren:

-Lass die ID als PK in der Tabelle Ort
-Versuch die Duplikate in der Tabelle Ort rauszunehmen (ID’s belassen)
-Unique-Index auf PLZ+Ort+??
-Im Formular eine Auswahlmöglichkeit auf bereits erfasste Orte einbauen (Kombinationsfeld mit Datenquelle Tabelle Ort, angezeigt wird PLZ, Ort …, abgespeichert in deiner Haupttabelle die ID des Orts)

Steffen

-Lass die ID als PK in der Tabelle Ort
-Versuch die Duplikate in der Tabelle Ort rauszunehmen (ID’s
belassen)
-Unique-Index auf PLZ+Ort+??
-Im Formular eine Auswahlmöglichkeit auf bereits erfasste Orte
einbauen (Kombinationsfeld mit Datenquelle Tabelle Ort,
angezeigt wird PLZ, Ort …, abgespeichert in deiner
Haupttabelle die ID des Orts)

Steffen

Hallo Steffen,

also die DB baue ich erst auf, nur meine Testdaten enthalten. Die hatte ich eh vorm Umbau entfertn.
OrtID ist Primärschlüssel - ok
habe diesen Eindeutig-Index auf OrtName und OrtVorwahl gesetzt.
(

Jetzt zum Kombinationsfeld, bei der ersten Variante mit den Daten aus der Tabelle, kann man dann ja nur Orte eingeben, die schon in der DB enthalten sind. Das bringt mir praktisch also nichts, weil ja auch neue Orte hinzu kommen.

Dann wäre da noch die 3. Variante wo er einen passenden Datensatz anbietet. Der will aber auch nicht, wenn ich einen Ort auswähle, der schon vorhanden ist.

Ich weiß halt auch nicht, wie das ist, wenn man den Namen des Ortes angibt, müßte dann ja die Vorwahl automatisch ausgefüllt werden, wenn der Datensatz schon vorhanden ist, weil sonst kann ich da ja eine andere Vorwahl eingeben (bzw. gar keine) und dann hauts ja wieder nicht hin.

Danke für Deine Hilfe.

Jetzt zum Kombinationsfeld, bei der ersten Variante mit den
Daten aus der Tabelle, kann man dann ja nur Orte eingeben, die
schon in der DB enthalten sind. Das bringt mir praktisch also
nichts, weil ja auch neue Orte hinzu kommen.

Hallo Seawulf,

wenn ich das Problem jetzt (hoffentlich) richtig verstanden habe, sind es im Grunde zwei Vorgänge:

  • Erfassung von Bewegungsdaten: In einen neuen DS deiner Haupttabelle soll eine Referenzierung zu einem eindeutigen Ort eingegeben werden können (Auswahl z.B. über Kombi-Feld, Verknüpfung über OrtID)
  • Stammdatenpflege: Noch nicht vorhandene Orte sollen eingepflegt werden können

Ich hab das immer so gelöst:

Im Erfassungsformular werden über z.B. Kombinationsfelder Stammdaten (Artikel-Nr, Orte etc.) angeboten. Wenn der aktuell benötigte Wert noch nicht vorhanden ist, drückt man auf eine nebenstehende Befehlsschaltfläche (Benennung z.B. „Orte erfassen“: Einfügen mit Toolbox --> Assistent: Formularoperation/Formular öffnen). Mit Hilfe dieses Erfassungsformulars kann man nun Orte (oder Kunden etc.) erfassen und der entsprechenden Stammdatentabelle (hier Tabelle Ort)abspeichern. Danach zurück ins Hauptformular und den neuen Ort dort auswählen.

Ist vielleicht nicht genial, funktioniert aber und es ist auch vom Geschäftsprozess sauber getrennt.

Aber vielleicht haben ja die VBA’ler noch was auf der Pfanne

Gruß

Steffen

hm,

stimmt, das wäre ne Idee.

Ich werde das mal so machen.

Oder noch besser:

Man kann ja auch ein Ereignis zuweisen, wenn der Datensatz nicht vorhanden ist. - Das dann da das Ortserfassungsformular aufgeht und dort schon der eingegebene Ort steht man die Vorwahl noch eingibt - OK und fertig ist die Laube.

Jetzt muß nur noch das Makro werden… hm

Und hat die Aktualisierung des Formulars funktioniert? Bei mir taucht der neue Ort nämlich nicht in dem Kombofeld auf.