Newsgroup: it.comp.appl.access
Titolo: aprire mostrare record da sql di selezione

salve
 
se ho una stringa sql (di tipo selezione)
 
per utilizzare 
docmd.openquery x
 
sono obbligato a creare una query ?
 
non c'e' un modo per visualizzare i record 
 
Grazie

Dopo dura riflessione, pfm ha scritto :

Ciao pfm,
 
credo che l'unico modo sia di creare una Query e poi cancellarla.
Io uso le funzioni che trovi sotto.
Si utilizzano così:
 
    Dim StringaSQL As String
    StringaSQL = "SELECT .....;"
 
    Call ApriQueryTemporanea("MiaQueryTemp", StringaSQL)
 
Alla fine (magari in chiusura maschera) usi:
 
    Call EliminaQuery("MiaQueryTemp")
 
 
Queste sono le 3 routine:
 
Public Sub ApriQueryTemporanea(NomeQuery As String, StringaSQL As 
String)
    'Creo una query Temporanea
    'Dopo dovrai cancellarla con la Sub EliminaQuery (vedi sotto)
    'Funzioni prese da qui:
 
'
http://stackoverflow.com/questions/17328092/how-to-display-access-query-results-without-having-to-create-temporary-query
 
 
    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
 
    Set db = CurrentDb
    If Not QueryExists(NomeQuery) Then
        Set qdf = db.CreateQueryDef(NomeQuery)
    Else
        Set qdf = db.QueryDefs(NomeQuery)
    End If
    qdf.SQL = StringaSQL
    Set qdf = Nothing
    Set db = Nothing
 
    DoCmd.OpenQuery NomeQuery
 
End Sub
 
Public Sub EliminaQuery(NomeQuery As String)
    'se ho creato la query temporanea, ora la cancello
    If QueryExists(NomeQuery) Then
        DoCmd.DeleteObject acQuery, NomeQuery
    End If
End Sub
 
Public Function QueryExists(ByVal pName As String) As Boolean
    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim blnReturn As Boolean
    Dim strMsg As String
 
On Error GoTo ErrorHandler
 
    blnReturn = False ' make it explicit
    Set db = CurrentDb
    Set qdf = db.QueryDefs(pName)
    blnReturn = True
 
ExitHere:
    Set qdf = Nothing
    Set db = Nothing
    QueryExists = blnReturn
    Exit Function
 
ErrorHandler:
    Select Case Err.Number
    Case 3265 ' Item not found in this collection.
    Case Else
        strMsg = "Error " & Err.Number & " (" & Err.Description _
            & ") in procedure QueryExists"
        MsgBox strMsg
    End Select
    GoTo ExitHere
 
End Function

After serious thinking pfm wrote :

No, non c'è?
 
Questa la crea:
============================
Private Sub Command1_Click()
Dim qDef As QueryDef, SQL As String
SQL = "SELECT Assenze.* FROM Assenze;"
On Error Resume Next
DoCmd.DeleteObject acQuery, "QueryName"
On Error GoTo 0
Set qDef = CurrentDb.CreateQueryDef("QueryName", SQL)
DoCmd.OpenQuery "QueryName"
End Sub
=============================
 
 
Questa la distrugge:
=============================
On Error Resume Next
DoCmd.DeleteObject acQuery, "QueryName"
On Error GoTo 0
=============================
 
 
Bruno


immagino tu crei una SELECT per visualizzare dei record in una maschera. Se così fosse non hai bisogno di crearla. Basta la stringa SQL


ringrazio ma purtroppo non sempre ho la possibilità di utilizzare una maschera, perche' precedo un filtro dinamico che l'utente utilizza per definire i record da vedere, ma anche i campi e quindi preferisco utilizzare solo docmd.openquery
 

 ringrazio ma purtroppo non sempre ho la possibilità di utilizzare una maschera, perche' precedo un filtro dinamico che l'utente utilizza per definire i record da vedere, ma anche i campi e quindi preferisco utilizzare solo docmd.openquery
 
Anche se prima non so i campi non apro mai una query per l'utente. 
Invece cambio la stringa SQL di una query dummy salvata e apro una 
sottomaschera per la quale la query è l'origine oggetto.
 
-- 
Ciao
Karl
*********
http://www.AccessDevCon.com
 
Access FAQ: 
http://www.donkarl.com/it