Access-Forum

Log in | Anmelden
 
zurück zur Hauptseite
in Thread öffnen

zugriff über zusammengesetzten indes

Henry @, Braunschweig, Montag, 21. Dezember 2009, 14:35 @ rytschy

Hallo Rytschy,

ich habe einen Index (nicht Primärschlüssel) bei einer Tabelle eingerichtet. Mein Indes besteht aus Name, Vorname, Firma. (Primärschlüssel ist autokey)

da du nicht den Primärschlüssel verändern willst, bleibt m.E. folgende schlanke Lösung:

Wie kann ich jetzt über diesen Schlüssel prüfen, ob es in der Tabelle bereits einen identischen Kontakt gibt? Ich gebe die entsprechenden Werte in einem Formular ein. Ich möchte dann je nachdem ob es eine Neuanlage oder eine Änderung gibt entsprechend einen anderes Zweig im Ablauf einschlagen.

Wenn der Benutzer "das speichernde Ereignis" auslöst (also z.B. auf einen Bestätigungs-Button klickt), dann prüfst du im ersten Schritt mit einer der Domänenaggregat-Funktionen das Vorhandensein der eingegebenen Kombination aus Vorname, Nachname und Firma.
Nehmen wir mal an, die Felder heißen auch in der Tabelle so und die Feldnamen im Formular haben einfach das Wort "Feld" davor. Passen würde hier z.B. die DCount Funktion:

 
DCount("*", "Tabelle", "Name=[FeldName] AND Vorname=[FeldVorname] AND Firma=[FeldFirma]")
 


Ist das Ergebnis gleich 0, dann gibt es so einen Eintrag noch nicht. Nachfolgend würdest du also mit einer Neuanlage weitermachen.
Ist das Ergebnis (größer bzw.) gleich 1, dann existiert so ein Eintrag bereits und du kannst anschließend in einen Änderungsablauf verzweigen.
Wenn man das konsequent durchhält kommt schließlich jede Kombination in der Tabelle nur einmal vor. Trotzdem würde ich mir an deiner Stelle sicherheitshalber noch eine Reaktion für Mehrfach-Vorkommen überlegen - vielleicht aufgrund unsauberer Daten-Vorbestände...
Zum Beispiel könnte man den Benutzer fragen, welchen der x Treffer (trennbar anhand des "autokey") er aktualisieren möchte. Oder ob er gar noch einen weiteren Satz hinzufügen will...

Eine noch abzufangende Schwachstelle könnte fehlerhafte Groß-/Kleinschreibung darstellen, wodurch man einen [Meier,Josef,Firma1] parallel zu einem [mEier,Josef,Firma1] anlegen könnte. Ich habe nicht ausprobiert, ob man das in der Bedingung mit "Like" statt "=" abgreifen könnte...

Ich hoffe das hilft dir weiter. Eine ausführliche Erläuterung der DCount Funktion findest du natürlich in der Access-Hilfe.

Gruß, Henry

 

gesamter Thread:

 RSS-Feed dieser Diskussion

RSS Einträge  RSS Threads | Kontakt