Sie sind nicht die Abfrage richtig verwenden. qryPrices.SQL
ist die SQL-Anweisung selbst. Es ist nur Text. Sie müssen etwas tun, um die Anweisung tatsächlich auszuführen. (Siehe unten.)
Sie haben die Variable auch in die Anführungszeichen eingebettet, was bedeutet, dass sie nicht ausgewertet wird, und auch nicht den Funktionsaufruf für die (falsch geschriebene) QuotedStr
. Es gibt keine Funktion quaotedStr()
. Wenn Sie auf der schlechten Idee der Verkettung von SQL bestehen, müssen Sie es richtig machen. Wenn Sie vorhaben, zu löschen und dann hinzufügen, können Sie stattdessen einfach zu SQL.Text
zuweisen es in einem Schritt zu tun:
dmHospital.qryPrices.SQL.Text := 'SELECT Price(R) FROM MedicationPrices WHERE Medication = ' + Quotedstr(sMedication);
Außerdem wird die Abfrage nichts tun, bis Sie es tatsächlich auszuführen. Sie müssen qryPrices.Open
verwenden, um eine SELECT
Anweisung auszuführen, oder qryPrices.ExecSQL
, um eine INSERT
, UPDATE
oder DELETE
Anweisung auszuführen.
Sie sollten sofort aus dem Gedanken kommen, SQL zu verketten (bevor Sie sich angewöhnen) und lernen, parametrisierte Abfragen zu verwenden. Es ermöglicht dem Datenbanktreiber, die Formatierung und Konvertierung für Sie zu übernehmen und zu quotieren, und es verhindert auch die SQL-Injektion, die anderen den Zugriff auf Ihre Daten ermöglichen kann. Hier ist eine korrigierte Version, die Ihnen den Einstieg erleichtern sollte.
procedure TForm1.BuyButtonClick(Sender: TObject);
var
sMedication : string;
sRate : string;
begin
iAmount := 0;
sMedication := BuyCombobox.Items[BuyCombobox.ItemIndex];
dmHospital.qryPrices.SQL.Text := 'SELECT Price(R) FROM MedicationPrices WHERE Medication = :Medication';
dmHospital.qryPrices.Parameters.ParamByName('Medication').Value := sMedication;
dmHospital.qryPrices.Open;
sRate := dmHospital.qryPrices.FieldByName('Price(R)').AsString;
dmHospital.qryPrices.Close;
ShowMessage(sRate);
end;
'dmHospital.qryPrices.SQL' ist Ihr SQL-Text. Verwenden Sie stattdessen "dmHospital.qryPrices.Open". –
Auch 'dmHospital.qryPrices.SQL.Add ('SELECT Preis (R) VON MedicationPrices WHERE Medication = quaotedstr (sMedication)');' ist falsch. Verwenden Sie stattdessen "SELECT PREIS (R) FROM MedicationPrices WHERE Medication = '+ QuotedStr (sMedication)". –
Bitte posten Sie keinen gefälschten Code in Ihrem q. – MartynA