1

我写了这样的代码:

sql1 :='select sum(jumlah) as debet from kasir_kas_transaksi where flag in (1,3) and tanggal = to_date('+quotedstr(after)+','+quotedstr('dd-mm-yyyy')+')';

with zquery1 do begin
  close;
  sql.clear;
  sql.Add(sql1);
  execSQL;
end;
edit1.Text:=zquery1.fieldbyname('debet').asstring;

然后发生错误,说字段“debet”不存在。代码有问题吗?我使用delphi 7和zeos作为连接,以及oracle 11g作为db。谢谢!

4

1 回答 1

4

使用Open,不使用ExecSQLExecSQL适用于不返回结果集(INSERTDELETEUPDATE)的查询。Open用于返回行的查询。您也不需要使用SQL.Clear;then SQL.Add();- 您可以直接设置SQL.Text

(你应该停止使用with; 那是一个不同的话题,但我把它留在这里是因为它是你的代码而不是我的。)

with ZQuery1 do
begin
  SQL.Text := sql1;
  Open;
end;
Edit1.Text := ZQuery1.FieldByName('debet').AsString;

请注意,停止连接 SQL 并改用参数。字符串与用户输入的连接让您对 SQL 注入敞开大门。谷歌小鲍比表找出为什么如果你还不知道那是一件坏事。您可以在此处找到使用参数编写代码的示例。

于 2017-11-30T03:41:12.660 回答