Eingabe doppelter Datensätze verhindern

Hallo zusammen,

ich habe eine Access-Datenbank, die lediglich aus einer Tabelle besteht, in der Firmenadressen gespeichert werden. Ich möchte schon bei der Eingabe vermeiden, dass doppelte Datensätze eingegeben werden.

Ich stelle mir das ungefähr so vor: Es existiert ein Firmenname „Deutsche Telekom“. Irgendwann wird nun ein neuer Datensatz mit dem Firmennamen „Telekom“ eingegeben. Sowie der User das Feld verlässt soll eine MsgBox aufgehen, die sagt „Es gibt schon einen Datensatz „Deutsche Telekom“ mit der Anschrift…“.

Ich bin dankbar für jeden Tipp, wie ich dies bewerkstelligen kann.

Vielen Dank im Voraus,
Barbara

Hallo zusammen,

Hallo auseinander.

ich habe eine Access-Datenbank, die lediglich aus einer
Tabelle besteht, Muuuh! in der Firmenadressen gespeichert werden. Ich
möchte schon bei der Eingabe vermeiden, dass doppelte
Datensätze eingegeben werden.

Also, ganz offen gestanden, lohnt es sich bei dem Ansatz nicht, eine aufwendige Routine zu drechseln, die das von Dir Gewünschte leistet. Fehler aus Redundanzen und Falscheingaben machen jeden noch so schönen Effekt der Eingabeüberprüfung zunichte. Das ist vergleichsweise so, als wenn Du anstatt Schampus Erdbeersekt servierst, den Deine Gäste aus mundgeblasenen Muranogläsern schlürfen sollen …

Vorschlag :

1. Ein anständiges Datenmodell aufsetzen. Normalisierung!
2. Darin die Indizes so vergeben, dass eine Hashindexvergabe ermöglicht wird.
3. Auf diesen Hashindex kann man dann sehr intelligente Suchroutinen anwenden.

Mit der von Dir beschriebenen „Datenbank“ würde das ein entsetzlicher Wirrwarr; tut mir leid.

Wenn Du Dich entschließen solltest, dem obigen Vorschlag zu folgen, setz Dich mehlweise mit mir in Verbindung, ich bin dann gern bereit, Dir bei den Arbeitsschritten Unterstützung zu geben.

Gruß kw

Was genau soll denn noch normalisiert werden, wenn es lediglich Felder für Firmenname, Straße + HausNr sowie PLZ + Ort gibt?

Hi,

also mein Ansatz sind entsprechende Abfragen die entweder ein Kombinationsfeld (während der Eingabe)oder eine Ereignisprozedur (nach der Eingabe) füttern.

Wenn Du genaueres möchtest, könnte ich Dir morgen mehr schreiben. Welches Access verwendest Du?

Ciao

Hallo.

Was genau soll denn noch normalisiert werden, wenn es
lediglich Felder für Firmenname, Straße + HausNr sowie PLZ +
Ort gibt?

Ach thooo … (Thunge einklemm)

Da würde mir dann auch nur noch die Trennung von PLZ und Ort in zwei Tabellen mit einer n:m- Relation auf Anhieb einfallen.

Na gut : Nehmen wir mal an, der Anwender gibt den Begriff „Teleko“ ein. Dann drückt er die Eniki- Taste und Du möchtest alle Sätze, die schon Teleko enthalten, sehen (damit der Anwender entscheiden kann, ob er eine existierende Adresse verwenden oder eine neue anlegen möchte. Das lässt sich realisieren. Das Eingabefeld für den „Suchbegriff“ dürfte klar sein. Dahinter liegt eine Prozedur

Sub Suchbegriff\_AfterUpdate()
Me.Kombinationsfeld.Requery
DoCmd.GoToControl "Kombinationsfeld"
Me.Kombinationsfeld.Dropdown
End Sub

Das Kombinationsfeld (das oben in der Prozedur angesprochene nämlich) basiert auf einer SQL-Abfrage

SELECT Firmenname FROM deinetabelle WHERE InStr(,deinetabelle.Firmenname,forms!deinformular.suchbegriff)0;

womit das Kombinationsfeld alle Firmennamen anzeigen sollte, in denen schon teleko vorkommt.

Hilft Dir das weiter?

Gruß kw

Hallo Barbara,

ich glaube es geht etwas einfacher als mit Normalisierung etc. Sperre in deinem Accessformular die Eigenschaft Datensatz hinzufügen (o.ä.) damit kann der Benutzer im Formular keinen neuen Datensatz anlegen.

In deinem Formular legst du dann einen Button neu an, der zunächst nur ein anderes Formular öffnet, hier kannst du dann den Namen und evtl. PLZ Straße etc, als Eingabefelder , mit diesen Feldern startest du eine Abfrage (einfachste Lösung nur Name und dann Anweisung an Benutzer zunächst nur signifikate Teile einzugeben (z.B. Telekom oder Houten statt van Houten), Abfrage starten, die Datenbank durchsucht, wird nur ein Treffer gefunden, Anzeige der gefundenen , dann muß User entscheiden, ob Treffer schon angelegt ist, bei keinem Treffer, sofort per VBA einen neuen Datensatz anlegen.

Hoffe die Ideen helfen

Peter

Hi,

hatte leider erst jetzt Zeit, Deine letzte Antwort umzusetzen. Das ist genial, absolut großartig, perfekt!!! Ich hatte zwar etwas zu kämpfen, da unten in Deiner SQL-Abfrage wohl ein Komma zuviel ist, aber nachdem das weg war, lief alles einwandfrei.

Vielen, vielen Dank!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]