Suchformular

Hallo,

folgendes Problem in Access2k.

Der Primärschlüssel zu den Daten meiner Tabellen setzt sich aus mehreren Zahlenpaaren und einem Buchstaben zusammen. Einige Zahlenpaare dürfen nur ganz bestimmte Werte annehmen.

Um dies zu erreichen, könnte man eine Prüfung des Ausdrucks (VBA-Code) durchführen. Da ich das aber nicht alleine kann, habe ich für die jeweiligen Zahlenpaare separate Tabellen erstellt und dort die zulässigen Werte eingetragen. Dadurch kann ich in der eigentlichen Tabelle auswählen, dass ich als Werte „Nur Listeneinträge“ möchte. Geht also auch so. Ist das denn auch ok, oder wäre die Eingabeprüfung auch ratz fatz erledigt?

Jetzt zum eigentlichen Problem. Ich möchte gerne ein Suchformular für die Primärschlüsselwerte haben. Erstelle ich z.B. einen neuen Datensatz durch ein Formular, trage dort alle Werte ein und vervollständige somit das Formular, bekomme ich erst die Nachricht über den bereits vorhandenen Primärschlüssel, wenn ich den aktuellen Datensatz verlassen möchte. Das ist natürlich ärgerlich.

Das Suchformular sollte darum die Möglichkeit bieten, die Werte des Primärschlüssels einzugeben. Ist der dann vorhanden, soll mir der zugehörende Datensatz angezeigt werden. Ist der Primärschlüssel neu, so möchte ein neuer Datensatz - mit dem soeben im Suchformular eingegebenen Primärschlüssel - angelegt werden. Eigentlich ganz einfach. Aber wie kann ich sowas machen? Wieder VBA, ich weiß.

MfG,
Rogge

Hallo Rogge,

Um dies zu erreichen, könnte man eine Prüfung des Ausdrucks
(VBA-Code) durchführen.

richtig :smile:

Ist das denn auch ok, oder wäre die Eingabeprüfung auch ratz fatz
erledigt?

beim Fokusverlußt des Feldes mit SELECT CASE eigentlich kein Problem :smile:
soll heißen, pro Feld ca. 10 Zeilen Code je nach Menge der Einschränkungen.

SELECT CASE Me.Formularfeld

case 20
Eingabe = True

case 21-30
Eingabe = False

end CASE

Jetzt zum eigentlichen Problem. Ich möchte gerne ein
Suchformular für die Primärschlüsselwerte haben. Erstelle ich
z.B. einen neuen Datensatz durch ein Formular, trage dort alle
Werte ein und vervollständige somit das Formular, bekomme ich
erst die Nachricht über den bereits vorhandenen
Primärschlüssel, wenn ich den aktuellen Datensatz verlassen
möchte. Das ist natürlich ärgerlich.

viel zu umständlich! Bei der Felddefinition in der Tabelle kannst du bestimmen, ob doppelte Werte vorkommen dürfen. Der Primärschlüssel ist immer eindeutig, d.h. der läßt schon keine doppelten Werte zu.

Mein Rat: erstelle EIN Feld für den Primärschlüssel!

Das Suchformular sollte darum die Möglichkeit bieten, die
Werte des Primärschlüssels einzugeben. Ist der dann vorhanden,
soll mir der zugehörende Datensatz angezeigt werden. Ist der
Primärschlüssel neu, so möchte ein neuer Datensatz - mit dem
soeben im Suchformular eingegebenen Primärschlüssel - angelegt
werden. Eigentlich ganz einfach. Aber wie kann ich sowas
machen? Wieder VBA, ich weiß.

richtig, Access ohne VBA ist wie Autofahren ohne Räder :smile:
Ich glaube, so langsam merkst du was ich damit meine? Also lerne VBA!

Du willst bei der Eingabe überprüfen, ob bereits die Daten in der Tabelle sind? Dann erledige es über DLOOKUP ohne Suchformular!

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo Wolfgang,

Jetzt zum eigentlichen Problem. Ich möchte gerne ein
Suchformular für die Primärschlüsselwerte haben. Erstelle ich
z.B. einen neuen Datensatz durch ein Formular, trage dort alle
Werte ein und vervollständige somit das Formular, bekomme ich
erst die Nachricht über den bereits vorhandenen
Primärschlüssel, wenn ich den aktuellen Datensatz verlassen
möchte. Das ist natürlich ärgerlich.

viel zu umständlich! Bei der Felddefinition in der Tabelle
kannst du bestimmen, ob doppelte Werte vorkommen dürfen. Der
Primärschlüssel ist immer eindeutig, d.h. der läßt schon keine
doppelten Werte zu.

