Itruzione SELECT da un Recordset

martedì 24 ottobre 2006 - 14.37

skibbino Profilo | Newbie

Inanzitutto buongiorno a tutti.
Ho aperto un recordset (Rs) con la seguente clausola SELECT:

Set rs = New ADODB.Recordset

With rs
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.CursorLocation = adUseClient

sqla=SELECT COD, COUNT(*) AS PALLETS, SUM(NCP) AS CP_TOT
FROM 2006
WHERE DRG_HRG>#1/1/2006# And DRG_HRG<=#10/24/2006 16:40:0# And PAL Like '**' And LEN Like '*A*'
GROUP BY COD;

.Open sqla, FrmMain.cnnStat

...

Ho associato il recordset (Rs) ad un DataGrid e fin qui tutto ok! Ho ottenuto circa 10000 record.

A questo punto in un TextBox dovrei visualizzare la somma totale della colonna PALLETS. Ora ho risolto il problema scorrendo il recordset e sommando il campo Fields("PALLETS"). Per risparmiare tempo però vorrei eseguire la somma applicando un'altra Query al recordset ottenuto. La query potrebbe semplicemente essere:

SELECT Sum(PALLETS) AS SommaDiPALLETS
FROM ???;

La domanda è: cosa devo inserire nella clausola FROM per fargli capire che deve eseguire la query sul recordset (Rs) precedentemente ottenuto.

Spero di essere stato chiaro.
Attendo il vostro aiuto....
Grazie!

Slave Profilo | Junior Member

>Inanzitutto buongiorno a tutti.
>Ho aperto un recordset (Rs) con la seguente clausola SELECT:
>
> Set rs = New ADODB.Recordset
>
> With rs
> .CursorType = adOpenStatic
> .LockType = adLockOptimistic
> .CursorLocation = adUseClient
>
>sqla=SELECT COD, COUNT(*) AS PALLETS, SUM(NCP) AS CP_TOT
> FROM 2006
>WHERE DRG_HRG>#1/1/2006# And DRG_HRG<=#10/24/2006
>16:40:0# And PAL Like '**' And LEN Like '*A*'
>GROUP BY COD;
>
> .Open sqla, FrmMain.cnnStat
>
> ...
>
>Ho associato il recordset (Rs) ad un DataGrid e fin qui tutto
>ok! Ho ottenuto circa 10000 record.
>
>A questo punto in un TextBox dovrei visualizzare la somma totale
>della colonna PALLETS. Ora ho risolto il problema scorrendo il
>recordset e sommando il campo Fields("PALLETS"). Per risparmiare
>tempo però vorrei eseguire la somma applicando un'altra Query
>al recordset ottenuto. La query potrebbe semplicemente essere:
>
>SELECT Sum(PALLETS) AS SommaDiPALLETS
>FROM ???;
>
>La domanda è: cosa devo inserire nella clausola FROM per fargli
>capire che deve eseguire la query sul recordset (Rs) precedentemente
>ottenuto.
>
>Spero di essere stato chiaro.
>Attendo il vostro aiuto....
>Grazie!
>
dim stringa as string
stringa=" FROM 2006
WHERE DRG_HRG>#1/1/2006# And DRG_HRG<=#10/24/2006
16:40:0# And PAL Like '**' And LEN Like '*A*'
GROUP BY COD;"

sqla="SELECT COD, COUNT(*) AS PALLETS, SUM(NCP) AS CP_TOT" & stringa



"SELECT Sum(PALLETS) AS SommaDiPALLETS" & stringa
Sono solo uno sballato in un mondo di sballati....

skibbino Profilo | Newbie

Provo e ti so dire.
Grazie mille!!

Slave Profilo | Junior Member

>Provo e ti so dire.
>Grazie mille!!
>
>


ma figurati...fammi poi sapere e buona fortuna....

CIAO!


Sono solo uno sballato in un mondo di sballati....

skibbino Profilo | Newbie

