PDA

View Full Version : [access] - salvare una query a run-time


john_revelator
19-11-2007, 20:53
Buona sera a tutti.
Avrei la necessità di aprire una query in visualizzazione foglio dati ma non so a priori come sarà costituita visto che i parametri vengono inseriti tramite form.

So che per aprire la query si utilizza questa sintassi

DoCmd.OpenQuery "nome_query", acViewNormal, acReadOnly

però l'oggetto, nel mio caso la query, deve essere già esistente.

Supponendo, per semplificare al massimo la cosa, che la mia query sia

strSQL = "select * from tabella"

come faccio da questa query a salvare a run-time la query, aprirla e in seguito distruggerla?

Ciao e grazie.

MarcoGG
21-11-2007, 09:39
So che per aprire la query si utilizza questa sintassi

DoCmd.OpenQuery "nome_query", acViewNormal, acReadOnly

però l'oggetto, nel mio caso la query, deve essere già esistente.


Si può fare, ma abbandonerei decisamente il semplice DoCmd, con il quale non arriveresti molto lontano...

Comunque, partiamo dal presupposto che tu voglia fare il tutto da una Form VBA direttamente in Access ( se parli di DoCmd immagino sia proprio così )...

Entra nel tuo DB, apri l'editor VBA e da Strumenti / Riferimenti controlla che sia attivo il Rif. alle librerie "Microsoft DAO 3.6 Object Library" ( 3.6 se usi Office 2003, versione a parte sono quelle lì ).

Intanto dai un'occhiata al codice VBA per la creazione/eliminazione di una Stored Query generica... Poi vediamo...
Puoi creare una nuova maschera in Access, usare un semplice pulsante ed associare al Click la routine "PROVA_DAO"... :


Public Sub PROVA_DAO()

Dim MioDB As DAO.Database
Dim MiaQuery As DAO.QueryDef

Dim strSQL As String
strSQL = "SELECT * FROM Nome_Tabella"

Dim DBPath As String
DBPath = CurrentDb.Name

Set MioDB = DBEngine.OpenDatabase(DBPath)

Dim q As DAO.QueryDef
For Each q In MioDB.QueryDefs
MsgBox q.Name
If q.Name = "Nome_Nuova_Query" Then
MioDB.QueryDefs.Delete (q.Name)
End If
Next

Set MiaQuery = MioDB.CreateQueryDef("Nome_Nuova_Query", strSQL)
MioDB.Close

End Sub


;)

LubertoMario
21-06-2011, 00:05
saluto tutti
e' la prima volta che mi collego a questo forum
io ho risolto cosi' la creazione e salvataggio a
run-time di una query nel DB di Access

Public Sub £CreaQuery(ByVal §Nome As String)
Set £Dbs = OpenDatabase(......................)
£Dbs.QueryDefs.Refresh
On Error Resume Next
Set qryDef = £Dbs.QueryDefs(§Nome)
If (3265 = Err) Then
Set qryDef = £Dbs.CreateQueryDef(§Nome)
£Dbs.QueryDefs.Refresh
Err = 0
End If
On Error GoTo 0
qryDef.SQL = §strSql
qryDef.Close
End Sub

la cosa funziona, a parte il fatto che la query
creata diventa visibile ad access dopo qualche secondo
e anche al vb6 non diventa immediatamente disponibile;
me ne sono reso conto perche' ricevo l' errore di tabella/query non trovata; controllare nome e riprovare; se pero' faccio il debug e
poi F8 per rieseguire l' operazione l' errore scompare;
la mia domanda e': e' possibile che il VB6 aspetti fin tanto che
la query sia disponibile e come si fa a saperlo;
io ho provato con l' istruzione DOEVENTS ma senza
risultato.
ringrazio anticipatamente chiunque vorra' darmi una mano

l