collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 85
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 2
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13972
  • stats Beiträge insgesamt: 66528
  • stats Themen insgesamt: 8970
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Function für Wert aus Tabelle abfragen  (Gelesen 157 mal)

Offline Micharius

  • Access-User
  • *
  • Beiträge: 69
Function für Wert aus Tabelle abfragen
« am: Juni 18, 2018, 08:18:12 »
Hallo zusammen
Meine Idee ist, einen Wert ParIDRef aus einer Tabelle tblPartner abzufragen innerhalb einer Sub, welche mir dann den Wert tblParTimelogCustomerID zurückgeben soll. ParIDRef verweist immer auf genau einen Datensatz in der Tabelle tblPartner.

Folgendes habe ich probiert

Public Function p_f_TimelogCustomerIDFeedback(lgnParIDRef As Long) As String
    Dim rcsP As DAO.Recordset
    Dim lngParTimeCustomerID As Long

    Set rcsP = CurrentDb.OpenRecordset("SELECT ParTimelogCustomerID " & _
    "FROM tblPartner " & _
    "WHERE ParID=" & lgnParIDRef, dbOpenDynaset)
               
    p_f_TimelogCustomerIDFeedback = lngParTimeCustomerID
End Function

Scheinbar ist kein Fehler im Code, trotzdem erhalte ich keinen Wert retour bei einem Aufruf. Was habe ich falsch gemacht bzw. falsch angedacht?

Über eure Tipps würde ich mich freuen.

Herzliche Grüsse

Micharius
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7283
Re: Function für Wert aus Tabelle abfragen
« Antwort #1 am: Juni 18, 2018, 08:28:43 »
Hallo,
so geht das gar nicht.
Eher einfach so:
Public Function p_f_TimelogCustomerIDFeedback(lgnParIDRef As Long) As String
    p_f_TimelogCustomerIDFeedback = Dlookup("ParTimelogCustomerID","tblPartner","ParID=" & lgnParIDRef)
End Function
Wobei ich hie die Funktion für überflüssig halte, denn das kann man direkt in den Steuerelelementinhalt schreiben.
Außerdem kann man eine Abfrage mit beiden Tabellen verwenden, dann braucht es gar nichts.
« Letzte Änderung: Juni 18, 2018, 09:25:30 von MzKlMu »
Gruß
Klaus
 

Offline PhilS

  • Administrator
  • Access-Profi
  • *****
  • Beiträge: 338
    • Tipps zu Access, VBA, SQL und Co.
Re: Function für Wert aus Tabelle abfragen
« Antwort #2 am: Juni 18, 2018, 09:09:09 »
Scheinbar ist kein Fehler im Code, trotzdem erhalte ich keinen Wert retour bei einem Aufruf. Was habe ich falsch gemacht bzw. falsch angedacht?
Du hast einen elementaren Teil im Code vergessen. Du öffnest ein Recordset, das wahrscheinlich auch den korrekten Datensatz enthält, aber davon allein kommt der gesuchte Wert noch nicht in deine Variable lngParTimeCustomerID. Es fehlt die entsprechende Zuweisung.

Public Function p_f_TimelogCustomerIDFeedback(lgnParIDRef As Long) As String
    Dim rcsP As DAO.Recordset
    Dim lngParTimeCustomerID As Long

    Set rcsP = CurrentDb.OpenRecordset("SELECT ParTimelogCustomerID " & _
    "FROM tblPartner " & _
    "WHERE ParID=" & lgnParIDRef, dbOpenDynaset)
   
    If Not  rcsP.Eof Then
        lngParTimeCustomerID = rcsP.Fields("ParTimelogCustomerID").Value
    End If 

    p_f_TimelogCustomerIDFeedback = lngParTimeCustomerID

    rcsP.Close
    Set rcsP = Nothing
End Function
Wenn du ein Recordset öffnest, solltest du das Schließen desselben nicht vergessen.

Je nach Kontext solltest du auch die Anmerkung von Klaus bzgl. der Abfrage beachten!
Neues Access 2019 Feature angekündigt: Modern Charts
 

Online DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23340
Re: Function für Wert aus Tabelle abfragen
« Antwort #3 am: Juni 18, 2018, 09:24:34 »
Hallo,

und das Ganze geht viel kürzer, wenn man statt der  Dlookup()-Funktion einen Recordset verwenden möchte:

Public Function p_f_TimelogCustomerIDFeedback(lgnParIDRef As Long) 

      p_f_TimelogCustomerIDFeedback = CurrentDb.OpenRecordset("SELECT ParTimelogCustomerID " & _
    "FROM tblPartner  WHERE ParID=" & lgnParIDRef, dbOpenSnapshot)(0)

End Function


Offline Micharius

  • Access-User
  • *
  • Beiträge: 69
Re: Function für Wert aus Tabelle abfragen
« Antwort #4 am: Juni 18, 2018, 09:56:10 »
Hallo Franz

Vielen Dank! Das geht tatsächlich viel kürzer. Ich habe ehrlich gesagt einen Code von einem anderen Use Case kopiert und angepasst. Tatsächlich würde dieser sogar funktionieren, nur habe ich Schaf im Direktbereich die Funktion falsch geprüft. Aber so ist natürlich noch viel besser.
Beste Grüsse

Micharius
 

Offline PhilS

  • Administrator
  • Access-Profi
  • *****
  • Beiträge: 338
    • Tipps zu Access, VBA, SQL und Co.
Re: Function für Wert aus Tabelle abfragen
« Antwort #5 am: Juni 18, 2018, 11:22:46 »
und das Ganze geht viel kürzer, wenn man statt der  Dlookup()-Funktion einen Recordset verwenden möchte:
Funktioniert natürlich, aber neben der etwas schlechteren Lesbarkeit stört mich das fehlende .Close für das Recordset doch sehr.
Neues Access 2019 Feature angekündigt: Modern Charts
 

Online DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23340
Re: Function für Wert aus Tabelle abfragen
« Antwort #6 am: Juni 18, 2018, 11:39:54 »
Hallo,
naja, nachdem hier keine Recordset-Variable verwendet wird, ist ein .Close auch nicht anwendbar. Ich denke mal, dass VBA bei End Function selbständig das Recordset "zerstört" und entspr. aufräumt, zumal der Scope auf das Recordset nur innerhalb der Funktion liegt (nicht als "Public" deklariert ist).

Ansonsten stehe ich voll dazu, mit .Close einen mit  einer Variablen referenzierten Recordset auch wieder zu schließen und die Referenz zu "zerstören" (Set Rs = Nothing).