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


Anmelden zum Antworten