Credo che non funzioni o meglio non mi dia il risultato sperato. Forse mi sono spiegato male. Devo ottenere 1 solo record che è la somma della colonna PALLETS del recordset Rs precedentemente ottenuto, mentre in questo caso ottengo 1 sola colonna.

Slave Profilo | Junior Member

>Credo che non funzioni o meglio non mi dia il risultato sperato.
>Forse mi sono spiegato male. Devo ottenere 1 solo record che
>è la somma della colonna PALLETS del recordset Rs precedentemente
>ottenuto, mentre in questo caso ottengo 1 sola colonna.


ah...be allora io farei una cosa del genere:

dim somma as integer 'dipende da che tipo di dati usi

do while not rs.eof
somma=somma+rs("PALLETS")
rs.movenext
loop
Sono solo uno sballato in un mondo di sballati....

skibbino Profilo | Newbie

questa infatti è la soluzione che ho adottato, il problema è che fare un loop su recordset cosi' grandi appesantisce molto il ciclo del programma e volevo evitare.
Grazie cmq per l'interessamento, se qualcuno ha altre soluzioni...

Slave Profilo | Junior Member

eh si...pero adesso che vedo anche la soluzione che ti ho proposto prima dovrebbe restituirti solo la somma e nn una colonna...non capisco perche restituisce una colonna...bho....prova cosi:

dim stringa as string
stringa=" FROM 2006
WHERE DRG_HRG>#1/1/2006# And DRG_HRG<=#10/24/2006
16:40:0# And PAL Like '**' And LEN Like '*A*'
;"

sqla="SELECT COD, COUNT(*) AS PALLETS, SUM(NCP) AS CP_TOT" & stringa & " GROUP BY COD"



"SELECT Sum(PALLETS) AS SommaDiPALLETS" & stringa
Sono solo uno sballato in un mondo di sballati....

skibbino Profilo | Newbie

Non può funzionare perchè il campo Pallets non è presente in 2006, ma viene generato dalla prima query come COUNT(*) AS PALLETS (ogni record è un pallet). Io credo che bisognerebbe creare la query di una query, ma fino ad ora nessun risultato positivo.

Slave Profilo | Junior Member

eh gia...e vero...ma scusa...crearti della query in access e leggere da quelle???
Sono solo uno sballato in un mondo di sballati....

skibbino Profilo | Newbie

ho provato ma il risultato finale è errato. Provo a fare altri test. Ma non è possibile in nessun modo inserire nell'opzione from il recordset appena creato in vb6? Altrimenti dovrei inserire i risultati ottenuti in un'altra tabella e fare la 2^ query su quella tabella ma mi sembra ridicolo.

fasol Profilo | Junior Member

allora dvi fare una qry con allinterno un altra qry
SELECT ....
FROM SELECT....
FROM.....


meglio i perdenti xkè hanno la speranza di vincere...cosa che i vincenti nn hanno....

skibbino Profilo | Newbie

Provo! Mille grazie per l'interessamento

StefanoLep Profilo | Senior Member

Solo un suggerimento, visto che ti serve aiuto per una query forse troverai aiuto più semplicemente se lo posti nella sezione dei database

skibbino Profilo | Newbie

Grazie mille ad entrambi!!

Funziona!!!

Ora devo solo trovare una routine che ridimensioni in automatico le colonne di un DataGrid a seconda di quello che ci scrivo dentro. Avevo già scaricato qualcosa per HMSFlexGrid che però per il DataGrid non funziona. Avete suggerimenti?

fasol Profilo | Junior Member

i invii via e-mail quello che hai trovato x la flex grazie mille



meglio i perdenti xkè hanno la speranza di vincere...cosa che i vincenti nn hanno....

skibbino Profilo | Newbie

inviato fammi sapere se l'hai ricevuto

fasol Profilo | Junior Member

ok devo provarlo domani lo provo ti faro sapere cmq grazie 1000



meglio i perdenti xkè hanno la speranza di vincere...cosa che i vincenti nn hanno....

fasol Profilo | Junior Member

segna il thread come risolto tanto per chiuderlo....



meglio i perdenti xkè hanno la speranza di vincere...cosa che i vincenti nn hanno....
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5