PDA

Vollständige Version anzeigen : verstehe fehlermeldung nicht


frontierscouts
09.05.2001, 07:57
guten morgen zusammen,
habe im formularkopf ein kombifeld mit dem ich datensätze nach 'nachname' suchen kann.
dahinter steht eine ereignisprozedur. wenn ich nun einen namen, der in der datenbank existiert, eingebe, wird dieser auch gefunden und angezeigt, ich bekomme aber gleichzeitig die meldung: das microsoft-datenbankmodul erkennt 'meyer' nicht als gültigen feldnamen oder -ausdruck!
das gleiche habe ich als klassenmudul im kombifeld 'personalnummer' programmiert und dort klappt es einwandfrei ohne fehlermeldung. weiss jemand was die meldung bedeutet?????
vielen dank im voraus für eure hilfe
rainer dresen

A.S.
09.05.2001, 08:23
Hallo Rainer,

bei einer Fehlermeldung ist es zur Beurteilung derselben immer Hilfreich das entsprechende Coding der Fehlermeldung zu sehen, daher würde ich Dich für die Zukunft bitten dieses mit zu posten ;)

Zu Deinem Problem: Ich nehme an, in deinem Coding steht etwas wie


sub kmbSuchNachName_AfterUpdate
Me.RecordsetClone.FindFirst Me![Kombinationsfeld4]
Me.Bookmark = Me.RecordsetClone.Bookmark
end sub


Richtig muss es lauten


Sub kmbSuchNachName_AfterUpdate()
' Den mit dem Steuerelement übereinstimmenden Datensatz suchen.
Me.RecordsetClone.FindFirst "[Nachname] = '" & Me![Kombinationsfeld4] & "'"
Me.Bookmark = Me.RecordsetClone.Bookmark
End Sub


HTH

Arno

frontierscouts
09.05.2001, 09:37
hallo arno,
sieh dir doch mal die sub an.
bei der personalnummer funktioniert die auswahl einwandfrei, beim suchen des namens nicht!!! was habe ich falsch gemacht.

Private Sub Personalnummerauswahl_AfterUpdate() 'personalnummer suchen
On Error GoTo pers_err
Dim persmsgbox As Variant
Me.RecordsetClone.Requery 'requery = daten erneut abfragen
personalnummer.SetFocus
DoCmd.FindRecord Me![Personalnummerauswahl]
Me.RecordsetClone.FindFirst "personalnummer = " & Me!Personalnummerauswahl
DoCmd.GoToControl "RegisterStr183"
If Me.RecordsetClone.NoMatch Then
persmsgbox = MsgBox("die eingegebene personalnummer gibt es in dieser datenbank noch nicht! " _
& "möchten sie einen neuen datensatz anlegen?", vbYesNo, "personaldaten-check")
If persmsgbox = 6 Then
Me.AllowEdits = True
DoCmd.GoToRecord , "", acNewRec
DoCmd.GoToControl "personalnummer"
ElseIf persmsgbox = 7 Then
DoCmd.GoToControl "nachnameauswahl"
Me.Bookmark = Me.RecordsetClone.Bookmark
End If
End If
pers_exit:
Exit Sub
pers_err:
MsgBox Error$
Resume pers_exit
End Sub

Private Sub nachnameauswahl_AfterUpdate() 'nachname suchen
On Error GoTo nam_err
Dim nammsgbox As Variant
Me.RecordsetClone.Requery
nachname.SetFocus
DoCmd.FindRecord Me![nachnameauswahl]
Me.RecordsetClone.FindFirst "nachname = " & Me!nachnameauswahl
DoCmd.GoToControl "RegisterStr183"
If Me.RecordsetClone.NoMatch Then
nammsgbox = MsgBox("den eingegebenen namen gibt es in dieser datenbank noch nicht! " _
& "möchten sie einen neuen datensatz anlegen?", vbYesNo, "personaldaten-check")
If nammsgbox = 6 Then
Me.AllowEdits = True
DoCmd.GoToRecord , "", acNewRec
DoCmd.GoToControl "personalnummer"
ElseIf persmsgbox = 7 Then
DoCmd.GoToControl "nachnameauswahl"
Me.Bookmark = Me.RecordsetClone.Bookmark
End If
End If
nam_exit:
Exit Sub
nam_err:
MsgBox Error$
Resume nam_exit
End Sub

A.S.
09.05.2001, 09:49
Hallo Rainer,

