Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Debus am März 30, 2023, 17:34:25

Titel: Suche ob ein DS schon vorhanden ist und dann das Formular mit dem DS öffnen
Beitrag von: Debus am März 30, 2023, 17:34:25
Hallo,

ich möchte vor dem öffnen eines Formulares aus einem anderen Formular heraus prüfen, ob es schon einen Datensatz zum der Kennung gibt. Wenn ja dann soll der entsprechende DS geöffnet werden ansonsten ein neuer.

Ich wollte das wie folgt mit DLookup machen

Die Tabelle wo ich suche heißt
va-VEP
Das Feld in der Tabelle heißt
Kennungen



Dim Ken As String
Ken = Me.Kennung
If Not IsNull(DLookup("Kennungen", "va-VEP", "Kennungen = " & Ken)) Then

Wenn nun die Kennung (was sehr häufig vorkommt) einen "." enthält kommt der Fehler1 und ansonsten der Fehler2

Was mache ich hier falsch

Danke
DD

Titel: Re: Suche ob ein DS schon vorhanden ist und dann das Formular mit dem DS öffnen
Beitrag von: MzKlMu am März 30, 2023, 17:44:06
Hallo,
versuche es so:
If Not IsNull(DLookup("Kennungen", "[va-VEP]", "Kennungen = '" & Me.Kennung &"'")) ThenDie ersten beiden Zeilen sind überflüssig. Kennung ist Text und muss in Hochkomma eingeschlossen werden.
Feldnamen mit Sonderzeich müssen in ein [] Paar eingeschlossen werden. Daher sollte man auf Sonderzeichen (und Leerzeichen) in Feldnamen verzichten. Es spart ein Haufen Arbeit.

Wenn Du statt Dlookup DCount verwenden würdest, könntest Du die Prüfung auf Null sparen.
If DCount("Kennungen", "[va-VEP]", "Kennungen = '" & Me.Kennung & "'") > 0 Then
Titel: Re: Suche ob ein DS schon vorhanden ist und dann das Formular mit dem DS öffnen
Beitrag von: ebs17 am März 30, 2023, 18:26:49
Ich denke, einmal prüfen genügt, und da Du sowieso das Formular öffnen willst, hast Du bereits die nötige Filterung.
DoCmd.OpenForm "FormName", , , "Key = " & Me.txtKey, , , Me.txtKey
Das Formular prüft sich dann selbst:
Private Sub Form_Open(Cancel As Integer)
   If Me.Recordset.EOF Then
      ' leer
      Me.Recordset.AddNew
      If Not IsNull(Me.OpenArgs) Then Me.txtKey = CLng(Me.OpenArgs)
   Else
      ' da ist was
   End If
End Sub
Titel: Re: Suche ob ein DS schon vorhanden ist und dann das Formular mit dem DS öffnen
Beitrag von: Debus am März 30, 2023, 19:40:17
Hallo, und erstmal danke für Euere Antworten.

Ich habe die Version von Eberhard versucht umzusetzten

Der Code sieht wie folgt aus

DoCmd.OpenForm "frmName", , , "Kennungen = '" & Me.Kennung & "'", , , Me.Kennung
Der Aufruf läuft schonmal und die richtige Kennung wird übergeben

Dann beim Laden des Formulares sieht der Code wie folgt aus.

If Me.Recordset.EOF Then
       leer
      Me.Recordset.AddNew
     
Else
      If Not IsNull(Me.OpenArgs) Then Me.Kennungen = CLng(Me.OpenArgs)
     
   End If

Der Fehler3 kommt dann genau hier:

If Not IsNull(Me.OpenArgs) Then Me.Kennungen = CLng(Me.OpenArgs)
In der Tabelle "va-VEP" ist das Feld Kennungen vom Typen "Kurzer Text"

In der Tabelle vom aufrufenden Formular hat des Feld Kennung den Typen "Kurzer Text"

Warum bekomme ich hier den Fehler "Typen unverträglich"



Danke
DD

Titel: Re: Suche ob ein DS schon vorhanden ist und dann das Formular mit dem DS öffnen
Beitrag von: MzKlMu am März 30, 2023, 19:45:07
Hallo,
Du willst mit Clng aus Text eine Zahl machen.
Außerdem heißt das Feld Kennung und nicht Kennungen.
Eberhard verwendet Schlüsselzahlen in seinem Vorschlag.
Titel: Re: Suche ob ein DS schon vorhanden ist und dann das Formular mit dem DS öffnen
Beitrag von: Debus am März 30, 2023, 19:51:33
Hallo Klaus,

hast natürlich Recht  ;)

Nicht Clng sondern CStr und schon geht es.

Danke Euch beiden
DD
Titel: Re: Suche ob ein DS schon vorhanden ist und dann das Formular mit dem DS öffnen
Beitrag von: MzKlMu am März 30, 2023, 19:56:59
Hallo,
Kennung ist ein String (Text). CStr ist somit überflüssig.
Titel: Re: Suche ob ein DS schon vorhanden ist und dann das Formular mit dem DS öffnen
Beitrag von: Debus am März 30, 2023, 20:23:06
Ja richtig Danke

DD

Titel: Re: Suche ob ein DS schon vorhanden ist und dann das Formular mit dem DS öffnen
Beitrag von: Beaker s.a. am März 30, 2023, 21:14:55
I.Ü. liefert .OpenArgs immer (siehe auch OH) einen String, auch wenn nur
eine Zahl übergeben wird.