Newsgroup: it.comp.lang.visual-basic
Titolo: query

Salve, problemino sulle query:
ho n tabelle in un file Access relazionate tra di loro, ho creato una query
che selezionasse solo alcuni record, ora perň la mia domanda č: come faccio
a leggere questa query???
Ho provato a copiare il comando SQL di access in VB ma poi mi rimane il
problema....
Dim DB as Database
Dim rec as Recordset
Dim myID
set DB=Opendatabase("C:\XXX.mdb")
set rec=DB.openrecordset("SELECT OrdiniProdRighe.ID, Articoli.ID,
DisBasePadre.ID, DisBaseFiglio.ID, Variante.ID
FROM ((Articoli INNER JOIN OrdiniProdRighe ON Articoli.codice =
OrdiniProdRighe.cod_art) INNER JOIN Variante ON Articoli.codice =
Variante.cod_art) INNER JOIN (DisBasePadre INNER JOIN DisBaseFiglio ON
DisBasePadre.codicepadre = DisBaseFiglio.codicepadre) ON Articoli.codice =
DisBasePadre.codicepadre")
???? come faccio a prendere un determinato campo di questa query ????
es.
myID =rec!xxxxx  (cosa devo mettere al posto di xxxxx???)
Spero di essermi spiegato bene.
Grazie 1000.
Paolo.

 myID =rec!xxxxx  (cosa devo mettere al posto di xxxxx???)
al posto di xxxxx devi mettere il nome del campo.
Almeno con ADO.
Prova oppure rec("NomeCampo").value


 ha scritto nel
messaggio news:91ntlf$2056$1...@stargate1.inet.it...

è il NomeCampo che vorrei sapere!
es. tabella           campo
        articoli            codice
        ordini             numero
articoli!codice
ordini!numero
es2. query             campo
        Art_Ord            ?????
Art_Ord!xxxxx


 ordini!numero
[end cut]
la select dovrebbe diventare :
set rec=DB.openrecordset("SELECT OrdiniProdRighe.ID, Articoli.ID,
Articoli.Codice, Ordini.Numero ... ecc
Ciao, spero sia stato utile

Facciamo un esempietto stupido, questo è la tua tabella:
	|_ID_|_Nome_|
	|_01_|_pippo_|
	|_02_|_pluto_.|
	.........
	........
	........
Ora non ho letto bene quella che è la tua query ma ammettiamo che tu
lanci qualcosa del genere:
	SELECT nome FROM tabella WHERE ID = 01
se vuoi prendere un unico campo, quello che devi fare è semplicemente:
    Dim Connessione As adodb.connection
    Dim Recset As adodb.Recordset
    Dim strNome As String
    Dim strSql As String
 
    strSql = "SELECT nome FROM tabella WHERE ID = 01"
 
    Set Connessione = New adodb.connection
Connessione.connectionstring = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
	                               Password="""";Data Source=" & _
                                            path del tuo file
 
    Set Recset = New adodb.Recordset
    Recset.ActiveConnection = Connessione
    Recset.Source = strSql
    Recset.CursorType = adOpenForwardOnly
    Recset.Open
 
    'dove "nome" è il campo della tua tabella, quello che specifichi
    'nella quey
    strNome = Recset("Nome")
 
    Recset.Close
    Set Recset = Nothing
    Connessione.Close
    Set Connessione = Nothing
Se invece tu vuoi tutta la colonna dei nomi, e non uno solo, allora
puoi fare in questo modo:
    Dim Connessione As adodb.connection
    Dim Recset As adodb.Recordset
    Dim strSql As String
 
    strSql = "SELECT nome FROM tabella"
 
    Set Connessione = New adodb.connection
Connessione.connectionstring = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
	                               Password="""";Data Source=" & _
                                            path del tuo file
 
    Set Recset = New adodb.Recordset
    Recset.ActiveConnection = Connessione
    Recset.Source = strSql
    Recset.CursorType = adOpenForwardOnly
    Recset.Open
 
    Do While Not Recset.EOF
         Debug.Print = Recset("nome")
         Recset.MoveNext
    Loop
 
    Recset.Close
    Set Recset = Nothing
    Connessione.Close
    Set Connessione = Nothing
Nel primo modo puoi caricare in una variabile, un area di testo o dove
vuoi il risultato della qtua query, un unico nome, in questo caso
(infatti nella stringa sql c'è una condizione di where).
Nel secondo caso invece, carichi tutto in un recordset, ossia tutti i
nomi presenti nella tabella "nome" e li metti dove vuoi.
Regola generale, per prendere da un recordset quello che è il
risultato di una query puoi fare:
    variabile = tuo_recordset("campo della tabella del db")
Logicamente se l' sql ti restituisce più campi, ad esempio nome e
cognome, per averli entrambi basta scrivere:
    nome = tuo_recordset("nome")
    cognome = tuo_recordset("cognome")
Un consiglio, invce che utilizzate il punto esclamativo "!" per
prendere qualcosa da un recordset, usa proprio il nome della tabella
come ho scritto sopra, perchè? Perchè il punto esclamativo è il
formato di access, mentre l' altro ti va bene sempre e sei sicuro di
non avere problemi; puoi addirittura usare un indicizzazione ma te la
risparmio perchè mi sembra una cosa inutile (ossia, sei sicurissimo
che prendi campi giusti ma...non l' ho mai visto usare da nessuno :) )
Saluti...

 ha scritto nel messaggio
news:91nvi5$4v6b3$1...@ID-65580.news.dfncis.de...

quello che mi interessa perň č la seconda parte!
es2. query             campo
        Art_Ord            ?????
Art_Ord!xxxxx
Io vorrei sapere come faccio ad accedere ad una query che prende i dati da 2
tabelle diverse.
Grazie cmq x la risposta.
Paolo.


Vediamo se ho capito...tu metti in joyn due tabbele (facciamola
semplice) e prendi due campi, uno da una parte e uno da un altra, la
domanda č:
come mi divido le due colonne nel recordset esendo appunto due colonne
su due tabelle diverse??
Ho capito qualcosa?

Se intendi dire i nomi dei campi nella query, dovrebbero chiamarsi proprio
come quelli originali.
Se tu fai "SELECT Tab1.Id, Tab2.Codice [...]"
in teoria dovresti poter fare
rsQuery!Tab1.Id
rsQuery!Tab2.Codice
o addirittura
rsQuery!Id
rsQuery!Codice

 Saluti...
L'indicizzazione l'ho usata una volta, avevo tanti campi da aggiornare su un
form, li conmpilavo con un semplice For.. Next, veloce ma pericolosa perchč
se cambia la struttura della tabella puoi avere risulati imprevisti.
es.
sub AggiornaForm()
    dim intCont as integer
    for intCont=0 to 50
        Text(intCont)=recDati.Fields(intCont)
    next intCont
end sub
--
Ciao
 *<:-)
VB

 myID =rec!xxxxx  (cosa devo mettere al posto di xxxxx???)
Il tuo problema č che tutti i campi si chiamano ID, perciň puoi leggere i
record cosě:
myID1 = rec.Fields(0)
recID2 = rec.Fields(1)
.....
oppure modifichi la query:
SELECT OrdiniProdRighe.ID as ID1, Articoli.ID as ID2,
DisBasePadre.ID as ID3, DisBaseFiglio.ID as ID4, Variante.ID as ID5
FROM ((Articoli INNER JOIN OrdiniProdRighe ON Articoli.codice =
OrdiniProdRighe.cod_art) INNER JOIN Variante ON Articoli.codice =
Variante.cod_art) INNER JOIN (DisBasePadre INNER JOIN DisBaseFiglio ON
DisBasePadre.codicepadre = DisBaseFiglio.codicepadre) ON Articoli.codice =
DisBasePadre.codicepadre
e la leggi cosě
myId1 = rec!ID1
myId2 = rec!ID2
....
Ciao, Marco

rsQuery!Codice
non è tanto addirittura, ma normale :))
Saluti...