Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

riferimento a query in vba

1,577 views
Skip to first unread message

remigio

unread,
Jun 30, 2010, 6:24:49 AM6/30/10
to
ciao,
in vba come si indica il riferimento ad una query?
Per esempio se volessi aprire una qufry "prova" come la indico nel
c6dice?
Mi sapreste indicare un tutorial con cui imparare la sintassi e i
comandi di vba?
Grazie.

Karl Donaubauer

unread,
Jun 30, 2010, 9:13:46 AM6/30/10
to
remigio wrote:
> in vba come si indica il riferimento ad una query?

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


remigio

unread,
Jun 30, 2010, 11:31:27 AM6/30/10
to

quindi, volendo indicare un campo di una qxery, devo scrivere:
Query!Nomequery!Nomecampo
giusto?
Grazie per la disponibilità

Bruno Campanini

unread,
Jun 30, 2010, 1:31:56 PM6/30/10
to
"remigio" <lino...@gmail.com> wrote in message
news:73d05e48-2c5b-4af8...@w12g2000yqj.googlegroups.com...

> 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

Karl Donaubauer

unread,
Jun 30, 2010, 4:56:41 PM6/30/10
to
remigio wrote:

> Karl Donaubauer wrote:
>>> in vba come si indica il riferimento ad una query?
>> ...

>> 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.
>
> quindi, volendo indicare un campo di una qxery, devo scrivere:
> Query!Nomequery!Nomecampo
> ...

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.

remigio

unread,
Jun 30, 2010, 4:58:01 PM6/30/10
to
...
>
> Bruno

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.

Karl Donaubauer

unread,
Jun 30, 2010, 5:14:44 PM6/30/10
to
remigio wrote:
> ...
> forse č meglio andare sul concreto.

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.

remigio

unread,
Jul 1, 2010, 2:34:01 AM7/1/10
to
On 30 Giu, 23:14, "Karl Donaubauer" <NoS...@donkarl.com> wrote:
> remigio wrote:
> > ...
> > forse meglio andare sul concreto.

>
> 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.
>
> --
> Ciao
> Karl
> *********
> Access FAQ:www.donkarl.com/it

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

Karl Donaubauer

unread,
Jul 1, 2010, 5:21:31 AM7/1/10
to
remigio wrote:
> ...

> 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?
> ...

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.

remigio

unread,
Jul 1, 2010, 5:55:35 AM7/1/10
to

Grazie.
Un saluto.

0 new messages