一个delphi过程的问题,看看错在哪。。。(50分)

  • 主题发起人 主题发起人 免费地铁
  • 开始时间 开始时间

免费地铁

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TfrmLeave.Count(Ado1:TADOQuery;lab,edt,com,edt2: String);
begin
with Ado1 do
begin
Close;
SQL.Clear;
SQL.Add('select Sum(ADaySum) as LeaSumT from tbLeave where'+
' LeaType='''+lab+''' and tbLeave.StaffID='''+edt+''''+
' and DatePart(month,Atime)= '''+com+'''');
Open;
edt2 := FieldByName('LeaSumT').AsString;
end;
end;

Count(ADOCount,labThing.caption,edtNumb.Text,comMonth.Text,edtThing.Text);
这是我写的一个过程,和调用,为什么会没有结果,就是在运行时不会有错误提示,但是在相应的edit中却不能显示结果,请问这是为什么?
 
你先把你的SQL语句生成后showmessage(Ado1.sql.text) 然后执行一下 看看有没有错误和返回结果,
再一个 除非你的返回结果就是一行 不然 ADO1打开的时候指针指到第一条记录上,你得用Locate来定位
 
你是个过程,不是函数,并没有返回结果
并且你的参数全是常量形参,也不足以返回结果.
不知你以何种方式调用并返回结果来显示到TEdit上?
改成如下吧:
procedure TfrmLeave.Count(Ado1:TADOQuery;lab,edt,com : string;var edt2: String) ;
 
应该这样吧
procedure TfrmLeave.Count(Ado1:TADOQuery;edt2:Tedit);
begin
......
edt2.text:=FieldByName('LeaSumT').AsString;
end
 
你返回到Edit的参数是edit2吗?如果这样的话,必须传址的方式进行申明。

var edt2: string

如果只是传值,在过程调用结束后随着堆栈释放掉了。且并不能改变原来的值

其他如楼上所说。
 
procedure 没有返回值,function有返回值;
没看懂那个edt2是做什么用的?
 
“'select Sum(ADaySum) as LeaSumT ”中的LeaSumT其实不是字段的名称,仅仅
是用于显示的标题。语句:“edt2.Text := FieldByName('LeaSumT').AsString;”
中,FieldByName在没有找到相应的字段名称时,不会引发异常的,结果返回Null,
当然不会有问题了。改为以下的指令应该可以解决问题:
edt2.Text := Fields[0].AsString;
 
edt2 := FieldByName('LeaSumT').AsString;
这个delphi都不报错?
你用的是哪个版本的delphi
 
你没有看到他的edt是string类型啊?!!!哪个版本都不会报错!
 
后退
顶部