Mein Rat: erstelle EIN Feld für den Primärschlüssel!

Ich glaub, du weißt nicht genau, was ich eigentlich möchte. Vor allem nachdem wir letzte Woche das EINE PKey-Feld mit Hilfe einer Änderungsabfrage auf mehrere Felder verteilt haben. Das sei besser so, meintest du. Damit du wieder weißt, worum es geht, hab ich dir hier mal ein Bild vorbereitet…

http://www.bilder-speicher.de/07121519793366.maxdire…

Zur Erklärung, ganz oben wird die Location in 5 Felder eingetragen. Vorher war das nur ein Feld, jeweils mit „:“ getrennt. Alle 5 Felder bilden den zusammengesetzten Primärschlüssel. Anders ist das nicht möglich.

Und jetzt möchte ich rechts neben den Feldern ein Button „suchen“ erstellen. Bei nem Klick darauf sollte eben das Suchformular angezeigt werden, in dem man die gesuchte Location eingibt und bei einem Klick auf einen „Go“-Button entweder zum bestehenden Datensatz geleitet wird, oder einen neuen Datensatz erstellt. Das muss irgendwie gehen. Zumal ich nun nicht mehr die integrierte Suchfunktion von Access nutzen kann.

MfG,
Rogge

Hallo Rogge,

Ich glaub, du weißt nicht genau, was ich eigentlich möchte.

doch, doch ich weiß schon was du willst :smile:

Vor allem nachdem wir letzte Woche das EINE PKey-Feld mit
Hilfe einer Änderungsabfrage auf mehrere Felder verteilt
haben. Das sei besser so, meintest du.

richtig, damit du die Eingabe pro Feld kontrollieren kannst.

Zur Erklärung, ganz oben wird die Location in 5 Felder
eingetragen. Vorher war das nur ein Feld, jeweils mit „:“
getrennt. Alle 5 Felder bilden den zusammengesetzten
Primärschlüssel. Anders ist das nicht möglich.

ok, dagegen ist nichts zu sagen. Es gibt zwei Bereiche: einmal das Formular und einmal die Tabelle.

Und jetzt möchte ich rechts neben den Feldern ein Button
„suchen“ erstellen. Bei nem Klick darauf sollte eben das
Suchformular angezeigt werden, in dem man die gesuchte
Location eingibt und bei einem Klick auf einen „Go“-Button
entweder zum bestehenden Datensatz geleitet wird, oder einen
neuen Datensatz erstellt. Das muss irgendwie gehen. Zumal ich
nun nicht mehr die integrierte Suchfunktion von Access nutzen
kann.

Was wäre, wenn der User in den bereits vorhanden Feldern die Location eingibt und Access für Ihn sucht? Ohne erneute Eingabe in einem extra Suchformular. Denn das wäre ja doppeltgemoppelt :smile:

Wenn du also beim Verlassen, oder besser bei Fokusverlußt des letzten Feldes per VBA ein Suche durchführen läßt, braucht der User die Daten nur einmal einzugeben.

Nur mal so zum Beispiel:

Private Sub Feld4_LostFocus()
Dim xBedingung

xBedingung = „’“ & Me.Eingabecomputer & Me.EingabeFeld1 & Me.EingabeFeld2 & Me.EingabeFeld3 & Me.EingabeFeld4 & „= '“ & _
„[FeldComputer] & [Feld1] & [Feld2] & [Feld3] & [Feld4]“

'zählen, wie oft diese Daten vorkommen
If DCount("[ID]", „Location“, bedingung) > 0 Then

MsgBox „Datensatz vorhanden“

'Eingabe Rückgängig machen
DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70

'zurück zum ersten EingabeFeld
DoCmd.gotocontrol „EingabeComputer“

Else

MsgBox „Datensatz nicht vorhanden“

'ggf. zum neuen Datensatz gehen
DoCmd.GoToRecord , , acNewRec

End If

End Sub

Ich hoffe du versteht nun was ich meine?

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo,

was haellst du von einer Loesungsvariante, die auf dem „Vor-Aktualisierungs“-Event der Felder aufsetzt.

du kannst dir eine Funktion schreiben, der du die fuenf Werte uebergibst z,B,

Public Function CheckValues(Feld1 as String, Feld2 as Integer …) as Boolean

In der Funktion kannst du mittels einer DAO/ADO Abfrage die Werte ueberpruefen und entsprechend reagieren.

Diese Funktion rufst du fuer jedes Eingabefeld bei „VorAktualisieren“ auf.

Ist alles OK, wird die Eingabe akzeptiert, ansonsten abgebrochen und eine neue Eingabe vom Anwender angefordert.

Hope this helps
Tschau
Peter

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