我在表单里放了一个TDBGridEh控件,想点击标题栏后排序,现在碰到问题,在TADBQuery未打开时点击标题栏,系统会提示:“Access violation at address 00546D09 in module 'project1.exe'.Read of address 00000000.”错误,请问如何判断TADBQuery?
//点击标题栏时调用排序函数
procedure TForm3.DBGridEh1TitleBtnClick(Sender: TObject; ACol: Integer;Column: TColumnEh);
begin
//我写下句的目的:数据集打开并且记录数不为零才执行排序函数,可是,试后这样判断数据集是否已打开会提示上面的错误,请问如何判断
if (query_gonghao.Active=true) and (query_gonghao.RecordCount<>0) then
my_sort(dbgrideh1);
end;//排序函数
procedure TForm3.my_sort(grid:TDBGridEh);
begin
//注意:用该函数时,要先引用EhLibADO,否则不会排序
grid.OptionsEh:=grid.OptionsEh+[dghAutoSortMarking];
grid.ColumnDefValues.Title.TitleButton:=true;
grid.SortLocal:=true;
end;
//点击标题栏时调用排序函数
procedure TForm3.DBGridEh1TitleBtnClick(Sender: TObject; ACol: Integer;Column: TColumnEh);
begin
//我写下句的目的:数据集打开并且记录数不为零才执行排序函数,可是,试后这样判断数据集是否已打开会提示上面的错误,请问如何判断
if (query_gonghao.Active=true) and (query_gonghao.RecordCount<>0) then
my_sort(dbgrideh1);
end;//排序函数
procedure TForm3.my_sort(grid:TDBGridEh);
begin
//注意:用该函数时,要先引用EhLibADO,否则不会排序
grid.OptionsEh:=grid.OptionsEh+[dghAutoSortMarking];
grid.ColumnDefValues.Title.TitleButton:=true;
grid.SortLocal:=true;
end;
判断是否打开就是if ADOQuery.Active
你的query_gonghao对象是在哪里创建的,是否没有Create,或Create了又被Free
begin
if query_gonghao.Active=true then
my_sort(dbgrideh1);
end;//(下面过程是控件开发商提供的,在EhLibADO单元里)
//象上面那样写判断语句的话,如果数据集未打开时会跳过my_sort(dbgrideh1),但是,仍然会进入TDBGridEh控件开发商提供的排序函数内,其原始代码如下:procedure TADOSQLDatasetFeaturesEh.ApplySorting(Sender: TObject;
DataSet: TDataSet; IsReopen: Boolean);
begin
if Sender is TCustomDBGridEh then
if TCustomDBGridEh(Sender).SortLocal then
SortDataInADODataSet(TCustomDBGridEh(Sender), TCustomADODataSet(DataSet))
else
//执行到该局时就提示内存访问错误了
inherited ApplySorting(Sender, DataSet, IsReopen);
end;
procedure TADOSQLDatasetFeaturesEh.ApplySorting(Sender: TObject;
DataSet: TDataSet; IsReopen: Boolean);
begin
if Sender is TCustomDBGridEh then
if TCustomDBGridEh(Sender).SortLocal then
SortDataInADODataSet(TCustomDBGridEh(Sender), TCustomADODataSet(DataSet))
else
if DataSet.Active=true then //加上该句后就不会提示内存错误了
inherited ApplySorting(Sender, DataSet, IsReopen);
end;