CRecordset und SELECT COUNT8+9



  • Hallo Alle!

    Ich habe einen CRecordset und möchte folgendes SQL-Statement ausführen lassen.

    myRecordset.Open(CRecordset::dynaset, _T("SELECT COUNT(*) FROM _MY_TABLE");
    

    Wo wird das Ergebnis des Counts geschrieben?

    Danke im Voraus

    Katja



  • Ich kann dir deine Frage leider nicht direkt beantworten. 😞

    Aber ich habe einige Änsätze für dich: 🙂
    1.) Unix Tom hat eine Klasse für den Zugriff auf Mysql, damit sollte das gehen, guck mal in die FAQ.
    2.) CRecordset hat die Funktion GetRecordCount() die sollte dafür gehen.
    3.) Vor ein paar Tagen gab es eine ähnliche Frage. Sobald die Suche wieder geht schau da mal nach. Vielleicht gab es ja eine Lösung oder der Fragende hat eine.

    Ich hoffe es hilft. 🙂



  • Meine Frage mal allgemeiner:

    Wenn bei einem SQL-Statement das Ergebnis nicht ein Feldinhalt ist, sondern bspw. eben ein Wert wie die Anzahl der gefundenen Felder oder die Summe (selektierter Felder mit SUM) ... Wo wird das Ergebnis eines solchen Statements geschrieben.

    COUNT war nur ein spezielles Beispiel dieses allgmeinen Problemes, wobei GetRecordCount ohnehin untauglich ist, da man wirklich alle Datensätze von BOF - EOF alle Datensätze erst einmal durchiterieren muß. --> Sollte man vielleicht sofort die von einer DB bereitgestelle Funktionalität nutzen.

    Gruß Katja



  • Okay, wenn du das raus hast und es nicht Mysql spezifisch ist - sag es mir!

    Ich habe da eine Vermutung, die ich aber noch nicht überprüfen konnte:
    Man kann ja einmal per Klassenassistent das Recordset erstellen lassen und dann passt das genau zu der Tabelle.
    Man kann das aber auch dynamisch handhaben - und genau die Variante sollte für unser Problem die richtige sein.
    Dazu steht einiges in der MSDN und die Funktion GetFieldValue ist auch ein Ansatz.

    Ich vermute:
    Wenn du "select count (*) from..." machst wird das als Tabelle mit einer Spalte und einer Zeile interprtiert.

    Ich wollte immer wieder in die Richtung forschen, habe es aber leider noch nicht geschafft.

    Wenn du irgendwas rausfindest, sag Bescheid und ich helf dir auch gerne beim Suchen, so gut ich kann. 🙂



  • Keine Ahnung, ob es funktioniert, aber vielleicht klappt ja
    INSERT INTO HILFSTABELLE (TEMP) VALUES (SELECT COUNT (*) FROM TAB)
    Ich glaube ohne eine Zwischentabelle, die die Werte aufnimmt, geht es nicht.



  • ich habe sowas ähnliches schon mal beobachtet und bin der meinung das das ergebnis in die erste spalte erster datensatz geschrieben wird.. dass heisst deine tabelle hat als erste spalte zb artist und die variable m_artist, folglich ist der wert für m_artist (1.datensatz) gleich das ergebnis der abfrage... mir ist das mal bei einer distinct abfrgae aufgefallen... folgender code...

    int selection=ArtistListBox.GetCurSel();
    ArtistListBox.GetText(selection,SelectedCString);
    CString SQLCommand="SELECT Distinct Album FROM MP3_db WHERE Artist='" + SelectedCString + "';";
    
    Albumdb.Open(CRecordset::dynaset,SQLCommand);
    while(!Albumdb.IsEOF()) 
    {
    	temp=Albumdb.m_Artist; // die alben stehen jetzt in artist
    	AlbumListBox.AddString(temp);
    	UpdateData(FALSE);
    	Albumdb.MoveNext();
    }
    	Albumdb.Close();
    
    SQLCommand=" ";
    
    ArtistListBox.GetText(selection,SelectedCString);
    
    SQLCommand="SELECT Distinct Title FROM MP3_db WHERE Artist='" + SelectedCString + "';";
    
    Albumdb.Open(CRecordset::dynaset,SQLCommand);
    while(!Albumdb.IsEOF()) 
    {
    	temp=Albumdb.m_Artist;   // die title stehen jetzt in artist..
    	TitleListBox.AddString(temp);
    	UpdateData(FALSE);
    	Albumdb.MoveNext();
    }
    Albumdb.Close();
    

    hoffe ich konnte helfen


Anmelden zum Antworten