Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: sugar76 am Februar 18, 2020, 11:46:19

Titel: Formular öffnen und Wert an Kombinationsfeld übergeben
Beitrag von: sugar76 am Februar 18, 2020, 11:46:19
Hallo allerseits,

ausgehend von Formular frmPerson, möchte ich per VBA Formular frmPerson_Adressen öffnen. In  frmPerson_Adressen gibt es ein Kombinationsfeld  cmbPersonen. Beim Öffnen möchte ich das Kombinationsfeld frmPerson_Adressen.cmbPersonen mit dem Wert aus dem Textfeld frmPerson.Id selektieren.

Der Code zum Öffnen des Formulars:

DoCmd.OpenForm "frmPerson_Adressen"
Forms!frmPerson_Adressen!cmbPersonen.Value = Me.Id.Value
Forms!frmPerson_Adressen!cmbPersonen.Requery


Das Feld frmPersonen.Id.Value ist vom Typ Replikations-ID, die Spalte 0 im Kombinationsfeld ebenfalls.

Das Formular frmPerson_Adressen wird mit diesem Code auch geöffnet, aber das Kombinationsfeld frmPerson_Adressen.cmbPersonen bleibt leer.

Hat jemand eine Idee, woran das liegen könnte?

Gruß  :)
Titel: Re: Formular öffnen und Wert an Kombinationsfeld übergeben
Beitrag von: Beaker s.a. am Februar 18, 2020, 13:06:39
Hallo,
Falls das "Requery" nötig ist, mach es zuerst, das setzt nämlich jedes RS zurück
auf den ersten DS.
gruss ekkehard
Titel: Re: Formular öffnen und Wert an Kombinationsfeld übergeben
Beitrag von: sugar76 am Februar 18, 2020, 13:28:35
Ich habe es doch selber hinbekommen.

Das Problem war: hinter dem Kombinationsfeld steckt eine Abfrage, Werte vom Typ GUID (Replikations-ID) enthält.

Im Kombinationsfeld ist die resultierende Spalte dann vom Typ vom Typ Variant/String und die Werte haben die Form  "{2F3CDBE4-872F-4807-9F33-72F7A7360798}".

Damit die Zuweisung Me.cmbPersonen.Value = Me.Id.Value klappt, muss man den Wert vom Me.Id.Value in einen String umwandeln. Leider kann man die Bibliotheks-Funktion StringFromGUID nicht einfach verwenden, da diese aus einer GUID folgendes macht:
"{guid {2F3CDBE4-872F-4807-9F33-72F7A7360798}}"

Ich habe mir daher eine Funktion geschrieben, welche die Umwandlung korrekt vornimmt:
Public Function MyStringFromGUID(Guid As Variant) As String
    MyStringFromGUID = Replace(Replace(StringFromGUID(Guid), "guid {", ""), "}}", "}")
End Function


Den Aufruf habe ich dann mit OpenArgs realisiert:
DoCmd.OpenForm "frmPerson_Adressen", OpenArgs:=MyStringFromGUID(Me.Id.Value)

Im Formular frmPerson_Adressen sieht das dann so aus:
Private Sub Form_Load()
    If Not IsNull(Me.OpenArgs) Then
        Me.cmbPersonen.Value = Me.OpenArgs
    End If
End Sub


Mann, da muss man erstmal drauf kommen ...