Zugriff auf DataSet



  • Hallo.

    Ich habe mit das Tutorial zum Zugriff auf ein DataSet durchgelesen. Es sind mir allerdings noch nciht alle Dinge ganz klar.

    Bei der Lösung im FAQ:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
         int AnzSpalten=5;
    
         Query->Close();
         Query->SQL->Clear();
         Query->SQL->Add("select * from DomainTable");
         Query->Open();
         Query->First();
    
         while (!Query->Eof)
         {
               for (int i=0;i<=AnzSpalten;i++)
               {
                   Memo1->Lines->Add(Query->Fields->Fields[i]->AsString);
               }
               Query->Next();
         }
    }
    

    ist mir leider völlig unklar, wie ich herausfinden kann, in welcher Reihe sich die Daten befinden. In dem obrigen Beispiel werden einfach die ersten 5 Datenelemente aus dem DataSet entnommen.
    Ich will allerdings alle haben, desshalb habe ich bei mir AnzSpalten durch volgenden Wert ersetzt:

    int AnzFelder = DataSet->FieldCount;
    

    auf diese Weise werden brav alle Daten der Datenmenge in Memo1 ausgegeben.
    Aber natürlich will ich die Daten nicht in einem Memo ausgeben, sondmern etwas mit ihnen machen. Desshabl ist es wichtig für mich welche Daten in welche Spalten gehören. Wie ich das mit dem obrigen Beispiel mache weiß ich nicht. Denn die Daten liegen ja sozusagen nur als eindimensionales Array vor.

    kann mir jemand helfen und mir sagen wie ich herausfinden kann welche Daten zu welcher Spalte gehören?
    Sozusagen sowas wie Collcount (damit ginge es ja schon, habs aber nirgens gefunden).

    DANKE!


  • Mod

    Hallo

    dein Query ist dein mehrdimensionlaes Array
    (F1-Taste)

    MfG
    Klaus



  • ???

    Also ich kann da leider nichts wegen eines mehrdimensionales arrays finden.
    Oder wie ich darauf zugreifen kann.
    Leider.

    haste noch n Tipp? 😞



  • Fields und FieldCount ermöglichen dir doch den Zugriff auf die "Spalten". Und über RecNo kannst du feststellen, in welchem Datensatz ("Zeile") du dich gerade befindest.



  • ah, super!

    RecNo hatte ich nicht gefunden.



  • hm, jetzt kriege ich zwar alle Daten, aber nicht die Spaltennamen. genau die sind aber schon SEHR wichtig. Ich bekomme meine Daten von Stored Procedures, die liefern nicht immer die gleichen Spalten. Daher kenne ich die Spaltennamen zur Entwurfszeit natürlich nciht.
    hat noch jemand n Tipp wie ich an die Spaltennamen rankomme?

    thx!



  • Dass du über Fields auf die Spalten zugreifen kannst weisst du. Und wie könnte Feldname wohl auf Englisch heissen?



  • jaaa,

    aber ich kann in der Hilfe von ClientDataSet kein Attribut names Fieldname(s) finden.

    *schnüff*

    hat dieses Attribut wieder so nen Unnamen wie z.B. RecNo ??

    thx!



  • Original erstellt von Clip:
    aber ich kann in der Hilfe von ClientDataSet kein Attribut names Fieldname(s) finden

    Nach FieldName selbst zu suchen ist dir nicht mal in den Sinn gekommen? Und denk dran, dass die Properties hierarchisch sind, niemand hat behauptet, dass Fieldname eine direkte Eigenschaft von TDataSet wäre. 😉



  • ok, so gehts:

    AnsiString tmp = dmDataBaseModule->SQLClientDataSet->Fields->Fields[i]->FieldName;
    


  • Wobei ich sagen muß, dass es für einen blutigen Anfänger schon ziemlich schwer ist mittels BCB-Hilfe auf folgendes Konstrukt zu kommen:

    AnsiString tmp = dmDataBaseModule->SQLClientDataSet->Fields->Fields[i]->FieldName;
    

    Ich möchte mal wissen, was die Borland-Leute geritten hat, den Zugriff auf die Columns über Fields->Fields[i] zu gestalten.

    Da muß man erstmal drauf kommen.

    Verständlicher wäre doch:

    [cpp]
    AnsiString tmp = dmDataBaseModule->SQLClientDataSet->Field[i]->FieldName;[/cpp]



  • jau, so hab ichs auch tausendmal probiert, und es ging natürlich nie.

    danke für die hilfe @all!



  • Ist doch dasselbe wie bei TMemo::Lines::Strings, da versuchst du doch auch nicht, auf Lines[] zuzugreifen, oder? 😉



  • Nöja. Nö. Aber rein vom wörtlichen Sinn her ...

    ... und weg.


Anmelden zum Antworten