DBgrid控件报“Grid index out of range”错误,不知为什么? ( 积分: 50 )

S

sutao01

Unregistered / Unconfirmed
GUEST, unregistred user!
我用DBgrid控件显示数据,通过单选框来选择不同的数据表。第一张表完全没有问题,但选择第二或后边几张表时,显示正常但如将滚动条拖到最后一条记录就会报一个“Grid index out of range”的错误,点击确定后可以正常显示,已后拖动滚动条也不会错了。数据选择用的是ADOQuery控件,通过执行SQL实现的。
 
我用DBgrid控件显示数据,通过单选框来选择不同的数据表。第一张表完全没有问题,但选择第二或后边几张表时,显示正常但如将滚动条拖到最后一条记录就会报一个“Grid index out of range”的错误,点击确定后可以正常显示,已后拖动滚动条也不会错了。数据选择用的是ADOQuery控件,通过执行SQL实现的。
 
跟踪到dbgrid里面去看看吧,你给的信息太少。
 
楼主在切换数据表的时候,是不是让DBGrid触发了某事件,而楼主在处理这个事件的时候没有考虑数据表已经切换。
 
我程序的源代码是:
function SortName:string;
begin
Result:=form1.ListBox1.Items[form1.ListBox1.ItemIndex];
end;
function GetSerchOpition:TLocateOptions;
var
SerchOpition:TLocateOptions;
begin
if form1.CheckBox1.Checked then
SerchOpition:=SerchOpition+[loPartialKey];
Result:=SerchOpition;
end;
procedure FillFields;
var
i:integer;
begin
form1.ListBox1.Items.Clear;
for i:=0 to form1.ADOQuery1.FieldCount-1 do
begin
form1.ListBox1.Items.Add(form1.ADOQuery1.Fields.DisplayName);
end;
form1.ListBox1.Selected[0]:=true;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FillFields;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
with form1.ADOQuery1 do begin
if Locate(form1.ListBox1.Items[form1.ListBox1.ItemIndex],trim(form1.Edit1.Text),GetSerchOpition)=false then
MessageBox(0,'没有查询到符合条件的记录','提示',MB_Iconexclamation);
end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
form1.ADOQuery1.Sort:=SortName+' '+'ASC';
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
form1.ADOQuery1.Sort:='';
form1.ADOQuery1.Active:=false;
form1.ADOConnection1.Connected:=false;
form2.Close;
form1.Close;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
form2.close
end;

function getsortstring:string;
var
sortstring:string;
begin
sortstring:=rightstr(form1.adoquery1.sort,3);
if sortstring='ASC' then
sortstring:='DESC'
else
sortstring:='ASC';
result:=sortstring;
end;
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
form1.ADOQuery1.Sort:=Column.DisplayName+' '+getsortstring;
end;

procedure TForm1.RadioButton1Click(Sender: TObject);
var
sql:string;
begin
form1.Caption:='教职工入网管理';
sql:='select * from jfjl';
form1.ADOQuery1.sql.clear;
form1.ADOQuery1.SQL.Add(sql);
form1.ADOQuery1.Active:=true;
FillFields
end;

procedure TForm1.RadioButton2Click(Sender: TObject);
var
sql:string;
begin
form1.Caption:='网络交换路由设备管理';
sql:='select * from switch';
form1.ADOQuery1.SQL.Clear;
form1.ADOQuery1.SQL.Add(sql);
form1.ADOQuery1.Active:=true;
FillFields
end;

procedure TForm1.RadioButton3Click(Sender: TObject);
var
sql:string;
begin
form1.Caption:='教学办公IP管理';
sql:='select * from officeip';
form1.ADOQuery1.SQL.Clear;
form1.ADOQuery1.SQL.Add(sql);
form1.ADOQuery1.Active:=true;
FillFields
end;

end.
 

Similar threads

D
回复
0
查看
746
DelphiTeacher的专栏
D
D
回复
0
查看
749
DelphiTeacher的专栏
D
D
回复
0
查看
595
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部