一个调用delphi过程查询数据库的问题(50分)

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

免费地铁

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TfrmCheckS.Count(Ado1:TADOQuery;edt,com,tim:string; var edt2: Tedit);
begin
with Ado1 do
begin
Close;
SQL.Clear;
SQL.Add('select count(MSWork) as Mstar from tbDutyRecord where'+
' Ltrim(Rtrim(StaffID)) ='''+edt+''' and DatePart(hour,MSWork)>'''+tim+''''+
' and DatePart(month,counttime)= '''+com+'''');
Open;
edt2.Text:= FieldByName('Mstar').AsString;
end;
end;



procedure TfrmCheckS.bitCountClick(Sender: TObject);
begin
Count(ADOCount1,edtID.Text,'7',comMonth.text,edtLate);
end;

上面是我写的一个过程,和调用,可是这样的结果在 edtLate上显示的是0,但是真正表中的记录不是0
而我要是只判断 DatePart(hour,MSWork)>'''+tim+''' (上班时间)
或只判断 and DatePart(month,counttime)= '''+com+'''(统计的月份) 这样的话edtLate上就能显示出记录来,
可是符合(上班时间)和(统计的月份)的记录是相同的啊?
是不是不能同时用两个DatePart?
 
先不使用这是试试,直接赋值查找看看。
或者用showmessge();
看看各个值是否准确。
 
肯定是sql语句的问题
到数据库的查询器里面去试,看是sql那个地方写错了
 
我觉得
procedure TfrmCheckS.bitCountClick(Sender: TObject);
begin
Count(ADOCount1,edtID.Text,'7',comMonth.text,edtLate);
end;

应该改成
procedure TfrmCheckS.bitCountClick(Sender: TObject);
begin
Count(ADOCount1,edtID.Text,'7',comMonth.text,edtLate.text);
end;

要不就是SQL错误
 
那个sql语句 DatePart(hour,MSWork)>'''+tim+''',和 DatePart(month,counttime)= '''+com+''' 放在数据库的查询器里面是会出错,但是,我在delphi里要是注册掉其中一个程序就能运行,结果也是正确的,那又是什么问题呢?
 
DatePart 返回的是 int 类型
过程错误,应该是
procedure TfrmCheckS.Count(Ado1:TADOQuery;edt,com,tim:string; var edt2: Tedit);
begin
with Ado1 do
begin
Close;
SQL.Clear;
SQL.Add('select count(MSWork) as Mstar from tbDutyRecord where'+
' Ltrim(Rtrim(StaffID)) ='''+edt+''' and DatePart(hour,MSWork)>'+tim+' and DatePart(month,counttime)= '+com);
Open;
edt2.Text:= FieldByName('Mstar').AsString;
end;
end;
 
先别匆忙写函数,直接写看能得出什么样的结果!~~
procedure Tform1.button1click;
begin
with Adoquery1 do
begin
Close;
SQL.Clear;
SQL.Add('select count(MSWork) as Mstar from tbDutyRecord where'+
' Ltrim(Rtrim(StaffID)) ='''+edit1.text+''' and DatePart (hour,MSWork)>'''+comMonth.text+''''+
' and DatePart(month,counttime)= '''+7+'''');
Open;
edit2.Text:= FieldByName('Mstar').AsString;
end;
end;
 
恩,试了一下 加不加引号 是没啥区别
这样:把过程改下
procedure TfrmCheckS.Count(Ado1:TADOQuery;edt,com,tim:string; var edt2: Tedit);
begin
with Ado1 do
begin
Close;
SQL.Clear;
SQL.Add('select count(MSWork) as Mstar from tbDutyRecord where'+
' Ltrim(Rtrim(StaffID)) ='''+edt+''' and DatePart(hour,MSWork)>'''+tim+''''+
' and DatePart(month,counttime)= '''+com+'''');
SQL.SaveToFile('D:/1.txt');
Open;
edt2.Text:= FieldByName('Mstar').AsString;
end;
end;
然后把 D:/1.txt 的内容弄到查询分析器里执行下
看看
 
结果出来了,不是sql的问题,是我在调用时,实参的顺序给搞混了,我用 dfoversky, 说的那样去看那个D:/1.txt ,就发现了。谢谢各位的帮忙!
 
后退
顶部