起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 151|回复: 6

【搞定】查找数据时报错!帮忙看一下.**

[复制链接]
发表于 2007-4-24 14:45:53 | 显示全部楼层 |阅读模式
我在筛选数据是出现下面的错误提示,List index out of bounds (-1)

我的代码是这样的,不知道有没什么问题?
procedure TXMGZBGCX.Button1Click(Sender: TObject);
    var s1,s2: string;
    var cSelectsql : string;
   begin
     s1 := DataLocateComboBox1.DataField;
     s2 := DataLocateComboBox2.DataField;
     cSelectsql := 'select * from  IT_WORKREPORT where FPostDept := s1 and FPoster := s2';
     dsbmaster.DataSet.open;
     if dsbmaster.DataSet.RecordCount >= 0 then
     begin
       TSQLDataSet(dsbmaster.DataSet).SQLFilter := cSelectsql;
       TSQLDataSet(dsbmaster.DataSet).SQLFiltered := True;
       dsbmaster.DataSet.close;
     end;
  end;
end.
回复

使用道具 举报

发表于 2007-4-24 14:58:22 | 显示全部楼层
调试运行一下,看错误定位在哪里。

感觉和你这段代码没有关系。
回复 支持 反对

使用道具 举报

发表于 2007-4-24 14:58:24 | 显示全部楼层
代码这样写有问题,这样改一下试试
procedure TXMGZBGCX.Button1Click(Sender: TObject);
var
  s1,s2: string;
  cSelectsql : string;
begin
  // s1 := DataLocateComboBox1.DataField;
  // s2 := DataLocateComboBox2.DataField;
  //s1,s2 的值应该通过DataLocateComboBox1,DataLocateComboBox2所绑定的数据集得到,比如
  // DataLocateComboBox1绑定的数据集代理是DataSetBroker1,关键字段是FID
  // DataLocateComboBox1绑定的数据集代理是DataSetBroker2,关键字段是FID
  s1 := DataSetBroker1.DataSet.FieldByName('FID')asString;
  s2 := DataSetBroker2.DataSet.FieldByName('FID')asString;

  cSelectsql := 'select * from  IT_WORKREPORT where FPostDept = '''+s1+''' and FPoster = '''+s2+'''';
  dsbmaster.DataSet.open;
  if dsbmaster.DataSet.RecordCount >= 0 then
  begin
    TSQLDataSet(dsbmaster.DataSet).SQLFilter := cSelectsql;
    TSQLDataSet(dsbmaster.DataSet).SQLFiltered := True;
  //  dsbmaster.DataSet.close;  这一句不应该要了
  end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-24 15:20:21 | 显示全部楼层
我按照您的提示改过之后,按纽不起作用.代码如下:
procedure TXMGZBGCX.FormDocCreate(Sender: TObject);
begin
         //
end;

procedure TXMGZBGCX.FormDocDestroy(Sender: TObject);
begin
//
end;

procedure TXMGZBGCX.DataGrid1DblClick(Sender: TObject);
begin
  PageControl1.ActivePage :=TabSheet2;
end;

procedure TXMGZBGCX.Button1Click(Sender: TObject);
var s1,s2: string;
var cSelectsql : string;
begin
s1 := DataSetBroker1.DataSet.FieldByName('FPostDeptName').AsString;
s2 := DataSetBroker1.DataSet.FieldByName('FPosterName').AsString;
   cSelectsql := 'select * from  IT_WORKREPORT where FPostDept := '''+s1+''' and FPoster := '''+s2+'''';
   dsbmaster.DataSet.open;
   if dsbmaster.DataSet.RecordCount >= 0 then
   begin
   TSQLDataSet(dsbmaster.DataSet).SQLFilter := cSelectsql;
   dsbmaster.DataSet.Filtered:= True;
   end;
end;
end.

提示错误没有了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-24 15:35:35 | 显示全部楼层
查询数据集中只有一条数据可以不通过DataLocateComboBox1字段值筛选,那我的查询数据集中有多条数据,那怎么辨别是筛选哪条呢?
s1 := DataSetBroker1.DataSet.FieldByName('FPostDeptName').AsString;
s2 := DataSetBroker1.DataSet.FieldByName('FPosterName').AsString;
cSelectsql := 'select * from  IT_WORKREPORT where FPostDept := '''+s1+''' and FPoster := '''+s2+'''';
回复 支持 反对

使用道具 举报

发表于 2007-4-24 15:47:32 | 显示全部楼层
dsbmaster.DataSet.Filtered:= True;
要改成    TSQLDataSet(dsbmaster.DataSet).SQLFiltered := True;
s1 := DataSetBroker1.DataSet.FieldByName('FPostDeptName').AsString;这样写s1得到的值就是 DataSetBroker1对应数据集的当前所选择的那一行的FPostDeptName字段的值
回复 支持 反对

使用道具 举报

发表于 2007-9-15 15:30:28 | 显示全部楼层
由于楼主长时间未跟贴,此帖先结,有问题请开新帖.
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-16 09:05 , Processed in 0.036705 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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