Delphi 使用别名返回值

Delphi 使用别名返回值,delphi,oracle11g,delphi-7,zeos,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.T

我编写了如下代码:

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”不存在。 代码中有什么错误吗? 我使用Delphi7和zeos作为连接,使用Oracle11g作为数据库。谢谢大家!

使用Open,而不是ExecSQL。ExecSQL用于不返回结果集INSERT、DELETE和UPDATE的查询。Open用于返回行的查询。 您也不需要使用SQL.Clear;然后是SQL.Add;-您可以直接设置SQL.Text

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

with ZQuery1 do
begin
  SQL.Text := sql1;
  Open;
end;
Edit1.Text := ZQuery1.FieldByName('debet').AsString;
请注意,停止连接SQL并改用参数。字符串与用户输入的连接为SQL注入留下了广阔的空间。谷歌小波比表,找出为什么这是一件坏事,如果你还不知道。您可以找到一个使用参数编写代码的示例。

使用Open,而不是ExecSQL。ExecSQL用于不返回结果集INSERT、DELETE和UPDATE的查询。Open用于返回行的查询。 您也不需要使用SQL.Clear;然后是SQL.Add;-您可以直接设置SQL.Text

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

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

请注意,停止连接SQL并改用参数。字符串与用户输入的连接为SQL注入留下了广阔的空间。谷歌小波比表,找出为什么这是一件坏事,如果你还不知道。您可以找到一个使用参数编写代码的示例。

非常感谢您的帮助。我在编码方面是个新手,所以我缺乏很多基础知识。再次感谢!但是,你能教我一点关于这个问题吗?这将有助于我将来编写代码。再次感谢你!对停止使用。这会导致很难找到bug。删除它并只键入额外字符要比花费数小时试图解决with语句意外结果导致的问题要好得多。扩展@Ken的注释:with在旧Pascal中非常有用,在旧Pascal中,它可以用来提高某些代码的效率。但那是在简单、非优化编译器的时代,当时Pascal没有任何面向对象的扩展。现在,特别是由于OO的作用域要复杂得多,with可能会成为一个大问题,应该避免使用。@mizkyd,您在发布的代码中使用了with。你这么做的时候还不知道它是干什么的?非常感谢你的帮助。我在编码方面是个新手,所以我缺乏很多基础知识。再次感谢!但是,你能教我一点关于这个问题吗?这将有助于我将来编写代码。再次感谢你!对停止使用。这会导致很难找到bug。删除它并只键入额外字符要比花费数小时试图解决with语句意外结果导致的问题要好得多。扩展@Ken的注释:with在旧Pascal中非常有用,在旧Pascal中,它可以用来提高某些代码的效率。但那是在简单、非优化编译器的时代,当时Pascal没有任何面向对象的扩展。现在,特别是由于OO的作用域要复杂得多,with可能会成为一个大问题,应该避免使用。@mizkyd,您在发布的代码中使用了with。你这么做的时候还不知道它是干什么的?