Mai 17, 2021, 15:20:29

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Formular spinnt

Begonnen von crystal, Februar 16, 2021, 16:32:49

⏪ vorheriges - nächstes ⏩

crystal

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
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

andyfau

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

DF6GL

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.

crystal

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...
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...