new TADOQuery?



  • Moin zusammen 🙂
    Auch wenn die Frage jetzt vllt blöd klingt, ich würd gern so was machen wie:

    TADOQuery myQuery = new TADOQuery()
    

    Dann bekomm ich die Fehlermeldung : keine Übereinstimmung für TADOQuery::TADOQuery() gefunden. 😡
    Normalerweise benutz ich für meine Querys son hübsches Object auf meinem Formular, da brauch ich auch keine Insanziirung mit new zu machen.

    Wär nett wenn mir jmd grad die Zeile posten könnt, in der Forumssuche bin ihc leider nicht fündig geworden 😞



  • Hallo

    Auch wenn die Frage jetzt vllt blöd klingt, ich würd gern so was machen wie:

    Nein, die Frage selber ist nicht blöd, dynamische Komponenten gibts öfters.
    Schade ist nur das du die eigentlich sehr aussagekräftige Fehlermeldung des Compilers nicht verstehst. Der weist dich drauf hin das die Klasse TADOQuery (wie alle andern VCL-Komponenten) keinen Standardkonstruktor hat, sondern nur einen mit einem Parameter : dem Owner. Entweder übergibt du dort z.B. ein Form selber, das dann für das Löschen der Instanz verantwortlich ist.

    TADOQuery myQuery = new TADOQuery(Form1);
    

    Hast du kein passenden Owner, kannst du auch 0 übergeben, bist dann aber selber für das Löschen verantwortlich.

    TADOQuery myQuery = new TADOQuery(0);
    // benutzen
    delete myQuery;
    

    bis bald
    akari



  • Schau dir mal die DEfinition der Klasse TADOQuery an - die hat anscheinend keinen Default-Ctor, also mußt du einen anderen Ctor verwenden (indem du die benötigten Parameter in die ()-Klammern reinschreibst).

    Edit: zu langsam und zu ungenau - hier im Board ist akari eindeutig besser informiert 😃



  • Ja, akari hat mir schonmal gut geholfen 🙂
    Zuerst mal danke an euch beide 👍
    Ich hab das dann so gemacht wie du geschrieben hast, und bekam dann die Fehlermeldung das Klassen im VCL-Stil mit new erstellt werden müssen...
    Ok, Borland-Hilfe auf und nach VCL gesucht:
    VCL-Klassen dürfen nicht statisch definiert werden. Sie müssen beim Heap erstellt werden.

    Zum Beispiel:

    void foo(void)

    {
    Tobject o1; // Fehler;
    Tobject *o2 = new TObject();
    }

    Also hab ich dann

    TADOQuery *myQuery = new TADOQuery(0);
    

    benutzt, was auch durchlief... bis zur nächsten Zeile

    if(MyQuery(myQuery))
          {
    

    😡

    Borland-Hilfe: "Ein VCL-Objekt kann nur mit einem Zeiger angesprochen werden." Hab ich doch gemacht mit dem Stern, oder?
    Irgendwas hab ich wohl nicht verstanden?



  • Bei der Deklaration hast du den Stern verwendet, bei der Verwendung (im if()) aber nicht.

    Wie ist denn die Funktion MyQuery() deklariert? (ich tippe darauf, daß sie ihren Parameter nicht als Zeiger entgegennimmt)



  • Ich habs ich habs 😃

    Mann mus nur bei der aufrufenden Mothode den Stern mitangeben, nicht nur beim Aufruf, und darf dann nicht vergessen das auch im Header richtig zu deklarieren *freu*

    he, vielleicht versteh ich c ja auch noch irgendwann 🙂

    Danke nochmal an euch beide 👍



  • CStoll schrieb:

    Bei der Deklaration hast du den Stern verwendet, bei der Verwendung (im if()) aber nicht.

    Wie ist denn die Funktion MyQuery() deklariert? (ich tippe darauf, daß sie ihren Parameter nicht als Zeiger entgegennimmt)

    genau... hätt ich mit logischem denken auch drauf kommen müssen


Log in to reply