CRecordset + Count
-
moin
ich hab da mal nen kleines problem...
ich möchte gern bei einer select anfrage vorher wissen wie viele zeilen ich als ergebnis zurück bekomme ... also hab ich mir folgendes überlegt: ich mache vorher nen select count(*) abfrage an meine db und bekomme so die zeilen raus ... das funktioniert auch ... also der code da unten geht, aber so richtig gefallen tut er mir nicht ... ich wollt nun wissen ob es eine einfachere möglichkeit gibt die anzahl der gelesenen rows rauszubekommen ???mfg LT
aufruf: DBSelectNow("Select * FROM test where ID='1'", 2, "test", "ID='1'"); DBSelectNow("Select * FROM test", 2, "test", "");
CString CACS400App::DBSelectNow(CString aktion, int anzVar, CString tabelle, CString bedingung){ if(dbCon.IsOpen() != 0) { CRecordset rs(&dbCon); CString count; if(bedingung.CompareNoCase("")==0){ CString counter_str="select count(*) from "+tabelle; rs.Open(CRecordset::snapshot , _T( counter_str )); }else{ CString counter_str="select count(*) from "+tabelle+" where "+bedingung; rs.Open(CRecordset::snapshot , _T( counter_str )); } do{ //Felder auslesen rs.GetFieldValue((short)0, count); rs.MoveNext(); } while (!rs.IsEOF()); rs.Close(); CString test; test.Format("%s",count); AfxMessageBox(test); rs.Open(CRecordset::snapshot , _T( aktion )); do{ //Felder auslesen // rs.GetFieldValue(); rs.MoveNext(); } while (!rs.IsEOF()); rs.Close(); } return "test"; }
-
Nur so nebenbei:
bei einer do-while-Schleife liest du mindestens einmal die Werte aus dem Recordset. Das funktioniert nicht bei einer leeren Tabelle, die ist sofort EndOfFile.
-
jojo is mir auch aufgefallen hab das schon geändert