起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 169|回复: 7

按DataGrid 自带的排序时报错:Index is being used to order table.

[复制链接]
发表于 2009-9-9 13:10:02 | 显示全部楼层 |阅读模式
procedure TSALE_CHECK_FRMDOC.ButtonMARKSTATUSClick(Sender: TObject);
var
iCount :Integer;
str_status : String;
begin
     iCount:=-1;
     if dabSALE_CHECK_CONDITION_DT.DataSet.FieldByName('STATUS').AsInteger = 2 then
     begin
          Dialogs.ShowMessage('请先选择复核状态!');
          SysUtils.Abort;
     end;
     if (dsbSALE_CHECK_DETIAL_DT.DataSet.Active) AND (not dsbSALE_CHECK_DETIAL_DT.DataSet.IsEmpty) AND (dabSALE_CHECK_CONDITION_DT.DataSet.FieldByName('STATUS').AsInteger <> 2) then
     begin
         if Jsdialogs.ConfirmBox( #13#10+'选是:将所有已标记的状态更改为所选择的复核状态;'+#13#10+'选否:仅将当前选择的数据状态更改为所选择的复核状态;'+#13#10#1310+'注:状态是“已复核”且保存过的数据不会作任何的修改!','提示',2) then
         begin
              iCount :=0;
              cDataSet.CloneCursor(self.dsbSALE_CHECK_DETIAL_DT.DataSet,false,false,true);
              if dsbSALE_CHECK_DETIAL_DT.DataSet.State in [TDataSetState.dsEdit,TDataSetState.dsInsert] then
                 dsbSALE_CHECK_DETIAL_DT.DataSet.Post;
              cDataSet.Last;
              cDataSet.DisableControls;
              while not cDataSet.Bof do
              begin
                   if ( cDataSet.FieldByName('mark').AsInteger = 1 ) and ( cDataSet.FieldByName('ADJUST_STATUS').AsInteger<>1 ) then
                   begin
                        cDataSet.Edit;
                        cDataSet.FieldByName('CHECK_STATUS').AsInteger := dabSALE_CHECK_CONDITION_DT.DataSet.FieldByName('STATUS').AsInteger;
                        iCount:=iCount+1;
                   end;
                   cDataSet.Prior;
              end;
              cDataSet.Post;
              cDataSet.EnableControls;
         end;
         if iCount=0 then
         begin
              Jsdialogs.ShowMsg('该复核状态不允许再修改!','提示!');
              SysUtils.Abort;
         end;
         if dabSALE_CHECK_CONDITION_DT.DataSet.FieldByName('STATUS').AsInteger =1 then
            str_status :='已复核';
         if dabSALE_CHECK_CONDITION_DT.DataSet.FieldByName('STATUS').AsInteger =0 then
            str_status :='未复核';
         Dialogs.ShowMessage('已将标记过的数据更改为“'+str_status+'”,保存后即生效!');
     end;
end;
回复

使用道具 举报

 楼主| 发表于 2009-9-9 13:14:24 | 显示全部楼层
我在数据集里加了一个临时字段作为标记,按更改状态时把标记的状态该为特定状态,功能代码在1楼,能实现更改状态,但是点datagrid自带的排序时却报错
请问是什么原因啊?该怎么改?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-9 13:17:29 | 显示全部楼层
再次点击 “更改状态”时,执行是相同的代码,但是,然来的错误又没有了。

希望各位能帮帮我啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-9 13:19:06 | 显示全部楼层
也就是 点击 点击 “更改状态” 按钮的次数为 单是报错,为双时没问题
回复 支持 反对

使用道具 举报

发表于 2009-9-9 14:04:19 | 显示全部楼层
楼主,你的问题之前有问过。
原来的是怎么解决的呢?

你这里说的不是很明白。是否可以做个能说明这个问题的简单例子传资源上来看看呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-9 18:32:27 | 显示全部楼层
这是我做的一些测试集合,
你看看吧
还有一个表没建字典.sales_record_check
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-10 14:35:33 | 显示全部楼层
昨天没加到,
回复 支持 反对

使用道具 举报

发表于 2009-9-10 14:44:27 | 显示全部楼层
还是像上次那样传例子吧,代码这样看不出来什么问题
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-16 07:22 , Processed in 0.044377 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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