Office: (Office 2019) TempVars

Helfe beim Thema TempVars in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo! Ich habe von den TempVars gelesen, komme aber nicht ganz klar mit der Anwendung. 1. So steht in der Hilfe das diese Variablen per... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Anna Karl, 4. März 2025.

  1. TempVars


    Hallo!
    Ich habe von den TempVars gelesen, komme aber nicht ganz klar mit der Anwendung.
    1. So steht in der Hilfe das diese Variablen per Tempvars.Add(Name, Wert) erstellt werden, in meinem Access verlangt er ein = Zeichen (TempVars!Name=Wert)
    2. ich habe sie erfolgreich in einer Abfrage verwenden können, ABER mir kommt vor, bei einem späteren Programmstart (z.B. mit erneuter Verknüpfung mit der Backend, sind diese Tempvars nicht mehr vorhanden, obwohl im VBA-Listing nichts geändert wurde.
    Kann mir jemand die TempVars mit seinen Eigenschaften erklären. Die MS Hilfe ist leider keine!!
    Danke Euch
    LG Anna
     
    Anna Karl, 4. März 2025
    #1
  2. andyfau
    andyfau Erfahrener User
    Als ich diese Diskussion ( https://www.access-o-mania.de/forum/index.php?topic=21575.15 ) gelesen hatte, beschloss ich keine TempVars zu verwenden. Den einzigen Vorteil, den ich sehe, nämlich, dass man sie auch in Makros verwenden kann, sehe ich eher als Nachteil. Macros und VBA in einer Anwendung zu vermischen halte ich für suboptimal, weil irgendwann die Übersicht verloren geht. Dann lieber die Makros in VBA umwandeln um alles unter einem Dach zu haben.
     
    andyfau, 4. März 2025
    #2
    1 Person gefällt das.
  3. OK, dann werde ich mich von den TempVars verabschieden, ich hatte sie in den Qry's als Kriterium probiert und es hat (leider nicht immer) funktioniert.
    Welche Alternative gäbe es wenn ich Kriterien aus dem VBA in die Abfrage verwenden will/soll?
    LG AK
     
    Anna Karl, 5. März 2025
    #3
  4. andyfau
    andyfau Erfahrener User

    TempVars

    Es gibt mehere Möglichkeiten Variablen als Kriterien/Parameter an Abfragen zu übergeben.

    Wenn eine Abfrage aus einem Formular aufgerufen wird und man ein Feld des Formulars als Kriterium übergeben möchte, kann man das Formularfeld direkt referenzieren:
    Code:
    =Formulare!Formularname!MeinFeld
    Eine interessante Möglichkeit sind Querydefs (Parameterabfragen). Dabei öffnet man die Query innerhalb von VBA übergibt die Parameter und erhält das Recordset zur weiteren Auswertung.

    Die nächste Möglichkeit ist die direkte Verwendung von SQL-Strings, die dann mit Execute.... ausgeführt werden.

    Es führt aber hier zu weit, das von Grund auf zu erklären. Da ist Lesen und Probieren angesagt.
     
    andyfau, 5. März 2025
    #4
  5. Es ist mir bewußt, dass das Forum nicht für umfassende Erklärungen da ist. Danke für die Hinweise, jetzt weiß ich wenigstens nach was ich suchen muß. Die Querydefs kannte ich noch nicht. SQL-Strings und direkt Felder aus Formularen habe ich bereits probiert. Bezeichnungsfeld.Caption sind aber nicht geeignet.
    Danke für Deine Unterstützung
    Anna
     
    Anna Karl, 6. März 2025
    #5
  6. andyfau
    andyfau Erfahrener User
    Ich wollte hier nicht den Oberlehrer spielen, sorry. Was und wie wolltest Du denn mit Bezeichnugsfeldern als Parameter machen?
    Wobei, bei Querydefs ist es im Prinzip egal wo man die Parameter herholt.
    Man liest das durch Parameter gefilterte Receordset sequentiell durch und verarbeitet es Satz für Satz.
    Schau mal hier:

    Para1 und Para2 stehen in den Kriterien der Abfrage in der Form [Para1] und [Para2].

    Code:
    Sub Paraqry()
    Dim db As Database
    Dim qa As QueryDef
    Dim qra As Recordset
     
     Set db = CurrentDb
     Set qa = db.QueryDefs("meineAbfrage")
     qa.Parameters("Para1") = Me.einFormularfeld
     qa.Parameters("Para2") = Me.nocheinFormularfeld
     Set qra = qa.OpenRecordset
     If qra.RecordCount = 0 Then
        GoTo leer
     End If
    
     qra.MoveFirst
     Do Until qra.EOF
          
          'hier den Datensatz auswerten
       
        qra.MoveNext
     Loop
    leer:
     
     Set db = Nothing
     Set qa = Nothing
     Set qra = Nothing
    End Sub
     
    andyfau, 6. März 2025
    #6
  7. Doming
    Doming Erfahrener User
    Moin Andyfau,

    Man lernt doch nie aus :-)
    Ich hätte es mit
    Code:
    Set qra = db.OpenRecordset("SELECT * FROM meineAbfrage " _
                             & "WHERE Para1 = " & Me.NummerischesFormularfeld _
                             & " AND Para2 = '" & Me.NichtNummerischesFormularfeld & "'")
    gelöst.

    Edit: Wenn ich so drüber nachdenke, wie kannst Du bei Deinem Beispiel die Parameter mit ODER verknüpfen?
    Gruß
    Doming
     
    Doming, 7. März 2025
    #7
  8. andyfau
    andyfau Erfahrener User

    TempVars

    Hallo Doming,
    ich bin nicht so der SQL-Fan. Ewig Stress mit der Syntax, Joins und anderm Zeugs. Ich mag da den Abfrageassistenten (Query by example). Wenn ich dann SQL sehen will, hat er es ja schön generiert. So kann ich mit allen Arten von Abfragen schön testen, ohne jedesmal in den VBA-Code zu müssen und sehe immer sofort das Recordset. Zudem werden die Abfragen vorkompiliert gespeichert. Manche sagen, das wäre schneller. Weiß ich nicht. In jedem Fall kann ich ein und dieselbe Abfrage "zentral" nutzen.
    Zu deiner Frage: Die Verknüpfung der Parameter hängt von der Position in der Kriterienzeile ab: nebeinander in einer Zeile in verschieden Spalten = Und, untereinander in zwei Kriterienzeilen aber derselben Spalte = Oder. Der Querydef ist es dann egal, weil die Parameter zur Laufzeit über ihren Namen zugeordnet werden.
     
    andyfau, 7. März 2025
    #8
  9. Hallo Andyfau,
    Ich hab es nicht als Oberlehrerei empfunden - ich wollte nicht den Eindruck hinterlassen, von Dir/Euch alles erklärt zu bekommen.
    Danke für das Listing - gilt auch an Doming. Zwar fehlt mir noch die Vorstellung, wie das Recordset dann angezeigt wird, aber ich will es auf alle Fälle ausprobieren und daraus lernen....
    LG
    Anna
     
    Anna Karl, 7. März 2025
    #9
  10. andyfau
    andyfau Erfahrener User
    Die SQL-Anweisung von Doming ist kompakt und macht was sie soll.
    Bei einer Querydef kannst Du die Abfrage im Abfrageeditor in Ruhe aufbauen und ihr Verhalten und ihr Ergebnis erproben. Einfach als normale Abfrage. Funktioniert sie und bringt die gewünschten Ergebnisse, nutzt Du die Abfrage einfach in der Prozedur und liest und verarbeitest sie satzweise. Access muss eine Abfrage nicht immer in Datenblattansicht öffnen, sondern, wird ein Recordset-Objekt erzeugt, stehen eben genau diese Datensätze "im Hintergrund" zur Verfügung um sie zu lesen und/oder zu verarbeiten.
     
    andyfau, 7. März 2025
    #10
Thema:

TempVars

Die Seite wird geladen...
  1. TempVars - Similar Threads - TempVars

  2. TempVars und Datenmakro

    in Microsoft Access Hilfe
    TempVars und Datenmakro: Hallo. Könnt Ihr bestätigen, dass man aus Datenmakros (Benannte&Ereignisgesteuert) heraus NICHT auf TempVars zugreifen kann? Die Online Entwickler Hilfe sagt folgendes: von OH Access 2010...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden