Supportnet / Forum / Datenbanken
Autom. Kontrolle der Eingabe??
Frage
Hallo !
Ich möchte so etwas ähnliches wie eine Ersatzteilliste anlegen. Nun hab ich das Problem das ich bereits ca. 350 Datensätze eingegben habe und es mir immer wieder passiert das ich die Angaben Doppelt mache. Gibt es eine automatische Kontrolle die sofort aufzeigt wenn in einer Spalte dieselbe Nummer bereits vorhanden ist ? Danke Andreas
P.S.: Das mit der Anmeldung klappt offensichtlich nicht ich hab mich angemeldet trotzdem kommt "Dein Nickname ist schon vergeben" Grummel, grummel
Antwort 1 von Koebi
Grüezi
Versuch es mal mit einem Kombinationsfeld. Dieses darf aber nicht nur Listeneinträge zulassen, sondern auch neue. Zudem braucht es für das Ereignis "Nach Aktualisierung" folgende Ereignisprozedur:
"Me!Titel.Requery".
Sollte klappen.
Gruss
Köbi
Versuch es mal mit einem Kombinationsfeld. Dieses darf aber nicht nur Listeneinträge zulassen, sondern auch neue. Zudem braucht es für das Ereignis "Nach Aktualisierung" folgende Ereignisprozedur:
"Me!Titel.Requery".
Sollte klappen.
Gruss
Köbi
Antwort 2 von struppi
Hallo
Hier im Forum wurde auch schon diese Methode vorgeschlagen:
Sub DoppelTest()
Dim rsProjekt As Recordset
Set rsProjekt = Me.RecordsetClone
rsProjekt.MoveFirst
rsProjekt.FindFirst "[Ersatzteilliste]=" & "`" & Me.Teilenummer & "`"
If Not rsProjekt.NoMatch Then
MsgBox "Der Eintrag: " & Me.Teilenummer & " existiert schon", vbInformation
rsProjekt.Close
Exit Sub
End If
Me.Meldung = "OK!"
End Sub
-----------------------------------
Button anlegen mit Functionsaufruf:
Private Sub Befehl1_Click()
DoppelTest
End Sub
-----------------------------------
Feld anlegen mit Namen: Meldung
-----------------------------------
Wenn Du einen Eingabe in dein Nummernfeld im Beispiel "Teilenummer" gemacht hast und willst prüfen ob der Eintrag existiert drückst du den Button.
Gruß struppi
PS: Die Zeichen ` müssen durch Hochkommas ersetzt werden. Der Tabellenname "Ersatzteilliste" muß durch Deinen tatsächlichen Tabellenname ersetzt werden.
Hier im Forum wurde auch schon diese Methode vorgeschlagen:
Sub DoppelTest()
Dim rsProjekt As Recordset
Set rsProjekt = Me.RecordsetClone
rsProjekt.MoveFirst
rsProjekt.FindFirst "[Ersatzteilliste]=" & "`" & Me.Teilenummer & "`"
If Not rsProjekt.NoMatch Then
MsgBox "Der Eintrag: " & Me.Teilenummer & " existiert schon", vbInformation
rsProjekt.Close
Exit Sub
End If
Me.Meldung = "OK!"
End Sub
-----------------------------------
Button anlegen mit Functionsaufruf:
Private Sub Befehl1_Click()
DoppelTest
End Sub
-----------------------------------
Feld anlegen mit Namen: Meldung
-----------------------------------
Wenn Du einen Eingabe in dein Nummernfeld im Beispiel "Teilenummer" gemacht hast und willst prüfen ob der Eintrag existiert drückst du den Button.
Gruß struppi
PS: Die Zeichen ` müssen durch Hochkommas ersetzt werden. Der Tabellenname "Ersatzteilliste" muß durch Deinen tatsächlichen Tabellenname ersetzt werden.
Antwort 3 von PotzBlitz
Hallo struppi,
es sieht so aus, als ob sich der Fehlerteufel in deinen letzten Satz eingeschlichen hat. :-)
"Ersatzteilliste" ist nicht der Name der Tabelle, sondern der Name des Feldes aus der Tabelle, die diesem Formular hinterlegt wurde.
Gruss
PotzBlitz
es sieht so aus, als ob sich der Fehlerteufel in deinen letzten Satz eingeschlichen hat. :-)
"Ersatzteilliste" ist nicht der Name der Tabelle, sondern der Name des Feldes aus der Tabelle, die diesem Formular hinterlegt wurde.
Gruss
PotzBlitz
Antwort 4 von draack
Oh heiliger Codd!
Wie wäre es mit der Verwendung dieser Nummer als Primärschlüssel?
Ciao!
Volker.
Wie wäre es mit der Verwendung dieser Nummer als Primärschlüssel?
Ciao!
Volker.
Antwort 5 von struppi
Hallo PotzBlitz
Du hast recht ,das habe ich durcheinander gebracht.
Also sollte an Stelle von Ersatzteilliste das Wort Teilenummer stehen. Und der Feldname Teilenummer muß angepasst werden.
Danke für Deinen Hinweis.
Gruß Struppi
Du hast recht ,das habe ich durcheinander gebracht.
Also sollte an Stelle von Ersatzteilliste das Wort Teilenummer stehen. Und der Feldname Teilenummer muß angepasst werden.
Danke für Deinen Hinweis.
Gruß Struppi
Antwort 6 von PotzBlitz
Hallo Volker,
es macht durchaus Sinn, die von struppi vorgeschlagene Variante zu verwenden.
1. In einer Tabelle sollte der Primärschlüssel immer ein Autowert sein. Nur so ist bis in alle Ewigkeit eine Eindeutigkeit garantiert, auch über die Löschung des Datensatzes hinaus.
2. Tabellen sollten möglichst liberal gehalten werden, denn die Feld-Regeln können genausogut im Programmteil verwirklicht werden. So kann später flexibel auf neue Anforderungen reagiert werden, indem nur das Programm selbst geändert wird (vorausgesetzt, Programm und Daten sind voneinander getrennt in unterschiedlichen Datenbanken).
3. Wenn der Primärschlüssel einmal geändert werden muss, dann muss er mittels Aktualisierungsweitergabe in sämtlichen Detailtabellen ebenfalls geändert werden, denn schliesslich verwendet man ja den Primärschlüssel für Beziehungen. Je nach Datenbankgrösse kann das ein beträchtlicher Aufwand und in einer Mehrbenutzerumgebung ein nicht zu unterschätzender Stolperstein sein. Dagegen ist ein Primärschlüssel vom Datentyp Autowert (bleibt auch so), kombiniert mit einer einzigen Änderung in einem einzigen Feld (Teilenummer) viel effektiver. Daten sollten auch in Datenbanken eingebettet sein und sie nicht zusammenhalten wie Klebstoff.
4. Wenn du Daten für den Primärschlüssel heranziehst, dann hast du früher oder später einen Mischmasch aus verschiedenen Datentypen wie dbText und dbLong beim Handling des Primärschlüssels. Das macht die Nutzung von wiederverwendbaren Code schwieriger, denn es muss dank unterschiedlichen Datentypen zweigleisig gefahren werden.
5. Der Datentyp Text ist langsamer als Autowert/Long Integer. Bei einem Primärschlüssel/Index wirkt sich das nachteilig aus.
6. Änderungen im Code sind billiger als Änderungen an der Datenstruktur, insbesondere dann, wenn sich die Daten bereits im Einsatz beim Kunden befinden. Wenn von vornherein Programm und Daten in getrennten Datenbanken aufbewahrt wurden, dann müsste nur der korrigierte Code zugeschickt werden.
7. Und das Beste zum Schluss: Sich wiederholende Daten ist Redundanz in Reinstform und damit ein Frevel in einem relationalen Datenbanksystem. ;-)
Gruss
PotzBlitz
es macht durchaus Sinn, die von struppi vorgeschlagene Variante zu verwenden.
1. In einer Tabelle sollte der Primärschlüssel immer ein Autowert sein. Nur so ist bis in alle Ewigkeit eine Eindeutigkeit garantiert, auch über die Löschung des Datensatzes hinaus.
2. Tabellen sollten möglichst liberal gehalten werden, denn die Feld-Regeln können genausogut im Programmteil verwirklicht werden. So kann später flexibel auf neue Anforderungen reagiert werden, indem nur das Programm selbst geändert wird (vorausgesetzt, Programm und Daten sind voneinander getrennt in unterschiedlichen Datenbanken).
3. Wenn der Primärschlüssel einmal geändert werden muss, dann muss er mittels Aktualisierungsweitergabe in sämtlichen Detailtabellen ebenfalls geändert werden, denn schliesslich verwendet man ja den Primärschlüssel für Beziehungen. Je nach Datenbankgrösse kann das ein beträchtlicher Aufwand und in einer Mehrbenutzerumgebung ein nicht zu unterschätzender Stolperstein sein. Dagegen ist ein Primärschlüssel vom Datentyp Autowert (bleibt auch so), kombiniert mit einer einzigen Änderung in einem einzigen Feld (Teilenummer) viel effektiver. Daten sollten auch in Datenbanken eingebettet sein und sie nicht zusammenhalten wie Klebstoff.
4. Wenn du Daten für den Primärschlüssel heranziehst, dann hast du früher oder später einen Mischmasch aus verschiedenen Datentypen wie dbText und dbLong beim Handling des Primärschlüssels. Das macht die Nutzung von wiederverwendbaren Code schwieriger, denn es muss dank unterschiedlichen Datentypen zweigleisig gefahren werden.
5. Der Datentyp Text ist langsamer als Autowert/Long Integer. Bei einem Primärschlüssel/Index wirkt sich das nachteilig aus.
6. Änderungen im Code sind billiger als Änderungen an der Datenstruktur, insbesondere dann, wenn sich die Daten bereits im Einsatz beim Kunden befinden. Wenn von vornherein Programm und Daten in getrennten Datenbanken aufbewahrt wurden, dann müsste nur der korrigierte Code zugeschickt werden.
7. Und das Beste zum Schluss: Sich wiederholende Daten ist Redundanz in Reinstform und damit ein Frevel in einem relationalen Datenbanksystem. ;-)
Gruss
PotzBlitz

