Ci sono molti metodi per riferirsi ad una query in VBA.
Dipende cosa vuoi fare. p.e.
Per leggere o modificare la struttura, la stringa SQL ecc. di una query,
puoi usare l'oggetto QueryDef.
Per leggere o modficare dati puoi usare un Recordset di DAO.
> Per esempio se volessi aprire una qufry "prova" come la indico nel
> c6dice?
p.e.
DoCmd.OpenQuery "prova"
Per dettagli ed esempi cerca con queste parola di chiave nel <F1>
dell'editore di VBA.
> Mi sapreste indicare un tutorial con cui imparare la sintassi e i
> comandi di vba?
No.
--
Ciao
Karl
*********
Access FAQ: www.donkarl.com/it
quindi, volendo indicare un campo di una qxery, devo scrivere:
Query!Nomequery!Nomecampo
giusto?
Grazie per la disponibilità
> quindi, volendo indicare un campo di una qxery, devo scrivere:
> Query!Nomequery!Nomecampo
> giusto?
> Grazie per la disponibilità
Se conosci il nome della query quale risulta dalla finestra database:
--------------------------------------------------------------
Dim RS As Recordset
Set RS = CurrentDb.OpenRecordset("Query17", dbOpenDynaset)
RS.Move 2
MsgBox RS![Comune]
-------------------------------------------------------------
Se la query te la crei on the fly:
--------------------------------------------------------
Dim SQL As String, RS As Recordset
SQL = "SELECT Comuni.Comune, Comuni.Provincia, Comuni.CAP FROM Comuni;"
Set RS = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)
RS.Move 2
MsgBox RS![Comune]
---------------------------------------------------------
Attenzione che Move.2 non va al record 2, ti sposta avanti di 2!
Bruno
Dove hai letto questa sintassi non esistente?
Puoi usare o
DLookup("NomeCampo","NomeQuery")
o come già scritto, un recordset di DAO, che di solito è più veloce.
Allora,
forse è meglio andare sul concreto.
Ho il seguente codice:
Private Sub cmdPrint_Click()
'Print customer slip for current customer.
Dim appWord As Word.Application
Dim doc As Word.Document
'Avoid error 429, when Word isn't open.
On Error Resume Next
Err.Clear
'Set appWord object variable to running instance of Word.
Set appWord = GetObject(, "Word.Application")
If Err.Number <> 0 Then
'If Word isn't open, create a new instance of Word.
Set appWord = New Word.Application
End If
Set doc = appWord.Documents.Open("C:\WordForms\CustomerSlip.doc", ,
True)
With doc
.FormFields("fldCustomerID").Result = Me!CustomerID
.FormFields("fldCompanyName").Result = Me!CompanyName
.FormFields("fldContactName").Result = Me!ContactName
.FormFields("fldContactTitle").Result = Me!ContactTitle
.FormFields("fldAddress").Result = Me!Address
.FormFields("fldCity").Result = Me!City
.FormFields("fldRegion").Result = Me!Region
.FormFields("fldPostalCode").Result = Me!PostalCode
.FormFields("fldCountry").Result = Me!Country
.FormFields("fldPhone").Result = Me!Phone
.FormFields("fldFax").Result = Me!Fax
.Visible = True
.Activate
End With
Set doc = Nothing
Set appWord = Nothing
Exit Sub
errHandler:
MsgBox Err.Number & ": " & Err.Description
End Sub
che serve a copiare alcuni campi di una maschera all'interno di un
documento Word.
Se io volessi indicare al codice di prendere il campo, anzichè dalla
maschera corrente, da una query precedentemente definita, per es.
query1, come dovrei modificare la riga seguente:
.FormFields("fldCustomerID").Result = Me!CustomerID
al posto di Me!CustomerID devo mettere Query!query1!campochevoglio?
Vi ringrazio per la pazienza.
Saluti.
Certamente.
> Ho il seguente codice:
> ...
> .FormFields("fldCustomerID").Result = Me!CustomerID
> .FormFields("fldCompanyName").Result = Me!CompanyName
> .FormFields("fldContactName").Result = Me!ContactName
> .FormFields("fldContactTitle").Result = Me!ContactTitle
> ....
> che serve a copiare alcuni campi di una maschera all'interno di un
> documento Word.
> Se io volessi indicare al codice di prendere il campo, anzichč dalla
> maschera corrente, da una query precedentemente definita, per es.
> query1, come dovrei modificare la riga seguente:
>
> .FormFields("fldCustomerID").Result = Me!CustomerID
>
> al posto di Me!CustomerID devo mettere Query!query1!campochevoglio?
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = Currentdb
Set rs = db.OpenRecordset("Query1", dbopendynaset)
.FormFields("fldCustomerID").Result = rs!CustomerID
.FormFields("fldCompanyName").Result = rs!CompanyName
ecc.
Certo, se la tua query non ha un solo record, devi prima andare
al record desiderato o filtrarlo. Anche in questo caso sarebbe
"meglio andare sul concreto", cioč rivelare i criteri, nome e
tipo dei campi, nome della query. ecc.
Grazie Karl,
a solo titolo di studio, potresti gentilmente spiegarmi cosa
significano le righe:
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("Query1", dbopendynaset)
in particolare DAO, OpenRecordset e dbopendynaset?
Te ne sono grato.
Un saluto
Remigio
Usa la guida in linea come tutti programmatori!
P.e. puoi copiare il codice in un modulo, mettere il cursore in
una parola come "OpenRecordset" e premere <F1>.
Poi la guida ti d� un romanzo di spiegazioni ed esempi.
Grazie.
Un saluto.