Oce*_*ght 0 sql delphi ms-access delphi-2010
我试图从桌子上得到药物的价格,但我得到了:
procedure TForm1.BuyButtonClick(Sender: TObject);
var
iAmount : integer;
rRate : real;
sMedication : string;
sRate : string;
begin
iAmount := 0;
sMedication := BuyCombobox.Items[BuyCombobox.ItemIndex];
dmHospital.qryPrices.SQL.Clear;
dmHospital.qryPrices.SQL.Add('SELECT Price(R) FROM MedicationPrices WHERE Medication = quaotedstr(sMedication)');
sRate := dmHospital.qryPrices.SQL;
ShowMessage(sRate);
end;
Run Code Online (Sandbox Code Playgroud)
您应该修改您的代码以使其实际工作:我的建议是使用参数而不是 QuotedStr:
dmHospital.qryPrices.SQL.Clear;
dmHospital.qryPrices.SQL.Add('SELECT Price(R) AS Rate FROM MedicationPrices WHERE Medication = :pMedication');
dmHospital.qryPrices.Params.ParamByName('pMedication').AsString=sMedication;
Run Code Online (Sandbox Code Playgroud)
(请注意,在 ADOQuery 中,您将使用 .Parameters 而不是 .Params)
dmHospital.qryPrices.Open;
sRate=dmHospital.qryPrices.FieldByName('Rate').AsString;
ShowMessage(sRate);
Run Code Online (Sandbox Code Playgroud)
问候
您没有正确使用查询。qryPrices.SQL是 SQL 语句本身。这只是文字。您需要做一些事情才能实际运行该语句。(见下文。)
您还将变量嵌入到引号内,这意味着它没有被计算,并且对 (拼写错误) 的函数调用也没有被计算QuotedStr。没有任何功能quaotedStr()。如果您坚持连接 SQL 的糟糕想法,则需要正确执行。如果您要先清除然后添加,您可以直接分配给SQL.Text而不是一步完成:
dmHospital.qryPrices.SQL.Text := 'SELECT Price(R) FROM MedicationPrices WHERE Medication = ' + Quotedstr(sMedication);
Run Code Online (Sandbox Code Playgroud)
此外,在您实际执行查询之前,该查询不会执行任何操作。您需要使用qryPrices.Open来运行SELECT语句,或qryPrices.ExecSQL运行INSERT, UPDATEorDELETE语句。
您应该立即放弃连接 SQL 的想法(在养成习惯之前)并学习使用参数化查询。它允许数据库驱动程序为您处理格式化、转换和引用,并且还可以防止 SQL 注入,从而使其他人能够访问您的数据。这是一个更正后的版本,应该可以帮助您入门。
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10148 次 |
| 最近记录: |