Forum: Visual Basic |
Thema:
VBA/ACCESS 2k - Anfänger braucht dringend Hilfe - Formular öffnen in Ereignisprozedur |
Von:
G. Guest (
16.05.2003 22:53) |
Hallo allerseits,
ich stricke mir gerade meine erste Datenbank mit MS-ACCESS und komme ohne VBA nicht weiter. Kann mir hier jemand die Syntax zum öffnen eines Formulars innerhalb einer Ereignisporzedur erklären.
Es geht um folgendes: Ich habe die Daten aus denen sich eine Anschrift zusammensetzt in verschiedenen Tabellen hinterlegt. In der DPLZ_Tab insb. die Deutschen Postleitzahlen, in der StrassenTab insb. die Straßennamen u.s.w. Wenn ich nun im Anschriftenformular z.Bsp. eine neue Postleitzahl eingebe, soll ACCESS erst einmal prüfen ob die schon in der DPLZ hinterlegt ist, um sie - wenn nicht - ggf. dort zuvor abzuspeichern.
Dazu gehe ich wie folgt vor:
1. Ich erstelle eine einfache Abfrage in die ich (mittels *) alle Felder der AdressTab aufnehme und klicke Anzeigen an.
2. Diese Abfrage speichere ich als Formular ab.
3. Ich klicke mit der Maus in das Textfeld des Steuerelements DPLZ und gehe im Eigenschaftsfenster auf Ereignis.
4. Dort klicke ich in die Zeile "Vor Aktualisierung" und wähle Ereignisprozedur. Dann lasse ich mir über die ... die VBA-Entwicklungsumgebung öffnen.
5. Dort würde ich folgenden Code eingeben:
Private Sub Form_BeforeInsert(Cancel As Integer)
'Oder muss es heißen: Private Sub Form_Anschrift01_BeforeInsert(...)?
'Was meint (Cancel As Integer)?
Dim Db As Database, Rcst As Recordset, SQL As String
Dim check As Integer
Set Db = CurrentDb()
SQL = "Select * from DPLZ_Tab where DPLZ = '" & Forms![Form_Anschrift01]![AdressTab.DPLZ] & "'"
Set Rcst = dbs.openrecordset(SQL)
'Verständnisfrage: muss es nicht "=Db.openrecordset()" heißen? Oder anders: was meint hier "dbs."
check = Rcst.RecordCount
If check = 0 Then '??? Hier beginnt mein Problem!!!
'(Nur) Für die Fälle, dass check = 0 ist, wünsche ich mir das Erscheinen eines Formulars zur Eingabe von 3 Datenfeldern. In diesen Eingabefelder soll ein Datensatz aus der DPLZ_Tab angezeigt werden und zwar in ausgeschriebener Textform: 1. Ortsnamen 2. Bundeslandkuerzel 3. Regierungsbezirk
'Der Datensatz der angezeigt werden soll, soll der nächstliegende zum eingegebenen sein. Mir hat einer vorgeschlagen, diese Aufgabe durch hochzählen einer Schleife zu bewältigen. Ein anderer sagte, dass dafür irgendeine "unscharfe"-SQL-Abfrage besser geeignet weil chneller wäre.
'Bei dem Hochzählvorschlag wurde die Find-Methode benutzt. Also ungefähr: Dim PLZ As String * 5; PLZ = ... (der eingegebene Wert) / Rcst.MoveFirst / Rcst.Find(...???...) / If Rcst.NoMatch = True then / PLZ = PLZ + 1 / Go to Anfang
'Dann müsste der Befehl kommen spuck das "DPLZ-Formular" aus, möglichst bereits fokusiert auf den nächstliegenden PLZ-Datensatz (die neue PLZ selbst brauch ich nicht zu sehen)
End if
'Jetzt müsste ich das DPLZ-Formular ausfüllen, um die neue PLZ in der DPLZ_Tab abzuspeichern. Ggf. würde dabei das Problem auftauchen, dass dazu auch eine Stadt eingegben werden muss, die ich noch nicht in der OrtsTab hinterlegt habe. Das wäre allerdings wohl nur eine Verschachtelung des zuvor beschriebnen Problems.
Rcst.Close
Set Db = Nothing
End Sub
6. Jetzt - so meine ich - brauche ich kein VBA mehr, dass Steuerelement sollte nun (irgendwie halt automatisch) die im Textfeld erscheinende PLZ in einen neuen AdressDatensatz eintragen.
Bitte helft mir - ich sitze mittlerweile schon eine geraume Zeit vor dem Problem und kommen einfach nicht weiter. Vielen Dank schon mal vorab!
Betreff |
Von |
Datum |
|
|
G.
Guest
|
12.06.2003 15:59 |
|
|
G.
Guest
|
09.01.2004 11:29 |
|
|
Antworten
Vorsicht bei der Eingabe: Die Zeichen ' oder -- sind nicht erlaubt!