Avatar billede stry Nybegynder
04. april 2004 - 12:38 Der er 8 kommentarer og
2 løsninger

Opret forespørgsel i VBA

Hvordan opretter og gemmer jeg en forespørgsel i VBA. Jeg har SGL-sætningen så det jeg mangler er at gemme den som forespørgsel. Navnet skal ikke være dynamisk så det kan bare indgå i koden og en evt. eksisterende forespørgsel skal overskrives uden prompt'ning

Min SQL er som følger:

SELECT tbl_Med_Akk_Link.MedarbejderIdRef, tbl_Med_Akk_Link.AkkordnrRef, tbl_Med_Akk_Link.Dato, tbl_Med_Akk_Link.Timer
FROM tbl_Med_Akk_Link
WHERE (((tbl_Med_Akk_Link.Dato) Between #3/21/2004# And #4/3/2004#));
Avatar billede terry Ekspert
04. april 2004 - 12:57 #1
Example from Access

CreateQueryDef Method Example

This example uses the CreateQueryDef method to create and execute both a temporary and a permanent QueryDef. The GetrstTemp function is required for this procedure to run.

Sub CreateQueryDefX()

    Dim dbsNorthwind As Database
    Dim qdfTemp As QueryDef
    Dim qdfNew As QueryDef

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    With dbsNorthwind
        ' Create temporary QueryDef.
        Set qdfTemp = .CreateQueryDef("", _
            "SELECT * FROM Employees")
        ' Open Recordset and print report.
        GetrstTemp qdfTemp
        ' Create permanent QueryDef.
        Set qdfNew = .CreateQueryDef("NewQueryDef", _
            "SELECT * FROM Categories")
        ' Open Recordset and print report.
        GetrstTemp qdfNew
        ' Delete new QueryDef because this is a demonstration.
        .QueryDefs.Delete qdfNew.Name
        .Close
    End With

End Sub

Function GetrstTemp(qdfTemp As QueryDef)

    Dim rstTemp As Recordset

    With qdfTemp
        Debug.Print .Name
        Debug.Print "  " & .SQL
        ' Open Recordset from QueryDef.
        Set rstTemp = .OpenRecordset(dbOpenSnapshot)

        With rstTemp
            ' Populate Recordset and print number of records.
            .MoveLast
            Debug.Print "  Number of records = " & _
                .RecordCount
            Debug.Print
            .Close
        End With

    End With

End Function
Avatar billede terry Ekspert
04. april 2004 - 13:00 #2
simple example

currentdb.QueryDefs("NewQuery").SQL = "SELECT ......"
Avatar billede stry Nybegynder
04. april 2004 - 13:16 #3
>>Terry
Jeg fandt denne her og den virker men giver fejl når forespørgelsen eksisterer i forvejen, kan det løses?:

Sub NewQuery()
    Dim dbs As Database, qdf As QueryDef, strSQL As String

    ' Return reference to current database.
    Set dbs = CurrentDb
    strSQL = "SELECT tbl_Med_Akk_Link.MedarbejderIdRef, tbl_Med_Akk_Link.AkkordnrRef, tbl_Med_Akk_Link.Dato, tbl_Med_Akk_Link.Timer  FROM tbl_Med_Akk_Link WHERE (((tbl_Med_Akk_Link.Dato) Between #3/21/2004# And #4/3/2004#));"

    ' Create new query.
    Set qdf = dbs.CreateQueryDef("qry_Periode_til_Krydstab", strSQL)
    DoCmd.OpenQuery qdf.Name
    Set dbs = Nothing
End Sub
Avatar billede terry Ekspert
04. april 2004 - 13:28 #4
You need to delete it first then!
Avatar billede stry Nybegynder
04. april 2004 - 13:32 #5
Ja det var også min tanke, jeg kan bare ikke lige få det implementeret i koden, har du et forslag?
Avatar billede terry Ekspert
04. april 2004 - 13:32 #6
On error Resume Next

currentdb.QueryDefs("qry_Periode_til_Krydstab").delete
Avatar billede stry Nybegynder
04. april 2004 - 13:38 #7
Den giver fejl:
"Method or data member not found"
og så er .Delete markeret?
Avatar billede terry Ekspert
04. april 2004 - 13:45 #8
CurrentDb.QueryDefs.Delete "qry_Periode_til_Krydstab"
Avatar billede stry Nybegynder
04. april 2004 - 13:49 #9
Så var den der :-)
Tak for hjælpen.
Avatar billede terry Ekspert
04. april 2004 - 14:04 #10
selv tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester