Hallo Leute.
Seltsames Phänomen.
Ich habe ein Formular (mit ein paar Unterfomularen).
Im Formular wollte ich mittels einer Kombobox "cboProfil" den Datensatz auswählen; sie enthält 2 Spalten: ProfId (Breite 0) und ProfBez (4cm). Dazu hab ich im Assi die dritte Option gewählt, so dass Access ein Makro als Ereignis Nach Änderung erstellt hat.
Dann dachte ich mir, es doch besser per VBA zu machen, habe das Makro im Eigenschaften-Fenster gelöscht und dann sofort per ... den Code-Generator aufgerufen und ein wenig Code geschrieben, weil ich einbauen wollte, den DS auf einen Neuen zu kopieren:
Private Sub cboProfil_AfterUpdate()
Dim lngProfilId As Long
lngProfilId = cboProfil.Column(0)
If Me.Dirty Then Me.Dirty = False 'triggers saving of record
ProfId.SetFocus
Me.Recordset.FindFirst "ProfId = " & lngProfilId
End Sub
Ich hatte hier mal die Sequenz
RunCommand acCmdSelectRecord
RunCommand acCmdCopy
RunCommand acCmdRecordsGoToNew
RunCommand acCmdSelectRecord
RunCommand acCmdPaste
drin, die aber einen Fehler meldete (...in Tabelle "Fehler" gespeichert...). In dieser Tabelle standen komischerweise nicht die Tabellen-Feldnamen, sondern die Formular-Feldnamen.
Das Formular ist an die Tabelle "Profile" gebunden, in der genau 19 Test-Datensätze enthalten sind. Eine entspr. gespeicherte Abfrage, die inzwischen als RecordSource dient, liefert auch brav alle DS zurück.
Wenn ich nun das Formular aufrufe, erscheint im Navi-Bereich "1 von 2" oder auch nur "1 von 1", aber nie "1 von 19". Im Feld "ProfId" steht "20". Wähle ich ein anderes Profil, bleibt "ProfId" bei 20 stehen.
Wähle ich im Navibereich nächster/voriger DS, ändert sich die Anzeige sogar von "1 von 2" zu "1 von 1".
/Decompile habe ich schon probiert - keine Änderung. Die Kombobox habe ich auch schon gelöscht und wieder neu eingefügt (allerdings ohne dazwischen das Formular zu speichern) - keine Änderung.
Hat jemand eine Idee, was da falsch läuft???
Gruß,
crystal
Hallo,
soweit ich weiß, bildet die Find-Methode aus dem zugrundeliegenden Dataset quasi eine Untermenge der Sätze, die den Kriterien entsprechen. Die restlichen Sätze, die nicht den Kriterien entsprechen, bleiben erstmal unberücksichtigt.
Willst du, nach dem ersten Finden in allen Datensätzen weitersuchen, ist move.first besser. Dabei sollte das Dataset nach den Kriterien sortiert sein.
Gruß
Andreas
Hallo,
was erwartest Du denn bei " RunCommand acCmdRecordsGoToNew" ?
Und was möchtest Du genau wann und wie machen?
Wo steht denn die "Sequenz"?
Zudem würde ich nicht VBA mit internen Access-Makros mischen....
Wenn
Zitat"weil ich einbauen wollte, den DS auf einen Neuen zu kopieren"
gilt(, wobei ich mich Frage, wozu das gut sein soll):
Private Sub cboProfil_AfterUpdate()
Me.Dirty =false '(wenn man's braucht)
Currentdb.Execute "Insert Into Profile (ProfBez) Select p.ProfBez from Profile As p Where p.Profid = " & Me!cboProfil, dbFailOnError
End Sub
Wenn das den Zweck haben soll, bei der Eingabe eines neuen DS vorherige Daten zu übernehmen, dann wäre das Setzen der Eigenschaft ".DefaultValue" der einzelnen Form-TextFelder besser angebracht.
Neue Erkenntnis:
Im Formular stand "Daten eingeben" auf "Ja".
Dadurch sprang das Formular immer zu einem neuen Datensatz und der Wechsel via Kombobox zu einem bestehenden DS war nicht möglich.
Gruß,
crystal
ps: auf die Antwort von Franz gehe ich nicht ein, da sie doch eher etwas irreführend und skurril ist...
Zitatauf die Antwort von Franz gehe ich nicht ein,
das ist auch gut so..