AddObject frage



  • ok, danke erstmal! 🙂

    andere frage, als object brauche ich nicht zwingend einen string, ein integer würde mir auch reichen, da der primär nen integer ist. ich habe jetzt so eine idee gehabt (vielleicht kann man die ausbauen):

    beim füllen:

    tblOrte->First();
    cmbWohnort->Clear();
    while(!tblOrte->Eof)
    {
        cmbWohnort->Items->AddObject(tblOrte->FieldByName("Wohnort")->AsString,(TObject *) tblOrte->FieldByName("ort_id")->AsInteger);
        tblOrte->Next();
    }
    

    zum auslesen:

    Caption = IntToStr(cmbWohnort->Items->Objects[cmbWohnort->ItemIndex]);
    

    klappt natrüclih nicht, aber vielleicht gibts daraus eine lösung?

    achja, warum klappt bei mir das compilieren mit: cmbWohnort->Items->Objects nicht?

    gruß gerd



  • du versuchst nen zeiger als integer zu verkaufen und dann in nen string zu packen... da würde ich auch nicht wollen. du musst schon zurueck casten.

    bitte immer mit angeben, was schieflaeuft. fehlermeldungen, etc...



  • Probier mal :

    cmbWohnort->Items->AddObject(tblOrte->FieldByName("Wohnort")->AsString,(TObject *)**(int)**tblOrte->FieldByName("ort_id")->AsInteger);



  • gelöscht



  • Hallo

    @ YLIREBUS : dir ist aber schon klar, das das nicht funktionieren wird? Nicht nur wegen dem cast, sondern einfach weil tblOrte->FieldByName("ort_id") immer auf einen Datensatz zeigt, der sich nicht durch die Auswahl der ComboBox verändert?

    bis bald
    akari



  • Also ich mache folgende :

    Anhängen:

    CB_Buero->Items->AddObject(qryBASIS->FieldByName("Buero")->AsString, (TObject*)(int)qryBASIS->FieldByName("ID")->AsInteger);
    

    auslesen:

    int(CB_Buero->Items->Objects[CB_Buero->ItemIndex]);
    

    und bei mir funzt es die id ist immer die die zu dem Büro gehört .



  • Hallo

    gut, dann habe ich das falsch verstanden...
    Aber wieder mal eine unsaubere Sache mit den casts. Man sollte wenigstens statt dem C-Style Cast dann den reinterpret_cast nehmen.

    bis bald
    akari



  • kann ich bestätigen, klappt einwandfrei:

    habe YLIREBUS beispiel eingebunden, und auslesen tue ich so:

    Caption = IntToStr((int) cmbWohnort->Items->Objects[cmbWohnort->ItemIndex]);
    

    scheint tadellos zu klappen, oder aht noch jemand begründete einwände?!

    gruß gerd

    ps: habe es jetzt auch verstanden! 🙂 danke an alle!

    @akari: der reinterpreter_cast würde mich auch interessieren, wie das damit gelöst werden könnte!



  • YLIREBUS schrieb:

    CB_Buero->Items->AddObject(qryBASIS->FieldByName("Buero")->AsString, (TObject*)(int)qryBASIS->FieldByName("ID")->AsInteger);
    

    wozu der cast auf int?

    int a = reinterpret_cast <int> (ComboBox1->Items->Objects[ComboBox1->ItemIndex]);
    


  • Hallo

    reinterpret_cast<> ist ein Template aus dem C++ Standard. Das würde bei dir so aussehen :

    Caption = IntToStr(reinterpret_cast<int> (cmbWohnort->Items->Objects[cmbWohnort->ItemIndex]));
    

    Es ändert aber nichts an der Sache, das das ganze nicht sehr sauber ist.

    /Edit : zu spät...

    bis bald
    akari



  • gibt es eine möglichkeit es "sauber" hinzubekommen?

    gruß gerd



  • muss ich diese objects selbstständig aus dem speicher entsorgen?

    was passiert bei einem (eventuellen) absturz (auch vielleicht durch fremde applikationen, sprich windows hängt sich auf oder so, muss ich den speicher trotzdem irgendwie freimachen?

    gruß gerd



  • wenn sich windows aufhaengt ist es doch eh egal. 😉

    theoretisch wird das array von der kompo freigegeben. wenn du dort allerdings zeiger auf andere objekte speicherst, musst du die selber freigeben.


Anmelden zum Antworten