Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Suche ob ein DS schon vorhanden ist und dann das Formular mit dem DS öffnen

Begonnen von Debus, März 30, 2023, 17:34:25

⏪ vorheriges - nächstes ⏩

Debus

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


MzKlMu

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
Gruß Klaus

ebs17

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
Mit freundlichem Glück Auf!

Eberhard

Debus

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


MzKlMu

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.
Gruß Klaus

Debus

Hallo Klaus,

hast natürlich Recht  ;)

Nicht Clng sondern CStr und schon geht es.

Danke Euch beiden
DD

MzKlMu

Hallo,
Kennung ist ein String (Text). CStr ist somit überflüssig.
Gruß Klaus


Beaker s.a.

I.Ü. liefert .OpenArgs immer (siehe auch OH) einen String, auch wenn nur
eine Zahl übergeben wird.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)