Newsgroup: it.comp.java
Titolo: JDBC-ODBC-Access e query GROUP BY

Salve a tutti, sono appena iscritto al NG e sto studiando Java da un 
paio di mesi.
Sono diversi giorni che sto impazzendo con il seguente problemino.
Utilizzo JDC 5.0 con JDBC 3.0 per accedere via ODBC a un db Access (lo 
so che il db lo devo cambiare, ma e' di una applicazione gia' esistente, 
sto lavorando per portare il tutto su Java e MySQL e per ora devo 
lavorare in doppio finche' non duplico tutta l'applicazione)
A qualcuno e' successo che  la funzione getRow() in presenza di query 
con GROUP BY renda il numero di record come se il group by non esistesse??
Per fare un esempio pratico se tolgo il group by dalla query mi rende 
100 record, se lo metto ne rende 10, ma la funzione getRow() persiste a 
dire che ci sono 100 record.
Ovvio che fino al decimo record quando scorro il recordset e leggo i 
dati va tutto bene, dall'undicesimo in poi si arrabbia e segnala un 
errore sui cursori.
grazie in anticipo per l'aiuto
Marco

è una domanda stupida... ma hai verificato su access che la query che 
fai torni il numero di record che ffettivamente ti aspetti ?
ciao
PP
(il qbe qualche volta mi ha fregato... pensavo di fare una cosa e mi 
sono trovato a farne altre :) )


Potresti postare un pezzo di codice? Comunque la getRow la chiami dopo
esserti spostato sull'ultimo record?

 sono trovato a farne altre :) )
Sono circa 10 anni che uso SQL...:-)
Comunque certo che ho provato!!
Grazie comunque
Marco

 esserti spostato sull'ultimo record?
Certo...
	db lo passo come parametro alla funzione che apre il recordset
   try {
	PreparedStatement stat=db.prepareStatement(SQL);
 
	rs = stat.executeQuery();
	rsmd = rs.getMetaData();			
	//Calcola il totale righe del recordset ricevuto
	while (rs.next()) {
		totaleRighe++;
		}
	//Questo e' il sistema alternativo a quello sopra...
	//naturalmente fornisce lo stesso risultato
	//totaleRighe=rs.getRow();
 
	//Posiziona il cursore sul primo record
	rs.first();
	}
	  catch (SQLException ex) {
	      System.err.println(ex);
	      System.err.println(SQL);
	}
In ogni caso, purtroppo non ho potuto rispondervi prima perche' in 
ufficio non riesco a far funzionare le news con fastweb,
  quindi vi rispondo da casa...
Sono andato avanti con gli esperimenti e mi sono convinto che gli ODBC 
non sono proprio il massimo...in ogni caso sul sito Microsoft c'e' 
scritto che la GROUP BY via ODBC puo' dare delle rogne...piu' ci sono 
altre sette o ottomila limitazioni..
Oltre che la GROUP BY ho avuto problemi anche con la funzione IIF()...
Per ora ho risolto memorizzando dentro il db di Access la query 
complessa con il GROUP BY , recuperando via ODBC solo il risultato, 
limitandomi poi da Java a fare un semplice WHERE su questo. Cosi' 
funziona perfettamente e rende il numero di record corretto.
Ho fatto anche un'altra prova consigliato dalla persona che gentilmente 
mi aveva risposto prima. Ho semplicemente cambiato la connessione da 
ODBC al driver nativo di MySQL, (ho il db di access con le tabelle 
clonate su MySQL), funziona tutto perfettamente senza fare niente. Mi 
sono quindi convinto al 100% che forse gli ODBC non sono fatti per query 
   molto complesse. Acquistero' (a pagamento) un driver nativo per Access.
Ringrazio di nuovo le persone che comunque hanno cercato di aiutarmi.
Spero in futuro di poter contribuire anch'io alla lista.
Saluti
Marco