DBFreeTel表存放需要排除的号码
DBName是总的数据表(String型变量)
目的汇总DBName表中排除号码以外的TimeLong现在这段程序有问题,不排除号码的话统计正常,排除号码后的数据竟然大于总的数据。不知道什么地方出现问题其中:
DateStr为int型标志日期的变量
EndTime为TDateTime型变量
Ckfree.Checked为是否启用排除功能/--------
try
with ADOQ do
begin
close;
SQL.Clear;
SQL.Add('SELECT Sum('+DBName+'.TimeLong)/60 AS 时长 ');
SQL.Add('FROM '+DBName);
if Ckfree.Checked then SQL.Add(',DBFreeTel ');
SQL.Add('WHERE ('+DBName+'.SrcBox = 0) ');
if Ckfree.Checked then SQL.Add(' AND ('+DBName+'.TelCode<>DBFreeTel.TelCode) ');
SQL.Add(' AND ('+DBName+'.DateStr >= :VBeginDate) ');
SQL.Add(' AND ('+DBName+'.DateStr <= :VEndDate) ');
SQL.Add(' AND ('+DBName+'.EndTime BETWEEN :VBeginTime and :VEndTime) ');
parameters.ParamByName('VBeginDate').Value:=GetDateint(DTBegin.DateTime);
parameters.ParamByName('VEndDate').Value:=GetDateint(DTEnd.DateTime);
parameters.ParamByName('VBeginTime').Value:=StrToDateTime(FindTimeStr(DTBegin.DateTime,CBBeginTime.Text,True));
parameters.ParamByName('VEndTime').Value:=StrToDateTime(FindTimeStr(DTEnd.DateTime,CBEndTime.Text,False));
ExecSQL;
Active:=True;
Stdata.Caption:='条件汇总';
end;
except
end;
DBName是总的数据表(String型变量)
目的汇总DBName表中排除号码以外的TimeLong现在这段程序有问题,不排除号码的话统计正常,排除号码后的数据竟然大于总的数据。不知道什么地方出现问题其中:
DateStr为int型标志日期的变量
EndTime为TDateTime型变量
Ckfree.Checked为是否启用排除功能/--------
try
with ADOQ do
begin
close;
SQL.Clear;
SQL.Add('SELECT Sum('+DBName+'.TimeLong)/60 AS 时长 ');
SQL.Add('FROM '+DBName);
if Ckfree.Checked then SQL.Add(',DBFreeTel ');
SQL.Add('WHERE ('+DBName+'.SrcBox = 0) ');
if Ckfree.Checked then SQL.Add(' AND ('+DBName+'.TelCode<>DBFreeTel.TelCode) ');
SQL.Add(' AND ('+DBName+'.DateStr >= :VBeginDate) ');
SQL.Add(' AND ('+DBName+'.DateStr <= :VEndDate) ');
SQL.Add(' AND ('+DBName+'.EndTime BETWEEN :VBeginTime and :VEndTime) ');
parameters.ParamByName('VBeginDate').Value:=GetDateint(DTBegin.DateTime);
parameters.ParamByName('VEndDate').Value:=GetDateint(DTEnd.DateTime);
parameters.ParamByName('VBeginTime').Value:=StrToDateTime(FindTimeStr(DTBegin.DateTime,CBBeginTime.Text,True));
parameters.ParamByName('VEndTime').Value:=StrToDateTime(FindTimeStr(DTEnd.DateTime,CBEndTime.Text,False));
ExecSQL;
Active:=True;
Stdata.Caption:='条件汇总';
end;
except
end;
解决方案 »
- 又来打搅大家了,通过dll操作delphi控件的问题,200分送上
- delphi如何选择录音通道?
- 调用C的Dll的问题
- 如何用ADO保存一个很大的数字到数据库?
- 关于WebBrowser的Open功能 在线求助
- 请教大虾,如何在panel里画出坐标系,并且根据已经知道的几个点(Xn,Yn)联成阶梯状的折线?
- 在Delphi 5.0 中的ADO 实在是太烂了,快救救我! 分不够可以再给.
- 怎样让程序把硬盘搞坏?
- 关于DELPHI 5的数据库BDE打包问题
- &_&:delphi处理sqlserver表,当一表中出现完全同两条以上记录时报错:"too many ...",谁知道?
- Delphi中使用adoQuery+DataSource+DBChart无法生成图表的问题
- 问一个数据库插入问题
改为
SQL.Add(' AND ('+DBName+'.TelCode not in(select distinct TelCode from DBFreeTel) ');
或者与之等效的not exists语句(如果数据量很大not in 效率要低一些)
if Ckfree.Checked then SQL.Add(' AND ('+DBName+'.TelCode<>DBFreeTel.TelCode) ');
把这两句改了...
按照你的方法会对Sum的值多统计几次,次数是DBFreeTel中号码的个数,比方说有3个号码,统计值就是这三个号码的的共同和值