TQuery: Editfeld ist Query
-
Halli Hallo,
ich habe mich etwas in die Datenbankenfunktionen vom BCB 6 eingearbeitet (dank des tollen FAQs bin ich über ein sehr nützliches Tutorial gestolpert) und habe auch schon einen lauffähigen Test fertiggestellt. Ein Query wurde ausgeführt, das Ergebnis via FieldByName"Feldname" wurde mir auch angezeigt. Prima! Eine Stunde Einarbeitung

Setting: MySQL Datenbank via ODBC, durch TDatabase Alias eingebunden.
Ich habe in meinem Programm eine DebugForm vorgesehen. Da habe ich mir eben gedacht, es wäre cool, wenn ich dort einen Query eingeben könnte und mir das Erbebnis in einem Label angezeigt wird. Das Ergebnis ist immer das erste (gefragte) Feld des Query; ist halt vielleicht etwas undynamisch aber ich lerne ja noch. Man muss den Query also entsprechend formulieren. Soweit so gut.
Jetzt habe ich in das Editfeld einfach Mal eine SELECT-Anweisung eignetippt und leider einen Fehler von der Datenbank zurückbekommen, ich solle meinen Query checken. Was mir dabei auffiel: Vor und nach dem "String", den ich eingegeben habe, befinden sich in der Fehlermeldung Hochkommas, die ich nicht eingegeben habe. Kein Query kann ausgeführt werden, also mache ich wohl etwas falsch

Kann man denn überhaupt den gesamten Query über diese Weise eintragen und ausführen lassen, oder muss der Query immer schon "vorgebastelt" sein? Hab ich da einen Denkfehler?
Ich bin für jede Hilfe dankbar!
Gruß,
Sebastianvoid __fastcall TfrmDbg::btnDbgExecSQLClick(TObject *Sender) { // Query vorbereiten und ausführen qDbgQuery->SQL->Clear(); // Alten Query löschen qDbgQuery->SQL->Add(":SQLQUERYTEXT"); // Inhalt vom Editfeld einfügen qDbgQuery->ParamByName("SQLQUERYTEXT")->AsString = txtDbgSQLQuery->Text; qDbgQuery->ExecSQL(); // Query ausführen // Ergebnis anzeigen lblDbgQueryResult->Caption = qDbgQuery->Fields->Fields[0]->AsString; }
-
Hi,
alsoqDbgQuery->ExecSQL();ist wie ich weiss nur für USE and Update befehle(und ein paar andere).
Hier habe ich die dein Code verändert und stat Label habe ich ListBox genommen, ich finde das besser für SQL Ergebnisse.
void __fastcall TfrmDbg::btnDbgExecSQLClick(TObject *Sender) { // Query vorbereiten und ausführen qDbgQuery->SQL->Clear(); // Alten Query löschen qDbgQuery->SQL->Add(txtDbgSQLQuery->Text); // Inhalt vom Editfeld einfügen qDbgQuery->Open(); // Query ausführen // Ergebnis anzeigen in der ListBox. for (int i=1; i<= qDbgQuery->RecordCount ; i++) { ListBox1->Items->Add(qDbgQuery->Fields->Fields[0]->AsString); } }Ich habe es getestet und hat auch funktioniert.
Hoffe das du das so wolltest.
-
Hallo titanium,
vielen vielen Dank! Der Code ist natürlich einwandfrei.
Genau so eine Schleife habe ich gebraucht. Kenne das von PHP her; da hole ich mir die Results immer als Whileschleife. Sind halt wirklich (im ersten Moment) erschlagend viele Möglichkeiten, die Ergebnisse zu "fangen".Total spannend, sich da reinzuarbeiten.
Problem gelöst.
Gruß