Newsgroup: it.comp.lang.visual-basic
Titolo: [?ADO] group by in una stringa sql

Ciao a tutti.
Ho dei problemi con ADO e MySQL.
Ho una stringa SQL di questo tipo per contare il numero di persone di una
stessa citta' da una tabella
strSQL="select count(*), citta from tabella group by citta order by citta"
Posto che nella tabella ci sono dei dati, nel momento in cui faccio girare
questa stringa tramite ADO con MyODBC mi ritorna un record vuoto e cioe' con
rec.EOF=true
rec.BOF=true
quando invece non dovrebbe.
Se provo a modificare la strSQL cosi'
strSQL="select citta from tabella order by citta"
mi ritorna il nome delle citta senza problemi.
Il problema e' di group by?
Qualcuno sa dirmi perche' ha questo comportamento?
Grazie
Teo


Non saprei .. la sintassi sembra giusta .. prova ad utilizzare una query
salvata sul DB (oppure stored procedure) e vedi se i risultati sono uguali
...
altrimenti ci sono problemi con il provider.
Saluti

 citta"
Prova con:
strSQL="select count(citta) as numerocitta, citta from tabella group by
citta order by citta"
A me da client testuale di mysql funziona... hai provato dal client testuale
vero? ;)
Ciao
PS
Ho fatto un paio di prove e sempre da client testuale funziona anche la
tua... Potrebbe essere un problema di cursore... quello predefinito è lato
server e non supporta recordcount e altre amenità...
Ciao

 altrimenti ci sono problemi con il provider.
avendo MySQL non ho stored proc...cmq ho provato a far girare la query con
il query editor di mysql e ottengo quello che vorrei...quindi non so...forse
il problema e' nel driver di MyODBC....?!?!

 strSQL="select count(*), citta from tabella group by citta order by citta"
strSQL= "select COUNT(codpersona o altro) as numero, DISTINCT citta FROM
tabella group by citta order by citta"
Dovrebbe andar bene questa.
 Ciao

 Ciao
si' anche a me da client testuale funziona ma il problema e' quando uso la
query con ADO....
il cursore l'ho messo lato client....
altre idee?
grazie
teo

  Ciao
con questa mi da' un errore di sintassi!
teo

 il cursore l'ho messo lato client....
Uhm... potresti postare la parte di codice incriminata che la provo da me
(compresa la dichiarazione dei recordset)?


dunque questa e' la parte incriminata:(la tabella si chiama children)
Dim rec As ADODB.Recordset
Dim cnn As ADODB.Connection
Dim cmd As ADODB.Command
Set cnn = New ADODB.Connection
Set rec = New ADODB.Recordset
Set cmd = New ADODB.Command
cnn.CursorLocation = adUseClient
cnn.ConnectionString = GlConnString   'stringa di connessione
utilizzando
driver MyODBC di MySQL
cnn.Open
cmd.CommandType = adCmdText
 cmd.CommandText = "select count(*) as numero, borough from children
group
by borough order by borough "
Set cmd.ActiveConnection = cnn
 Set rec = cmd.Execute
A questo punto mi trovo che rec e' vuoto cioe' sia EOF che BOF sono 
true;
la select viene eseguita perche' infatti riesco a vedere i due campi
(numero,borough) ma senza i dati che  dovrebbero esserci.
P.S. con Access funziona!
Grazie in anticipo
Teo



cnn.CursorLocation = adUseClient
cnn.provider = ""'utilizzando driver MyODBC di MySQL
cnn.mode = admodeReadWrite or admodeShareDenyNone
cnn.ConnectionString = GlConnString   'stringa di connessione
cnn.Open "metti la path del db"
Set rec = New ADODB.Recordset
rec.cursorlocation = aduseClient
rec.cursortype = adopenDynamic
rec.locktype = adlockOptimistic
rec.open "select count(*) as numero, borough from children group by borough
order by borough "
se la select è giusta ...prova cosi'.
Ps: ma se fai una distinct per le citta con una count delle persone nn funge
senza group by?

 P.S. con Access funziona!
Dim cntConnessione As ADODB.Connection
Dim rstRecordset As ADODB.Recordset
 Set cntConnessione = New ADODB.Connection
cntConnessione.ConnectionString =
"DRIVER={MySQL};SERVER=192.168.xxx.xxx;DATABASE=pippo;UID=root;PWD=;OPTION=3
5"
cntConnessione.Open
Set rstRecordset = New ADODB.Recordset
rstRecordset.CursorLocation = adUseClient
rstRecordset.Open "select count(campo) as contatori, campo from tabella
group by campo order by campo", _
                                 cntConnessione, adOpenDynamic,
adLockReadOnly
rstRecordset.MoveLast
MsgBox rstRecordset.RecordCount
rstRecordset.Close
Set rstRecordset = Nothing
Cosě a me funziona, prova! ;)
Una cosa sicuramente non va nella tua stringa di connessione (per i piů
attenti: me l'ha mandata via e-mail non sono un indovino :P) č che manca
l'option=35 (vedi documentazione di mysql)!
Le parentesi graffe non so se servono ma a me la connessione cosě funziona
bene! ;)
Non uso nč ho mai usato i command... per me sono solo un passaggio (e
digitazione) in piů! ;)
Facci sapere se e come hai risolto! ;)

 wrote in message
news:afeeni$1kdj$1...@half.spin.it...

dunque questa e' la parte incriminata:(la tabella si chiama children)
Dim rec As ADODB.Recordset
Dim cnn As ADODB.Connection
Dim cmd As ADODB.Command
Set cnn = New ADODB.Connection
Set rec = New ADODB.Recordset
Set cmd = New ADODB.Command
cnn.CursorLocation = adUseClient
cnn.ConnectionString = GlConnString   'stringa di connessione utilizzando
driver MyODBC di MySQL
cnn.Open
cmd.CommandType = adCmdText
 cmd.CommandText = "select count(*) as numero, borough from children group
by borough order by borough "
Set cmd.ActiveConnection = cnn
 Set rec = cmd.Execute
A questo punto mi trovo che rec e' vuoto cioe' sia EOF che BOF sono  true;
la select viene eseguita perche' infatti riesco a vedere i due campi
(numero,borough) ma senza i dati che  dovrebbero esserci.
P.S. con Access funziona!
Grazie in anticipo
Teo

 wrote in message
news:afeeni$1kdj$1...@half.spin.it...



 senza group by?
non funziona.... e comunque non credo sia possibile fare il distinct solo su
un campo...e' possibile fare qualcosa del genere con distinctrow mi
sembra....
comunque sono ancora fermo...non sono riuscito a risolvere!!! :-(