Newsgroup: it.comp.appl.access
Titolo: comprendere il flusso DAO di lettura recordset

ciao a tutti,
gli esempi riportati nell'help di access e nei post trovati sui vari 
gruppi di discussione, mi lasciano un dubbio sulla costruzione di un 
flusso per la lettura di un recordset.
Normalmente io scrivo cosï¿œ
Dim dbs as database
Dim qdf as querydef, qdf2 as querydef
Dim rst as recordset, rst2 as recordset
	set dbs=currentdb
     	Set qdf = dbs.CreateQueryDef("")
     	qdf.Connect = <mia connessione>
     	qdf.SQL = <mia stringa>
     	qdf.ODBCTimeout = <miotimeout>
     	qdf.ReturnsRecords = True
     	Set rst = qdf.OpenRecordset(dbOpenSnapshot)
     	Do While Not rst.EOF
		<<<<<altra lettura>>>>
		rst.movenext
	loop
rst.close
set rst=nothing
set qdf=nothing
set dbs=nothing
ora vi chiedo di sostituire ad <altra lettura> una stringa sql creata 
dinamicamente perchï¿œ dipendente dal primo recordset per leggere un altro 
recordset e le relative istruzioni.
Ovviamente dbs ï¿œ lo stesso, qdf2 devo sempre togliere l'associazione con 
nothing? Se si, devo reimpostare anche timeout e returnrecords ogni volta?
rst2 devo sempre chiuderlo e renderlo nothing?
grazie per le delucidazioni
Nicoletta

 Nicoletta
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim RS2 As DAO.Recordset
    Set DB = CurrentDb
    'PRIMA LETTURA
    Set RS = DB.OpenRecordset("Tabella1")
    RS.MoveFirst
    While RS.EOF = False
        'SECONDA LETTURA
           Set RS = DB.OpenRecordset("Select * From Tabella2 Where IDColl=" 
& RS!ID)
           RS2.MoveFirst
               While RS2.EOF = False
                    ....
               Wend
                RS2.Close
                Set RS2 = Nothing
            RS.MoveNext
    Wend
RS.Close
DB.Close
Set RS = Nothing
Set DB = Nothing 

 IDColl=" & RS!ID)
ovviamente �
Set RS2 = ...


> Ovviamente dbs ï¿œ lo stesso, qdf2 devo sempre togliere l'associazione

ok, penso che nella riga sotto SECONDA LETTURA, RS sia un refuso e ci 
voglia RS2...
Quindi ï¿œ corretto chiudere RS2 e renderlo nothing, perï¿œ volevo saperre 
se fare la stessa cosa anche quando uso un oggetto querydef come nel mio 
esempio (in caso di passthrough) e se comunque questo aprire/chiudere 
non crea problemi in caso di migliaia di cicli da eseguire
Nicoletta

 eseguire
bh� ovviamente l'attivit� rallenta in relazione alla quantit� di cicli che 
hai, e il DB risente delle connessioni che allo stesso fai in termini di 
traffico prodotto... ma se � quel che devi fare bh� "devi" indipendentemente 
dal tempo che impiega...
ma, non per farmi i fatti tuoi, che cavolo devi fare? :D 

   
ho un'anagrafica che nello stesso record ha 10 campi attributo che fanno 
riferimento alla stessa tabella
es.
cognome=arzilli
nome=nicoletta
attrA=abc
attrB=10
attrC=Q
...
attr10=1234
per motivi che non so, tutti i record attributo sono nella stessa 
tabella distinti, oltre che dal codice, dalla 'natura'
es.
natura   codice   descr
A         abc         asldkfsaldkfj
B         10         xcvzxcvzxv
C         Q         aasdasdasd
quindi o metto 10 volte in join la stessa tabella con la mia anagrafica 
oppure ad ogni record anagrafico (es. 500 record) leggo 10 volte la 
tabella creandomi la query dinamicamente
Gli elementi in tabella sono troppi per creare inizialmente un array 
completo e io non vedo alternative alle due sopra
Nicoletta

> in termini di traffico prodotto... ma se � quel che devi fare bh�

ah ecco... fatto bene a chiedere allora, perch� io opterei decisamente per i 
10 join, visto che cmq sono relativamente pochi (fossero stati 40-50 avrei 
capito), ma fortunatamente son pochi e "finiti"... di certo � pi� 
performante che aprire e chiudere da codice "n" records 

   
Ah!, grazie per l'informazione.
Allora metto 10 volte la tabella in relazione e lascio alla query 
principale dell'anagrafica l'estrazione?
Cavolo, in realtï¿œ ï¿œ una query PT e la dovrï¿œ scrivere tutta a mano :-)
grazie ancora e buona giornata
Nicoletta
P.S. scusa per i due nomi nel th ma dal pc di mio marito esce l'altro 
account

 account
avevo capito ;) 

 no? e quindi puoi.
che ovviamente poi collegherai al DB usando un bel DSN - Odbc


Pablitomf ha scritto:



in realt� � oracle, e il mio problema � che in base alla scelta di un
pannello l'utente sceglie quali di quegli attributi estrarre (A,B,C,...)
Quindi cambia ad ogni estrazione!!!
Nicoletta
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 (A,B,C,...) Quindi cambia ad ogni estrazione!!!
Nicoletta io non conosco Oracle, ma credo sia la misma cosa pi� o meno 
no?... anche su Oracle si posson fare le Viste... a limite, visto che il tuo 
problema � l'utente, e hai 10 tipi di attributi, ti fai 1 vista parametrica 
data da una SP. Ma forse sto andando un p� avanti di fantasia? 

Pablitomf ha scritto:


non so come fare, visto che se seleziono due attributi la dovrei creare con
select
id,name,etc,etc,attributo1,descrattributo1,attributo2,descrattributo2
se invece ne seleziona 3 la dovr� creare diversa (dipendente anche da
quali ha selezionato). Io conosco solo il metodo di testare i valori
selezionati e costruire la stringa sql al momento basandomi su di loro
Nicky


 
Si hai una fantasia senza limiti.
Le viste sono statiche, come ben sia, ed essendo oracle immagino che ci 
siano su politiche di sicurezza che, magari, non gli consentono di 
creare viste o SP.
Non ho capito la sua necessita' di fare 10 selfjoin non ne basta una sola?
Non ho capito perche' non si limita a fare
x= "select"
if varcontenentenomecampo then
	x & " " & var
endif
if .......
.....
endif
x = x & "from tabella" & ....... eventuali altre clausole
Set rst = qdf.OpenRecordset(x,dbOpenSnapshot)
--
ac

 ac
Supponiamo di avere una tabella contatti con id e nome
Supponiamo di avere una tabella clienti con id,,,,,,idcontatto1,
idcontatto2
Se volessi una query che elenca i clienti in questo modo:
idclient,nominativo,contatto1,contatto2
come faresti?


 creare viste o SP.
Oracle non lo conosco... andavo di fantasia come detto...