Dynamisches CRecordset::AddNew()?



  • Ich greife aus meiner Applikation auf eine MSSQL-DB per ODBC zu. Ich nutze für den Zugriff auf jede Tabelle eine von CRecordset abgeleitete Klasse. Diese Klassen werden global instanziiert.
    Da die Anwendung auf mehreren Rechnern läuft benutze ich dynaset, um Änderungen zu aktualisieren.
    Das Problem ist, dass beim Hinzufügen eines Datensatzes mittels AddNew()/Update() dieser erste sichtbar im Recordset wird, nachdem man Requery() aufruft. Ich möchte gern anzeigen, wieviel Datensätze sich im Recordset befinden.

    Soll ich dazu einen Thread oder Timer erzeugen, der meine globalen Recordset-Objekte mittels Requery() ständig aktualisiert? Oder gibt es da eine bessere Möglichkeit? Dazu kommt noch, das Requery() den Current Record auf den ersten Datensatz legt und ich nach jedem Requery() wieder zum vorher "gemerkten" scrollen müsste... Da gibts doch sicherlich eine bessere Methode für das "Bemerken", dass ein neuer DS hinzu gekommen ist, oder?

    Danke+Gruß
    Lutz



  • hm, evtl. schaust du dir mal die DTL an,
    ist eine Plattformunabhängige ODBC Lib.
    http://dtemplatelib.sourceforge.net



  • Und mit CRecordset gehts garni???
    Hab nämlich schon ziemlich viel Code damit geschrieben...

    Gruß Lutz



  • Für die, dies interessiert.

    Hab es nun so gelöst, dass ich OnTimer() implementiert habe und 1xmal/s aufrufe... Dann zähle ich per "SELECT COUNT"-Abfrage die Datensätze der Tabelle und vergleiche auf Änderung. Wenn sich die Anzahl ändert, führe ich ein Requery() aus und merke mir die id des Primärschlüssels. Mittel While-Schleife setze ich meinen Cursor wieder auf diese id.

    Scheint ganz gut soweit zu funktionieren.

    Gruß Lutz



  • Der Abschnitt, wie SELECT COUNT funktioniert, der würde mich mal interessieren. 🙂



  • wieso?



  • Weil ich es mal versucht habe und es nie funktioniert hat. 😞



  • "SELECT count(*) FROM table"



  • Inwiefern nicht? Als ich erstell nur ein temporäres Recordset mit "SELECT COUNT (*) FROM Table"... Dann lese ich den Wert des "Anzahl"-Feldes aus dem Recordset aus...



  • Also, den SQL Befehl weiß ich auch, aber die Umsetzung mit CRecordset hapert eben. 🙄
    Ich habe bisher nur mit fest an eine Tabelle gebundenen Sets gearbeitet und dachte, du kanst kurz zeigen, wie das geht.
    Wenn der Code geheim ist, dann eben nicht. 😞



  • Der Code ist nicht geheim... Poste den Code heut abend mal rein.. der ist nämlich zuhause auf meinem Rechnern. Wird aber erst gegen Mitternacht rum sein.

    Gruß Lutz



  • Das ist nett, danke. 🙂



  • Hi! Habs doch noch mal nach Hause geschafft...
    Hier eine Funktion, welche die Anzahl der Datensätze einer Tabelle zurückgibt, im Namespace db. Das Feld id ist der Primärschlüssel und das erste Feld/Attribut in der Tabelle -> deshalb GetFieldValue(short(0),anz).
    CDBVariant::m_lVal ist dabei vom Datentyp long int.

    int db::getRecordCount(CString table)
    {
    	CRecordset rec(&myDatabase);
    	CString query;
    	query.Format("SELECT COUNT (id) from %s",table);
    	rec.Open(CRecordset::dynaset,_T(query));
    	CDBVariant anz;
    	rec.GetFieldValue((short)0,anz);
    	return anz.m_lVal;
    
    }
    

    Gruß Lutz



  • Danke, ich werde das Morgen mal ausprobieren. 🙂


Anmelden zum Antworten