Parameter an SQL Query übergeben
-
Folgendes Problem:
Ich möchte aus einem Textfeld "Edit1" eine zahl an einen Query übergeben und dass in der PostgreSQL Datenbank dieser Wert gesucht wird und an das DBGrid zurück übergeben wird.
In der jetzigen Version meines Quellcodes gibt das Prógram einen Indexfehler zurück.
void __fastcall TForm1::Button2Click(TObject *Sender) { using namespace std; AnsiString s; TDateTime x; int n; try { s = Edit1->Text; n = StrToInt(Edit1->Text); DataSource1->DataSet = Query2; Query2->Open(); Query2->SQL->Add(s); Query2->Active = true; } catch (EConvertError&) { Edit1->Text = "Wert eingeben!"; } }Query:
select * from fibu.kontensummen where su0002 = 's' limit 100;Ein bisschen Hilfe wäre nett!

-
Würdest Du Dir die Mühe machen, Deinen Source zu kommentieren? Mich würde interessieren, warum Du das auf diese Art und Weise versuchst, respektive, was Du mit den einzelnen Zeilen erreichen möchtest.
-
HAbe Kommentare hinzugefügt
void __fastcall TForm1::Button2Click(TObject *Sender) { using namespace std; AnsiString s; TDateTime x; int n; try { // Einlesen des Feldes Edit1 s = Edit1->Text; n = StrToInt(Edit1->Text); // Das Query2 als Datenquelle angeben DataSource1->DataSet = Query2; Query2->Open(); // Den Parameter s an das Query übergeben damit nach dem Eintrag // aus Edit1 gesucht werden kann Query2->SQL->Add(s); Query2->Active = true; } catch (EConvertError&) { Edit1->Text = "Wert eingeben!"; } }
-
Hallo
- statt mit der Methode Add() must du den Parameter s über die Eigenschaft TQuery::Params hinzufügen. Sieh mal dazu in die BCB-Hilfe, dort ist ein Beispiel.
- Das Ändern des Parameters must du vor dem Öffnen der Query machen. Und vor dem Zuweisen des Parameters solltest du die eventuell geöffnete Query erstmal noch schließen.
bis bald
akari
-
Und natürlich muß auch ein Parameter im SQL-Select vorhanden sein. Parameter beginnen immer mit einem : (Doppelpunkt).
Und Query->Open() und Query->Active = true haben so ziemlich dieselbe Auswirkung. Empfohlen wird die Methode Open() zu verwenden.
-
hatten wir das Thema nicht schon --> hier ?