Sinn und Zweck des DoCmd.FindRecord in Deinen Subs will mir nicht in den Kopf, persönlich halte ich diese für überflüssig. Die Zeilen mit Me.RecordsetClone.FindFirst enthalten beide IMHO einen Fehler und müssen korrekt wie folgt lauten:

1te Sub

Me.RecordsetClone.FindFirst "[personalnummer] = " & Me!Personalnummerauswahl

2te Sub

Me.RecordsetClone.FindFirst "[nachname] = '" & Me!nachnameauswahl & "'"

Hier sind es vor allen Dingen die nicht vorhandenen Hochkommatas welche das Coding abbrechen lassen.

HTH

Arno

frontierscouts
09.05.2001, 10:50
hallo arno
vielen, vielen, vielen dank für deinen tip
mit den richtigen hochkommatas funtionierts.
da ich noch vba-neuling bin kommt gleich die nächste frage: wo kann ich den sinn und die einsatzmöglichkeiten all dieser sonderzeichen
erlernen oder nachlesen?
übrigens ohne die zeilen:
DoCmd.FindRecord Me![Personalnummerauswahl]
und DoCmd.FindRecord Me![nachnameauswahl]
funktioniert es gar nicht.

und weils so schön ist habe ich gleich noch eine frage

Karl Donaubauer schreibt zu zu einem solch gestrickten kombisuchfeld:
Wenn die Datenquelle mehr als 263 Datensätze hat und einer der vorderen im Formular gelöscht wird, kann es beim Wechseln zu einem der hinteren Datensätze dazu kommen, dass zwar der richtige Datensatz angezeigt wird, Eingaben aber von Access in einem falschen Satz durchgeführt werden.

Da der Benutzer etwas anderes sieht, als intern gespeichert wird, kann es zu erheblichen Datenverlusten kommen.

L ö s u n g
Dieser Bug kann in den Versionen A2, A95 und A97 auftreten. Für A97 gilt:
Sowohl die neueren Jet-Updates (Ver ab 3.51.2026.0 bzw. jünger als 26.8.1998) als auch das SR2 fixen den Bookmark-Bug.

Hol dir das Jet-Update bei http://support.microsoft.com/download/support/mslfiles/Jet35sp3.exe oder
ftp://ftp.microsoft.com/softlib/mslfiles/Jet35sp3.exe

wie muss ich das jet35sp3.exe denn anwenden.
kann ich es irgendwo auf meine platte downloaden und dann ausführen und das wars oder muss ich noch was anderes tun.
für die beantwortung all meiner anfängerfragen wäre ich sehr dankbar
gruss rainer

A.S.
09.05.2001, 11:04
Hallo Rainer,

der Sinn- und Zweck dieser Sonderzeichen bzw. Hochkommatas ergibt sich aus der verwendeten Datenart. Die Personalnummer ist numerisch ausgeführt und wid auch als solche verglichen (105 = 105). Der Nachname ist jedoch ein Textfeld und muß als solches verglichen werden. Hierfür benötigt Access entsprechende Anfangs- und Endbezüge, eben die Hochkommatas. Durch Deine Anweisung wird ja nur der Wert (Me!Kombo.Value) an die FindFirst-Methode übergeben. Der Vergleich sieht dann so aus "Meyer" = Meyer. Verglichen werden muss allerding "Meyer" = "Meyer" bzw. 'Meyer' = 'Meyer'. Ob diese Hochkommatas notwendig sind oder nicht, ist in der Regel der Dokumentation zu den einzelnen Methoden zu entnehmen und kommt auf den Einzelfall an.

Das JetUpdate ist eine selbstausführende Installationsdatei, welche alle auszuführenden Schritte automatisch durchführt. Einfach downloaden, starten und wohlfühlen.

HTH

Arno

frontierscouts
09.05.2001, 11:48
nochmal recht herzlichen dank arno, hast mir sehr geholfen. wenn ich diese jet35.exe ausgeführt habe, kann ich dann die queryzeile
Me.RecordsetClone.Requery
in meiner sub weglassen? macht die geschichte nämlich erheblich langsamer?

A.S.
09.05.2001, 12:04
Hallo Rainer,

sorry, das mußt Du ausprobieren. Ich persönlich habe nie mit dieser Technik arbeiten müssen, da sich dieser Bug bislang nie bemerkbar gemacht hat. Wahrscheinlich hatte ich das Update zu schnell drauf ;)

cu

Arno