collapse

* Benutzer Info

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

* Wer ist Online

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

* Forenstatistik

  • stats Mitglieder insgesamt: 14129
  • stats Beiträge insgesamt: 68347
  • stats Themen insgesamt: 9206
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: VBA SQL Aufruf einer Abfrage mit Parameter  (Gelesen 118 mal)

Offline Micharius

  • Access-User
  • *
  • Beiträge: 92
VBA SQL Aufruf einer Abfrage mit Parameter
« am: November 30, 2018, 13:21:08 »
Hallo zusammen

Mit diesem Versuchscode kann ich eine QRY mit einem Parameter 0 oder 1 aufrufen:

Sub testeDAOmitParameter()
Dim dbs As dao.Database
    Dim qdf As dao.QueryDef
    Dim rst As dao.Recordset
   
    Set dbs = CurrentDb
   

    Set qdf = dbs.QueryDefs("qrytest")
   
    qdf.Parameters("WahrOderFalsch") = 0

       
    Set rst = qdf.OpenRecordset()
       
Debug.Print rst.Fields("KunName").Value

rst.Close

End Sub
 
Das funktioniert schon mal gut. Als Endprodukt würde ich aber gerne nicht bloss eine QRY aufrufen, sondern einen SQL Code mit Variable, à la

SELECT * FROM qrytest WHERE ZuoDosArtDosIDRef = " & lngDosID
Das klappt aber bis jetzt nicht, Set qdf = dbs.QueryDefs akzeptiert keinen SQL Code. Andere Ansätze aus dem Netz haben mir bis jetzt nicht weitergeholfen.

Hintergrundidee ist, dass ich mit dem fertigen Code über dieselbe Abfrage einmal Artikel anzeigen könnte, welche als optional markiert wurden oder eben nicht.

Für eure Hilfe im voraus ein Danke.

Beste Grüsse

Micharius
 

Offline PhilS

  • Global Moderator
  • Access-Profi
  • *****
  • Beiträge: 389
    • Tipps zu Access, VBA, SQL und Co.
Re: VBA SQL Aufruf einer Abfrage mit Parameter
« Antwort #1 am: November 30, 2018, 13:42:57 »
Zitat
Als Endprodukt würde ich aber gerne nicht bloss eine QRY aufrufen, sondern einen SQL Code mit Variable, à la
Du kannst der SQL-Property eines QueryDef-Objektes dein SQL zuweisen.
Aber warum? Der Sinn von Parametern ist doch genau, dass du verschiedene Werte übergeben kannst, ohne den SQL-Text der Abfrage zu ändern.

Neues Access 2019 Feature angekündigt: Modern Charts
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23509
Re: VBA SQL Aufruf einer Abfrage mit Parameter
« Antwort #2 am: November 30, 2018, 15:07:14 »
Hallo,

Zitat
Set qdf = dbs.QueryDefs akzeptiert keinen SQL Code

das stimmt, aber so wird er akzeptiert:

.
.
.
Set qdf = dbs.QueryDefs("qryDeineGenialeAbfrage")
qdf.SQL = "SELECT * FROM qrytest WHERE ZuoDosArtDosIDRef = " & lngDosID
.
.


Offline Micharius

  • Access-User
  • *
  • Beiträge: 92
Re: VBA SQL Aufruf einer Abfrage mit Parameter
« Antwort #3 am: November 30, 2018, 16:41:05 »
Hallo zusammen

Vielen Dank schon mal!

@PhilS
Zitat
Aber warum? Der Sinn von Parametern ist doch genau, dass du verschiedene Werte übergeben kannst, ohne den SQL-Text der Abfrage zu ändern.

Da hast du natürlich recht. Der Fall ist etwas kompliziert zu erklären, aber in diesem Fall schien es mir eine elegante Lösung. Momentan bin ich mir aber nicht mehr so sicher...

@DF6GL
Habe es so ausprobiert:

Sub testeDAOmitParameter()
Dim dbs As dao.Database
Dim qdf As dao.QueryDef
Dim rst As dao.Recordset

Dim lngdosID As Long

lngdosID = 5
   
    Set dbs = CurrentDb
   

    Set qdf = dbs.QueryDefs("qryParametertestErzeugt")
    qdf.SQL = "SELECT * FROM qryParametertest WHERE ZuoDosArtDosIDRef = " & lngdosID
    qdf.Parameters("WahrOderFalsch") = 1

       
    Set rst = qdf.OpenRecordset()
       
