TADOStoredproc und Parameter



  • Hallo,

    ich bin gerade dabei mich in die Arbeitsweise von TADOProc reinzuarbeiten. Wie das reine Ausführen einer Stored Procedure ohne Parameter funktioniert weiß ich. Was mir aber völlig unklar ist: Wie erzeuge ich mir Ein- bzw Ausgabeparameter für diese Komponente zur Laufzeit. Ich hab schon versucht übers Internet was zu finden, aber es gab irgendwo nix gescheits. Deshalb meine Frage: Hat jemand ein Codebeispiel wie das alles gemacht wird? (Also Verwendung von Ein- und Ausgebaeparametern in einer TADOStoredProc und Ausgabe eines Ausgabeparameters in einer VCL Komponente)

    Vielen dank schon mal im Voraus :xmas1:

    Ebi01



  • hat wirklich keiner eine Ahnung? Ich hab mittlerweile herausgefunden, daß hier ein Bug in MySQL vorliegt. Für php gibt's da wohl auch einen workaround, nur ich hab zuwenig Ahnung von php um das entsprechend umzusetzen.

    Ebi01



  • die Komponente TADOStoreProc verwende ich zwar nicht, aber trotzdem arbeite ich mit Stored Procedures, da man diese ganz einfach über ein Query abfragen kann, hier mal am Beispiel einer MSDE Datenbank:

    ADOCommand1->CommandText = "select dbo.fn_dtformat(:date,:typ)";
    ADOCommand1->Parameters->ParamByName("date")->Value = StrToDate(Edit1->Text);
    ADOCommand1->Parameters->ParamByName("typ")->Value = StrToInt(Edit2->Text);
    ADODataSet1->Recordset = ADOCommand1->Execute();
    Edit3->Text = ADODataSet1->Fields->Fields[0]->AsString;
    

    eventuell kannst du ja etwas ähnliches bei MySQL versuchen

    Andernfalls sind bei TADOStoreProc die Parameter automatisch vorhanden, sobald ein Procedurename ausgewählt/zugewiesen wird und die Datenbankverbindung offen ist. Die Parameter kommen dann in der Reihenfolge: Ausgabeparameter, Eingabeparameter und können über den Namen (siehe oben) angesprochen werden. Die Ausgabe wird dann auch über die Parameter gemacht, allerdings muß hier die Typumwandlung manuell gemacht werden, da der TParameter nur vom Typ Variant ist

    Edit3->Text = (String)ADOStoredProc1->Parameters->ParamByName("@RETURN_VALUE")->Value;
    

Anmelden zum Antworten