起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1502|回复: 35

【结】一个有关数据集的问题

[复制链接]
发表于 2009-9-6 18:56:11 | 显示全部楼层 |阅读模式
我做了个功能窗体,功能窗体上有几个dataEdit控件,这些dataEdit控件的数据源,指向dataSetBroker1.
问题是:
我想让这个功能窗体打开的时候,就让dataEdit显示dataSetBroker1中的某条数据。
procedure TMainForm.BizFormShow(Sender: TObject); 中的部分代码如下:
TSQLdataset(datasetbroker1.DataSet).SQLFilter:='bm='''+LastBM+''' and RQ=to_date('''+sysutils.DateToStr(lastRQ)+''', ''yyyy-mm-dd'') and BC='''+lastBC+'''';
   TSQLdataset(datasetbroker1.DataSet).SQLFiltered:=true;
datasetbroker1.DataSet.open;
      datasetbroker1.DataSet.Refresh;
   if datasetbroker1.DataSet.RecordCount>0 then
   begin
  ……
  end;
经验证: TSQLdataset(datasetbroker1.DataSet).SQLFilter的值可以在数据库的表中取到一条记录,可不知道为什么:datasetbroker1.DataSet.RecordCount>的值总是0?
这可怎么办?
回复

使用道具 举报

 楼主| 发表于 2009-9-6 19:03:47 | 显示全部楼层

一个有关数据集的问题

我做了个功能窗体,功能窗体上有几个dataEdit控件,这些dataEdit控件的数据源,指向dataSetBroker1.
问题是:
我想让这个功能窗体打开的时候,就让dataEdit显示dataSetBroker1中的某条数据。
procedure TMainForm.BizFormShow(Sender: TObject); 中的部分代码如下:
TSQLdataset(datasetbroker1.DataSet).SQLFilter:='bm='''+LastBM+''' and RQ=to_date('''+sysutils.DateToStr(lastRQ)+''', ''yyyy-mm-dd'') and BC='''+lastBC+'''';
   TSQLdataset(datasetbroker1.DataSet).SQLFiltered:=true;
datasetbroker1.DataSet.open;
      datasetbroker1.DataSet.Refresh;
   if datasetbroker1.DataSet.RecordCount>0 then
   begin
  ……
  end;
经验证: TSQLdataset(datasetbroker1.DataSet).SQLFilter的值可以在数据库的表中取到一条记录,可不知道为什么:datasetbroker1.DataSet.RecordCount>的值总是0?
这可怎么办?
回复 支持 反对

使用道具 举报

发表于 2009-9-7 08:50:32 | 显示全部楼层
在数据集打开后设置一个断点,
然后查看一下TSQLdataset(datasetbroker1.DataSet).DataFetch.CommandText
里面的sql语句是什么?把sql语句放到plsql中执行一下看看结果
回复 支持 反对

使用道具 举报

发表于 2009-9-7 08:58:22 | 显示全部楼层
楼主,先说说你的设计吧
你这样的需求,应该是默认关闭的,然后直接发SQL语句,在Open 数据集,所以不要用SQLFilter。如果数据量比较大,那么肯定会影响性能的,即打开功能的速度,

再说你的代码吧
如果设置SQLFilter,那么不需要执行数据集的Refresh,设置SQLFiltered 为True,会自动过滤数据的,所以datasetbroker1.DataSet.Refresh;没要用。

至于你说的RecordCount为0,如果过滤出确实有数据,这个值不应该为0的,你看到界面上有
DataEdit 有数据显示吗?
另外,你在何时看RecordCount 这个值的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-7 09:46:12 | 显示全部楼层
3楼的回答:TSQLdataset(datasetbroker1.DataSet).DataFetch.CommandText的值为
select * from ZBJLB where (bm = 'CLD' and RQ = to_date('2009-9-3', 'yyyy-mm-dd') and BC = '中班')
放在Toad for oracle 中查询了一下,查出来了一条记录。
4楼的回答:代码执行到
if datasetbroker1.DataSet.RecordCount>0 then 的时候,看到datasetbroker1.DataSet.RecordCount的值为0,DataEdit没有任何数据显示。
不用sqlfilter,用userfilter吗?我两个都试过,对于解决这个问题没有帮助。数据集的刷新refresh,我可以把它去掉。
回复 支持 反对

使用道具 举报

发表于 2009-9-7 09:51:23 | 显示全部楼层
那你把对象设计器打开(ctrl+alt+shift+o),看看这个数据集上还有没有其他的策略呢?
回复 支持 反对

使用道具 举报

发表于 2009-9-7 10:36:42 | 显示全部楼层
我不是说不用SQLFilter用userfilter,而是,直接给把“select * from ZBJLB where (bm = 'CLD' and RQ = to_date('2009-9-3', 'yyyy-mm-dd') and BC = '中班') ”这个赋值给SQL语句,即给
TSQLDataSet(datasetbroker1.DataSet).SQL.Text 赋值,或者直接把这个SQL语句定义到数据集上,看看是否有数据,
从你的描述看,说 DataEdit没有任何数据显示 没有数据,说明这个SQL过去客户端没有得到任何数据哦,RecordCount 这个值为0,是正常的。我问一下你的rq字段,是日期型的,还是日期时间型的,就是是否带时间呢?
或者说你在给数据集定义SQL语句,见附件图,从数据库中是否看到有'2009-9-3'这个值,后面是否带时间了

无标题.gif

26.92 KB, 下载次数: 401

回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-7 10:55:01 | 显示全部楼层
日期(RQ)字段的数据类型是日期时间,表现类型是日期。
见下面的图:

qq3.png

19.35 KB, 下载次数: 391

回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-7 10:56:18 | 显示全部楼层
我把代码改成了这样:
DataSetBroker1.DataSet.Close;
   Tsqldataset(DataSetBroker1.DataSet).SQL.Clear;
   Tsqldataset(DataSetBroker1.DataSet).SQL.Text:='select * from ZBJLB where '+'bm='''+LastBM+''' and RQ=to_date('''+sysutils.DateToStr(lastRQ)+''', ''yyyy-mm-dd'') and BC='''+lastBC+'''';
   DataSetBroker1.DataSet.Open;
        datasetbroker1.DataSet.Refresh;
   if datasetbroker1.DataSet.RecordCount>0 then
    dialogs.ShowMessage('查出来有记录!');
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-7 10:57:25 | 显示全部楼层
我把代码改成了这样:
DataSetBroker1.DataSet.Close;
   Tsqldataset(DataSetBroker1.DataSet).SQL.Clear;
   Tsqldataset(DataSetBroker1.DataSet).SQL.Text:='select * from ZBJLB where '+'bm='''+LastBM+''' and RQ=to_date('''+sysutils.DateToStr(lastRQ)+''', ''yyyy-mm-dd'') and BC='''+lastBC+'''';
   DataSetBroker1.DataSet.Open;
        datasetbroker1.DataSet.Refresh;
   if datasetbroker1.DataSet.RecordCount>0 then
    dialogs.ShowMessage('查出来有记录!');

这样的执行结果是:依然recordcount为0
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-16 07:40 , Processed in 0.044659 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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