Newsgroup: it.comp.lang.visual-basic
Titolo: ancora su SQL e recordset (sorry...)

scusate ma vi rompo ancora.
anzitutto con i vostri consigli ho risolto praticamente tutti i problemi che
avevo. Adesso mi rimane solo una cosa da risolvere, anzi prima ancora da
capire.
in due parole. devo analizzare un database, cercare dati, effettuare query e
quant'altro. Bene, per fare ciò ho bisogno di crearmi a run-time delle
tabelle dove memorizzare temporaneamente i dati su cui lavorare *senza* che
questi siano in qualche modo collegati al database principale. Esempio:
supponiamo di avere una tabella A. Da questa devo estrarre dei dati da
esaminare in un secondo tempo, perciò io mi creo un oggetto recordset e
tramite esso eseguo una query SQL sulla tabella iniziale. Ottengo il
risultato aspettato tranne per il fatto che mi sembra di aver capito che i
dati contenuti nel recordset che ho aperto non sono copie dei dati ma
"collegamenti" ad essi. In altre parole re elimino un record dal recordset,
mi scomparirà anche dal database. E questo non deve succedere. Per farla
breve, come faccio a crearmi in RAM e a run-time delle tabelle partendo da
istruzioni SQL o proprietà Filter o quant'altro possa servire affinchè io
possa operare su queste tabelle senza intergaire con i dati di partenza ?
inoltre, se eseguo un'istruzione SELECT ad esempio, il nome del recordset
aperto successivamente sarà proprio l'istruzione stessa. E se io la devo
includere in una query successiva mi ritrovo una SELECT nidificata con
spreco di tempo e risorse: come faccio a cambiare il nome della tabella in
uno a mia scelta ?
grazie infinite per il tempo che vorrete dedicarmi! :)
Marco

 Marco
Salutoni
Sergio


Un pò prolisso ma non specifichi cosa usi per la connessione (ADO, DAO....)
leggiti questo articolo
ADO: Recordset disconnessi
al seguente link
http://www.visual-basic.it/main_art.asp

 
http://www.visual-basic.it/main_art.asp
uhm.... hai ragione. provvedo subito. Uso DAO su un database access. Nel
frattempo mi guardo subito l'articolo da te indicato.
grazie e scusa la lungaggine!
Marco

 EeeeeeH? Cosa stai dicendo?
come ho scritto nell'altro post, non ho specificato che lavoro con DAO su un
db Access.
riguardo questa mia allucinazione qua sopra.... che ho detto di così fuori
dalle orbite ? :-)
ho provato a fare una normale query del tipo
set rcs = db.openrecordset("SELECT bla bla bla")
e visualizzando 
rcs.name
 (come del resto specificato nella guida) ottengo le
prime 256 lettere della query, praticamente tutta se non è troppo lunga.
Metti che debba fare un'altra query dove i dati di partenza (quindi
argomento del FROM) sia la tabella appena creata dovrei scrivere SELECT
blabla FROM " & 
rcs.name
 & " WHERE blabla". Ma il nome 
rcs.name
 contiene
appunto la select di prima, l'effetto non è una SELECT nella SELECT ? ho
cannato ancora ? ;-)
grazie!
Marco

 Marco
cancella il post di prima, allora, se non ricordo male solo i recordset ADO
funzionano in modalità disconnessa
per quanto riguarda la seconda parte, non ho fatto la prova, ma in linea
teorica potrebbe anche funzionare, il problema potrebbe appunto consistere
nel fatto che la tua prima query ecceda i 256 caratteri
Salutoni
Sergio

 Sergio
funziona anche in linea pratica, infatti adesso lavoro così. mi trovo nei
casini solo nei casi in cui ho query molto lunghe e quando devo eseguire
parecchie query una dietro l'altra. dopo un paio di giri ho il nome della
tabella costituito da un sacco di SELECT FROM SELECT FROM ecc..... vorrei
evitare una porcheria del genere....
grazie di nuovo,
Marco

 ha scritto nel messaggio
news:pCa69.62938$lu5.1...@twister1.libero.it...

Non credo sia evitabile una "porcheria" del genere: non è possibile fare una
query che abbia come oggetto di partenza il recordset che hai caricato in
memoria, quindi devi sempre ripartire dalla (o dalle) tabella iniziale,
tramite il comando sql che ha generato il recordset.
Se la tua query sulla query si limita a filtrare i record esistenti, senza
aggiungere join ad altre tabelle, potresti utilizzare la proprietà filter
(mi sembra esista anche in DAO), se devi filtrarli per poi effettuare
qualche operazione sui record che hanno determinate caratteristiche potresti
fare un ciclo del tipo
recordset.findfirs "campo=valore"
do until recordset.nomatch
    recordset.edit
    '
    recordset.update
    recordset.findnext "campo=valore"
loop
Spero di non averti annoiato con ovvietà già prese in considerazione
Salutoni
Sergio

 Sergio
annoniato ? stai scherzando ? :-)
uhm... credo che ADO avrei avuto vita più facile, solo che il programma che
devo modificare è stato scritto usando DAO. però dovendo aggiungere
solamente una funzionalità (praticamente aggiungo un modulo con una funzione
pubblica, e chi ha scritto il programma me la invoca alla pressione di un
pulsante) potrei lavorare con ADO.
grazie a te e a tutti per la pazienza!!¨
Marco


Piccola precisazione: non credo sia possibile, ma non sono un mostro in
materia, quindi non prenderla come oro colato
Risalutoni
RiSergio