关于Grid Index Out Of Range 的问题

sleaf 2009-02-16 10:16:07
我在窗体中添加了一个PageContol组件,通过切换PageContol的页面来实现不同数据表的全部记录显示,代码如下
procedure TForm2.PageControl1Change(Sender: TObject);
begin
if pagecontrol1.TabIndex=0 then
begin
datamodule1.ADOQuery2.Close;
with datamodule1.ADOQuery1 do
begin
close;
sql.Clear;
sql.Add('select * from 年度培训计划表 order by 年度, 编号 ASC');
open;
last;
end;
DBGrid1.DataSource:=datamodule1.DataSource1;
DBNavigator1.DataSource:=datamodule1.DataSource1;
end;
if pagecontrol1.TabIndex=1 then
begin
datamodule1.ADOQuery1.Close;
with datamodule1.ADOQuery2 do
begin
close;
sql.Clear;
sql.Add('select * from 计划外培训项目表 order by 编号 ASC');
open;
last;
end;
DBGrid1.DataSource:=datamodule1.DataSource2;
DBNavigator1.DataSource:=datamodule1.DataSource2;
end;
end;
窗体显示时Pagecontrol的Tabindex为0,代码如下:
procedure TForm2.FormShow(Sender: TObject);
begin
dbgrid1.DataSource:=datamodule1.DataSource1;
dbnavigator1.DataSource:=datamodule1.DataSource1;
with datamodule1.ADOQuery1 do
begin
close;
sql.Clear;
sql.Add('select * from 年度培训计划表 order by 年度, 编号 ASC');
open;
last;
end;
end;

然后我又增加了一个按钮,点击时显示表的全部记录,代码如下:
procedure TForm2.QueryAllClick(Sender: TObject);
begin
if pagecontrol1.TabIndex=0 then
begin
datamodule1.ADOQuery2.Close;
with datamodule1.ADOQuery1 do
begin
close;
sql.Clear;
sql.Add('select * from 年度培训计划表 order by 年度, 编号 ASC');
open;
last;
end;
DBGrid1.DataSource:=datamodule1.DataSource1;
DBNavigator1.DataSource:=datamodule1.DataSource1;
end;
if pagecontrol1.TabIndex=1 then
begin
datamodule1.ADOQuery1.Close;
with datamodule1.ADOQuery2 do
begin
close;
sql.Clear;
sql.Add('select * from 计划外培训项目表 order by 编号 ASC');
open;
last;
end;
DBGrid1.DataSource:=datamodule1.DataSource2;
DBNavigator1.DataSource:=datamodule1.DataSource2;
end;
end;

现在的问题在于,当窗体显示时,我点击该按钮,就会出错,弹出出现异常:Grid index out of range 。
利用F7跟踪调试,发现错误在last这条语句上。

我搞了半天也没弄明白为什么会出错,敬请大家赐教!!!!!!
...全文
1011 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaoyanxing1029 2009-02-17
  • 打赏
  • 举报
回复
看一下DBGrid和ADOQuery1字段的关联,这个是字段超界了,应该是在执行open的时候报的错
sleaf 2009-02-17
  • 打赏
  • 举报
回复
代码没有问题,用first也没有问题,错误也没有出现在open上,就是在last语句上,而且第一次用last没有出错,但重复以前的操作时到了last语句就报错了。
de410 2009-02-17
  • 打赏
  • 举报
回复
试一试把 last改为first,看看怎么样?
火龙岛主 2009-02-17
  • 打赏
  • 举报
回复
你DataSource1和DataSource2关联的数据集是不是设置字段了。
bdmh 2009-02-17
  • 打赏
  • 举报
回复
每个last都会出错吗?
数据集是不是有afterscroll0之类的事件,看看里面有没有什么代码问题
starluck 2009-02-16
  • 打赏
  • 举报
回复
年度培训计划表,计划外培训项目表

这二个表的表结构一样吗?GRID的字段是不是已经静态化了?
sleaf 2009-02-16
  • 打赏
  • 举报
回复
问题补充:不仅如此,而且每次点击DBNavigator移动到最后一条记录的按钮时也会出现上述问题。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