使用别名返回值

时间:2017-11-30 03:32:41

标签: delphi oracle11g delphi-7 zeos

我写了这样的代码:

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。谢谢!

1 个答案:

答案 0 :(得分:4)

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

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

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

作为注释,请停止连接SQL并使用参数。使用用户输入的字符串连接使您可以进行SQL注入。谷歌小鲍比表找出为什么这是一件坏事,如果你还不知道的话。您可以找到使用参数编写代码的示例here