Debug.Print rst.Fields("ZuoDosArtID").Value

End Sub

Das funktioniert, solange eine bestehende Abfrage qryParametertestErzeugt existiert. Die wird mit der Sub überschrieben mit dem generierten SQL Code, in diesem Fall:

SELECT *
FROM qryParametertest
WHERE (((qryParametertest.[ZuoDosArtDosIDRef])=5));

Muss das auf jeden Fall so gemacht werden, sprich die Erzeugung / Überschreibung einer "neuen" Abfrage mit Übergabe des Parameters? Naiv wie ich bin dachte ich, einfach den Parameter anhängen zu können, und dann weiter im Code fahren zu können...

Grüsse

Micharius
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1427
Re: VBA SQL Aufruf einer Abfrage mit Parameter
« Antwort #4 am: November 30, 2018, 18:04:39 »
Wenn es Dich glücklich macht, den Abfragetext in VBA zuzuweisen, dann erstelle doch gleich eine temporäre Abfrage.
Code: Visual Basic
   With dbs.CreateQueryDef(vbNullString, "SELECT ... WHERE ZuoDosArtDosIDRef = [@ZuoDosArtDosIDRef]")
      .Parameters("@ZuoDosArtDosIDRef") = lngdosID
      With .OpenRecordSet()
         'mach' etwas Gescheites
        .Close
      End With
   End With
« Letzte Änderung: Dezember 01, 2018, 14:54:13 von Lachtaube »
Grüße von der (⌒▽⌒)
 

Offline PhilS

  • Global Moderator
  • Access-Profi
  • *****
  • Beiträge: 389
    • Tipps zu Access, VBA, SQL und Co.
Re: VBA SQL Aufruf einer Abfrage mit Parameter
« Antwort #5 am: Dezember 01, 2018, 07:07:07 »
Da hast du natürlich recht. Der Fall ist etwas kompliziert zu erklären, aber in diesem Fall schien es mir eine elegante Lösung. Momentan bin ich mir aber nicht mehr so sicher...
+1 für deine Unsicherheit.
Den rein technischen Teil der Frage hat Lachtaube bereits komplett beantwortet.

Ich würde hinterfragen, ob dein Vorgehen so grundsätzlich Sinn macht. Der Sinn einer Parameterabfrage ist, verschiedene Parameter an ein immer gleiches SQL-Statement übergeben zu können. - Naheliegend. - Wesentlicher Vorteil ist die Trennung von VBA- und SQL-Code.
Wenn du das SQL aus dem VBA-Code heraus immer wieder änderst, macht eine Parameterabfrage eher wenig Sinn, denn du könntest genauso gut auch direkt das SQL ausführen.
Neues Access 2019 Feature angekündigt: Modern Charts
 

Offline Micharius

  • Access-User
  • *
  • Beiträge: 92
Re: VBA SQL Aufruf einer Abfrage mit Parameter
« Antwort #6 am: Dezember 05, 2018, 16:43:31 »
Hi zusammen

Danke für eure Hilfe - ich bin glaub auf gutem Weg jetzt!

Grüsse

Micharius
 

 

Abfrage für Terminüberschneidungen und visuelle Darstellung

Begonnen von centaurusBoard Tabelle/Abfrage

Antworten: 3
Aufrufe: 6382
Letzter Beitrag Januar 21, 2011, 21:30:14
von cy_one_1
Datenerfassung mit Abfrage

Begonnen von Daniel-GSBoard Tabelle/Abfrage

Antworten: 2
Aufrufe: 5542
Letzter Beitrag Mai 05, 2010, 22:52:18
von oma
SQL Abfrage DELETE rückgängig machen??

Begonnen von hmfmartinBoard Tabelle/Abfrage

Antworten: 1
Aufrufe: 7329
Letzter Beitrag Mai 08, 2010, 19:18:08
von MzKlMu
Datensatz an einer bestimmten Position einfügen

Begonnen von jo-dieBoard Tabelle/Abfrage

Antworten: 6
Aufrufe: 6249
Letzter Beitrag Mai 13, 2010, 22:43:15
von oma
6 Mio Datensätze bei Abfrage

Begonnen von JohannaBoard Tabelle/Abfrage

Antworten: 11
Aufrufe: 8888
Letzter Beitrag Mai 19, 2010, 12:29:47
von Wurliwurm