起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 232|回复: 17

[请求]查询报错问题**

[复制链接]
发表于 2008-8-19 19:18:10 | 显示全部楼层 |阅读模式
新增加一句查询语句后,每次打开功能,然后关闭的时候出现如下错误
查询语句如下:蓝色为新增加

if FFilterDate<>'' then
     lFilterSql := 'AND ' + FFilterDate; //lFilterSql + ' AND ' + FFilterDate;
  lPersonID := Tsqldataset(dsbLookupDept.DataSet).GetLookupData('PersonId').DataSet.FieldByName('ord').AsString;

  if lPersonID<>'-1' then
    lFilterSql := lFilterSql + ' and FHDW = '''+lPersonID+'''';

  if (Edit1.Text <>'') and (Edit2.Text <>'')  then
    lFilterSql := lFilterSql + ' and CFHYFRL >= '+Edit1.Text+' and CFHYFRL <=' +Edit2.Text+' ';

2.jpg

10.46 KB, 下载次数: 110

回复

使用道具 举报

 楼主| 发表于 2008-8-19 19:21:58 | 显示全部楼层

如图

如图

3.jpg

11.55 KB, 下载次数: 105

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-19 19:23:34 | 显示全部楼层

如图2

如图2

1.jpg

9.51 KB, 下载次数: 102

回复 支持 反对

使用道具 举报

发表于 2008-8-20 08:38:30 | 显示全部楼层
ORA-00936 这是数据库反馈回来的,

你跟踪一下,把  lFilterSql   这个值贴出来看看是啥
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-20 10:26:37 | 显示全部楼层
procedure Tform_GDHSLTJB.BuildStr();
var
  lFilterSql : string;
  lStartTime: TDatetime;
  lEndTime: TDatetime;
  Date : TDatetime;
  I,j : integer;
  lstr,lstr1 : string;
begin
  lFilterSql := '';
  FFilterDate := '';
  FFilterDes := '';
if cmbCreateDate.ItemIndex <> 0 then
  begin
    case cmbCreateDate.ItemIndex of
     1: // 本年
     begin
       lStartTime := DateUtils.StartOfTheYear(SysSrv.SysService.Time);
       lEndTime := DateUtils.IncDay(DateUtils.DateOf(DateUtils.EndOfTheYear(SysSrv.SysService.Time)), 1);
     end;
     2: // 本季
     begin
       j := DateUtils.MonthOf(SysSrv.SysService.Time);
       case j of
         1,2,3:  //第一季度
         begin
           lStartTime := sysutils.StrToDate(sysutils.IntToStr(DateUtils.YearOf(SysSrv.SysService.Time)) + '-1-1');
           lEndTime := sysutils.StrToDate(sysutils.IntToStr(DateUtils.YearOf(SysSrv.SysService.Time)) + '-4-1');
         end;
         4,5,6:  //第二季度
         begin
           lStartTime := sysutils.StrToDate(sysutils.IntToStr(DateUtils.YearOf(SysSrv.SysService.Time)) + '-4-1');
           lEndTime := sysutils.StrToDate(sysutils.IntToStr(DateUtils.YearOf(SysSrv.SysService.Time)) + '-7-1');
         end;
         7,8,9:  //第三季度
         begin
           lStartTime := sysutils.StrToDate(sysutils.IntToStr(DateUtils.YearOf(SysSrv.SysService.Time)) + '-7-1');
           lEndTime := sysutils.StrToDate(sysutils.IntToStr(DateUtils.YearOf(SysSrv.SysService.Time)) + '-10-1');
         end;
         10,11,12:  //第四季度
         begin
           lStartTime := sysutils.StrToDate(sysutils.IntToStr(DateUtils.YearOf(SysSrv.SysService.Time)) + '-10-1');
           lEndTime := sysutils.StrToDate(sysutils.IntToStr(DateUtils.YearOf(SysSrv.SysService.Time)+1) + '-1-1');
         end;
       end;
     end;
     3: // 本月
     begin
       lStartTime := DateUtils.StartOfTheMonth(SysSrv.SysService.Time);
       lEndTime := DateUtils.IncDay(DateUtils.DateOf(DateUtils.EndOfTheMonth(SysSrv.SysService.Time)), 1);
     end;
     4: // 上周
     begin
       I := SysUtils.DayOfWeek(SysSrv.SysService.Time) + 6;
       Date := DateUtils.IncDay(DateUtils.DateOf(SysSrv.SysService.Time), -I);
       lStartTime := Date;
       lEndTime := DateUtils.IncDay(Date, 7);
     end;
     5: // 本周
     begin
       I := SysUtils.DayOfWeek(SysSrv.SysService.Time) - 1;
       Date := DateUtils.IncDay(DateUtils.DateOf(SysSrv.SysService.Time), -I);
       lStartTime := Date;
       lEndTime := DateUtils.IncDay(Date, 7);
     end;
     6: // 昨天
     begin
       lStartTime := DateUtils.IncDay(DateUtils.DateOf(SysSrv.SysService.Time), -1);
       lEndTime := DateUtils.DateOf(SysSrv.SysService.Time);
     end;
     7: // 今天
     begin
       lStartTime := DateUtils.DateOf(SysSrv.SysService.Time);
       lEndTime := DateUtils.IncDay(DateUtils.DateOf(SysSrv.SysService.Time), 1);
     end;
     8: //自定义
     begin
       if TDateRangeForm.Show( lStartTime, lEndTime ) then
       begin
         lStartTime := DateUtils.DateOf(lStartTime);
         lEndTime   := DateUtils.IncDay(DateUtils.DateOf(lEndTime), 1);
         FFilterDes := FFilterDes + '从 ' + sysutils.DateTimeToStr(lStartTime) +
                         ' 到 ' + sysutils.DateTimeToStr(lEndTime);
       end
       else
         cmbCreateDate.ItemIndex := FLastTimeIndex;
     end; //8
     else  //CASE
       raise Exception.Create('内部错误');
    end; // CASE

    lFilterSql := lFilterSql + ' GHSJ >= to_date('''+sysutils.DateTimeToStr(lStartTime)+''',''yyyy-mm-dd'') and ';
    lFilterSql := lFilterSql + ' GHSJ < to_date('''+sysutils.DateTimeToStr(lEndTime)+''',''yyyy-mm-dd'')';

  end;
  FFilterDate := lFilterSql;
  Label9.Caption := FFilterDes;
  FLastTimeIndex := cmbCreateDate.ItemIndex;
end;


代码停在新增加的那段上
回复 支持 反对

使用道具 举报

发表于 2008-8-20 10:30:04 | 显示全部楼层

Re: [请求]查询报错问题

最初由 Crazy_wen2006 发布
[B]if (Edit1.Text <>'') and (Edit2.Text <>'')  then
    lFilterSql := lFilterSql + ' and CFHYFRL >= '+Edit1.Text+' and CFHYFRL <=' +Edit2.Text+' ';
[/B]

在这句后面设个断点, 执行时用Ctrl + F7看一下lFilterSql 的值
回复 支持 反对

使用道具 举报

发表于 2008-8-20 10:30:11 | 显示全部楼层
楼主,
1、新加的代码是否就是1楼的蓝色部分呢?
2、如果是,请设置一下断点,把  lFilterSql   这个值贴出来看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-20 10:40:44 | 显示全部楼层
1.蓝色部分是新增代码
2.在此后设置断点
  表达式错误:
Incompatible types: "String" and "RuntimeTypeHandle"
回复 支持 反对

使用道具 举报

发表于 2008-8-20 11:05:23 | 显示全部楼层
你设置到哪里去了,设置到 给 lFilterSql  这个复制的地方,看看后面给的表达式是啥?

是 ' and CFHYFRL >= '+Edit1.Text+' and CFHYFRL <=' +Edit2.Text+' '; 这个写的有问题,你可以看一下,应该不是你要的结果,少了一些引号,你可以看一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-20 15:11:55 | 显示全部楼层
查询目前可以实现,只是在退出功能的时候报错
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-20 23:11 , Processed in 0.046920 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表