View Full Version : [ADO] recordset in locale SENZA accedere ad un database


rbianco
14-12-2004, 16:51
Avrei bisogno di generare al volo un recorset locale, sulla macchina dove viene eseguito un VBScript, per riempirlo con alcuni dati e farci una query, e poi cancellarlo.

Questo codice credevo facesse al caso:
_____________________
Set rs = CreateObject("ADODB.Recordset")
rs.AddNew "NomeCampo"
rs.Fields("NomeCampo") = "contenutoCampo"
rs.Update
_____________________

e invece mi dà "L'operazione non è consentita se l'oggetto è chiuso".

Ho giocato un po' con rs.Open, ma non sono riuscito a far funzionare nulla.

Come si fa? :(

Brigante
14-12-2004, 19:03
Originariamente inviato da rbianco
Avrei bisogno di generare al volo un recorset locale, sulla macchina dove viene eseguito un VBScript, per riempirlo con alcuni dati e farci una query, e poi cancellarlo.

Questo codice credevo facesse al caso:
_____________________
Set rs = CreateObject("ADODB.Recordset")
rs.AddNew "NomeCampo"
rs.Fields("NomeCampo") = "contenutoCampo"
rs.Update
_____________________

e invece mi dà "L'operazione non è consentita se l'oggetto è chiuso".

Ho giocato un po' con rs.Open, ma non sono riuscito a far funzionare nulla.

Come si fa? :(

Quello che ti serve è un recordset disconnesso, guarda QUA (http://www.visual-basic.it/uploads/articoli/tecnici/ReiDBMSLess.htm)
;)

rbianco
15-12-2004, 10:18
Originariamente inviato da Brigante
Quello che ti serve è un recordset disconnesso, guarda QUA (http://www.visual-basic.it/uploads/articoli/tecnici/ReiDBMSLess.htm)
;)

AVANZI UNA BIRRA! :cincin:
Ho modificato il codice presente in tale webpage in modo che funzioni come semplice VBScript, senza necessità di avere Visual Basic.
Allego il risultato: per farlo funzionare basta un doppio-click sul file VBS, e per modificarlo basta un editor di testo.

GRAAAAAAAAZIEEEEEEE!!

rbianco
15-12-2004, 16:24
Ho continuato il lavoro, ed ora sono al punto in cui il mio Recordset disconnesso è pieno di dati.

Davo per scontato di poter agevolmente lanciare una query SQL su questo Recordset disconnesso, così da ottenere un altro recordset contenente solamente il risultato della query stessa, ma... non ce l'ho fatta! :cry:

Mi viene il dubbio... si può fare, o invece ho lavorato mezza giornata per niente?
:(


Stavo pensando di fare così altrimenti:[list=1]
scrivo il recordset in un file MDB esterno inizialmente vuoto (appositamente creato in precedenza)
faccio la query su tale MDB (questa so che si può fare)
[/list=1]

... che palle però... tutti 'sti passaggi sono davvero necessari?

valse
15-12-2004, 16:40
Originariamente inviato da rbianco
Ho continuato il lavoro, ed ora sono al punto in cui il mio Recordset disconnesso è pieno di dati.

Davo per scontato di poter agevolmente lanciare una query SQL su questo Recordset disconnesso, così da ottenere un altro recordset contenente solamente il risultato della query stessa, ma... non ce l'ho fatta! :cry:

Mi viene il dubbio... si può fare, o invece ho lavorato mezza giornata per niente?
:(


Stavo pensando di fare così altrimenti:[list=1]
scrivo il recordset in un file MDB esterno inizialmente vuoto (appositamente creato in precedenza)
faccio la query su tale MDB (questa so che si può fare)
[/list=1]

... che palle però... tutti 'sti passaggi sono davvero necessari?

...scusa ma non ho capito in che senso vuoi fare una query sul recordset... te ora hai a disposizione un recordset e ci puoi fare di tutto...

rbianco
15-12-2004, 17:16
Originariamente inviato da valse
...scusa ma non ho capito in che senso vuoi fare una query sul recordset... te ora hai a disposizione un recordset e ci puoi fare di tutto...
E' più di 1 ora che faccio ricerche, ma non ho ancora capito come poter fare una query sql su un ADODB.RecordSet. :confused:

Spiego l'obiettivo specifico che devo raggiungere, che magari vien fuori un'idea alternativa:
io ho il mio recordset in memoria, pieno di record, e ho interesse ad estrarre gli ID in modo "distinct"... faccio l'esempio:

CONTENUTO DEL RECORDSET:
____________

ID NOME
____________
1 Pippo
2 Pluto
5 Paperino
1 Pippo
2 Pluto
2 Pluto
____________


VOGLIO APPLICARCI QUESTA QUERY:
"select distinct ID from [riferimento_al_recordset]"


E QUINDI VORREI OTTENERE QUESTO RISULTATO:
____________

ID
____________
1
2
5
____________


Spero di aver chiarito un po' meglio quello che devo ottenere, eventualmente chiedetemi, ci mancherebbe... DEVO risolvere questa cosa, in un modo o nell'altro.

cisky
16-12-2004, 14:04
Beh, potesti ordinare il recordset e considerare solo i record distinti manualmente.

Come metodo fà schifo, ma forse fà al caso tuo:


' *** Ordino i dati in base al nome a all'ID
'
rs.Sort = "NOME,ID"

' *** Scorro quindi il recordset e considero solo i record distinti
'
Do While Not rs.EOF

' *** Creo una chiave che identifica in maniera univoca ogni riga
' [I dati sono ordinati in precedenza con il metodo SORT]
'
sRowKey = rs!ID & "#" & rs!Nome

' *** Scarto le righe duplicate
'
If sRowKey <> sPreviousRowKey Or (sRowKey = "") Then

Debug.Print "ID = " & rs!ID & "; NOME = " & rs!Nome

sPreviousRowKey = sRowKey
End If

rs.MoveNext
Loop

rbianco
16-12-2004, 14:31
Ottima soluzione anche questa! Non sapevo ci fosse anche il metodo "sort" a disposizione. Grazie!

Avrei seguito questa strada se l'urgenza di risolvere non mi avesse spinto verso un'altra soluzione, e cioè:

[list=1]
creo un file MDB
creo una tabella al suo interno
popolo la tabella con il contenuto del RecordSet
faccio la query tramite la classica connessione ADO
[/list=1]

E' un po' macchinoso, e mi obbliga a scrivere su file... ma d'altra parte mi consente di fare le query SQL più disparate sul mio insieme di dati (oltre alla "SELECT DISTINCT ..."), per cui è anche più flessible.

Grazie ancora!