我写了这样的代码:
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。谢谢!
答案 0 :(得分:4)
使用Open
,而不是ExecSQL
。 ExecSQL
适用于不返回结果集的查询(INSERT
,DELETE
和UPDATE
)。 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。