Falsche Daten bei IRowsetInfo::GetProperties



  • Hallo Community,

    ich hole mir gerade Daten aus einer MsSql Tabelle in mein C++ Programm über OLEDB.
    Das funktioniert alles auch schon recht gut. Also bekomme Verbindung, kann meine Daten auslesen und bearbeiten usw.
    Leider funktioniert eine Kleinigkeit bis jetzt nicht wirklich:

    Ich versuche über die Funktion 'IRowset::GetProperties' herrauszubekommen wieviele Zeilen das Ergebnis meiner Abfrage umfasst. Leider bekomm ich hierbei aus irgendeinem Grund immer den Wert '4' zurück. Obwohl das gelieferte Ergebniss in einem Beispiel '7' Datensätze umfasst.

    Ich gehe dabei wie folgt vor:

    // ...
    ULONG size = 0;
    DBPROPSET *set = 0;
    IRowsetInfo* pIRowsetInfo = 0;
    
    if (FAILED(hr = pIRowset->QueryInterface(IID_IRowsetInfo, (void**) &pIRowsetInfo)))
    {
      // hier Fehlerbehandlung
      return false;
    }
    
    if (FAILED(hr = pIRowsetInfo->GetProperties(0, 0, &size, &set)))
    {
       // hier Fehlerbehandlung
       return false;
    }
    

    Die beiden if - Abfragen durchläuft er, und der RückgabeWert von hr steht auf OK. Nur eben das 'size' statt '7' den Wert '4' hat.

    Was mach ich beim Aufruf der 'GetProperties' funktion falsch. Muss ich evtl eine der beiden 'NULL' werte ändern.

    Die Definition dieser ist :

    IRowsetInfo::GetProperties(const ULONG cPropertyIdSets, const DBPROPIDSET rgPropertyIDSets[], ULONG* pcPropertySets, DBPROPSET **prgPropertsSets);
    

    Hoffe das jemand eine Idee oder einen Anzeiz hat der mir weiterhilft...

    Mfg

    Ollow


  • Mod

    Die Funktion liefert doch gar nicht die Anzahl der Datensätze.
    Lies doch einfach mal die Doku:
    IRowsetInfo::GetProperties
    http://msdn.microsoft.com/en-us/library/ms719611(VS.85).aspx

    pcPropertySets
    [out] A pointer to memory in which to return the number of DBPROPSET structures returned in *prgPropertySets. If cPropertyIDSets is zero, *pcPropertySets is the total number of property sets for which the provider supports at least one property in the Rowset property group. If cPropertyIDSets is greater than zero, *pcPropertySets is set to cPropertyIDSets. If an error other than DB_E_ERRORSOCCURRED occurs, *pcPropertySets is set to zero.



  • Hab auf dieser Seite hier gelesen
    http://technet.microsoft.com/de-de/library/ms130836.aspx

    und dachte, das im zweiten Absatz mit der Aussage:

    '... zu betrachten sind, wie beispielsweise die maximale Anzahl aktiver Zeilen und die Anzahl der Zeilen,....'

    bedeutet das ich hierbei die Anzahl der im RowSet vorliegenden Sätze(Zeilen) erhalte.

    Dann habe ich da wohl was falsch verstanden. Gibt es überhaupt die Möglichkeit die Anzahl (Zeilen) der Ergebnisse im RowSet zu erhalten.


  • Mod

    Nein!

    IMHO musst Du mit GetNextRows das Rowset durchlesen um die Anzahl zu bestimmen. Dem Provider steht es vollkommen frei erst später die Daten zu lesen oder asynchron weiter Records in das Rowset einzufügen.
    Schon ganz und gar wenn es ein dynamisches Rowset ist 😉



  • Okay, das leuchtet ein.

    Besten Dank für die Antwort 🙂

    Gruß


Log in to reply