用Tabel.AddIndex()方法给一个已建表建立索引,出现Table is busy错误,是什么
原因?
1. D:\delphi\dbf\ 有unsday.db
2. BDE,standard1别名,Paradox驱动
3. 代码
   Table1.active:=false;
   Table1.AddIndex('IdxStime','STIME',[ixPrimary]);
   table1.active:=true;

解决方案 »

  1.   

    table1.Close;
    TABLE1.Exclusive:=TRUE;
    Table1.AddIndex('index_id','id',[ixPrimary]);
    table1.Open;搞定
      

  2.   

    不可以在表被打开的情况下做索引的操作的!先关闭,最后才Active
      

  3.   

    一般table is busy 是因为库正被使用中,关闭应该就可以了~~
    如果还是不行能否等你解决了告诉我呵呵自己再试试~~~
      

  4.   

    table.lock()
    table.unlock()但有新问题,既不能使用打开的DataSet,也不能使用关闭的DateSet,BDE在嫖我!
      

  5.   

    打开表后再添加索引:
      Table1.Active := False;
      Table1.open;
      Table1.Addindex('NewIndex','Index',[ixPrimary]);
      Talbe1.Refresh;
      Table1.Active := True;
      

  6.   

    我前几天遇见过。你先重启动机器,如果不行。你照下面的做。
                   with table1 do
                     begin
                     Active:=false;
                    TableType:=xxxxx;       {数据库类型}
                         {增加索引}
                     AddIndex(表名,'字段',[ixPrimary,ixUnique]);
                     end;
      

  7.   

    创 建 表 索 引 
    ---- (1) 用Table.AddIndex 来 实 现 
    ---- 方 法:AddIndex( IndexName,FieldNames,Options ) 
    ---- 其 中:( 详 见Delphi 帮 助) 
    ---- IndexName: 索 引 名 称, 仅 在 指 定 次 索 引 时 有 作 用. 
    ---- FieldNames: 索 引 域, 可 指 定 多 个 域, 各 域 之 间 用 分 号 隔 开, 如'Field1;Field2;Field3' 
    ---- Options: 索 引 选 项, 可 为[ixPrimary, ixUnique, ixDescending, ixCaseInsensitive, ixExpression] 
    ---- 其 中: 
    ---- ixPrimary : 建 立 的 索 引 为 主 索 引( 不 适 用 于dBase 数 据 表). 
    ---- ixUnique : 不 允 许 重 复 值 的 索 引. 
    ---- ixDescending: 按 降 序 索 引. 
    ---- ixCaseInsensitive: 索 引 排 序 时 按 忽 略 大 小 写( 不 适 用 于dBase 数 据 表). 
    ---- ixExpression: 建 立 表 达 式 索 引( 适 用 于Delphi3.0, 仅 适 用 于dBase 数 据 表). 
    ---- ixNonMaintained: 是 否 不 需 要BDE 自 动 维 护( 适 用 于Delphi1.0). ---- 下 面 是 一 个 例 子: ---- 假 设 有 一 个 存 放 通 讯 录 数 据 表MyComm.DB( 类 型 为Paradox) 存 放 于 本 地 目 录d:\mynote 下, 现 建 立 一 个 主 索 引( 索 引 域 为 编 号ID) 和 一 个 次 索 引( 索 引 域 为 编 号ID 和 姓 名Name, 索 引 名 称 为NameIndex).   with table1 do
         begin
       close;
       Exclusive := true;
       DatabaseName := 'd:\MyNote';
       TableName := 'MyComm.DB';
       Open;   {建立主索引 }
       AddIndex('','ID',[ixPrimary]);   {建立次索引 }
       AddIndex('NameIndex','ID;Name',[]);
       
       close;
         end;
      (2)用SQL来实现
     对Paradox数据表来说,用SQL只能建立次索引.
     在SQL语法中,用来建立索引的语句是:
      Create Index IndexName On TableName
      (IndexField1,IndexField2,..)
     其中:
      IndexName为一个次索引的名称,如MySecIndex1等.
      TableName为对应数据表的名称,如MyTable等.
      TableName后面为索引域列表,所有索引域有圆括号括起来,
       各索引域之间用逗号隔开.
     ---- 下 面 是 一 个 例 子: ---- 假 设 有 一 个 存 放 通 讯 录 数 据 表MyComm.DB( 类 型 为Paradox) 存 放 于 本 地 目 录 ---- d:\mynote 下, 现 建 立 一 个 次 索 引( 索 引 域 为 编 号ID 和 姓 名Name, 索 引 名 称 为NameIndex).  with query1 do
     begin
     close;
     DatabaseName := 'd:\MyNote';{建立次索引NameIndex}
      sql.clear;
      sql.add( 'Create Index NameIndex On MyComm(ID,Name)' );
         execSql;
     end;
     二. 删 除 表 索 引 
    ---- (1) 用Table.DeleteIndex 来 实 现 
    ---- DeleteIndex 只 能 删 除 次 索 引 名 称. 
    ---- 方 法:DeleteIndex( IndexName ) 
    ---- 其 中:( 详 见Delphi 帮 助) 
    ---- IndexName: 次 索 引 名 称. ---- 下 面 是 一 个 例 子: ---- 假 设 有 一 个 存 放 通 讯 录 数 据 表MyComm.DB( 类 型 为Paradox) 存 放 于 本 地 目 录 ---- d:\mynote 下, 现 有 一 个 次 索 引( 索 引 域 为 编 号ID 和 姓 名Name, 索 引 名 称 为NameIndex), 将 删 除 之.   with table1 do
         begin
       close;
       Exclusive := true;
       DatabaseName := 'd:\MyNote';
       TableName := 'MyComm.DB';
       Open;   {删除次索引}
       DeleteIndex('NameIndex');
       
       close;
         end;
     ---- (2) 用SQL 来 实 现 
    ---- 在SQL 语 法 中, 用 来 删 除 索 引 的 语 句 是: 
    ---- Drop Index TableName.IndexName 
    ---- 要 删 除 次 索 引 时,IndexName 为 一 个 次 索 引 的 名 称, 如'MyTable.MySecIndex1' 等. 
    ---- 要 删 除 主 索 引 时,IndexName 为'primary', 如'MyTable.primary'; 值 得 注 意 的 是, 在 删 除 主 索 引 成 功 后, 数 据 表 的 所 有 次 索 引 也 自 动 删 除. ---- 下 面 是 一 个 例 子: 
    ---- 假 设 有 一 个 存 放 通 讯 录 数 据 表MyComm.DB( 类 型 为Paradox) 存 放 于 本 地 目 录 
    ---- d:\mynote 下, 已 定 义 一 个 主 索 引( 索 引 域 为 编 号ID) 和 一 个 次 索 引( 索 引 域 为 编 号ID 和 姓 名Name, 索 引 名 称 为NameIndex). 
    ---- 现 在 因 为 索 引 损 坏, 要 删 除 索 引, 以 便 重 新 索 引.   with query1 do
         begin
       close;
       DatabaseName := 'd:\MyNote';   {删除次索引NameIndex }
              sql.clear;
              sql.add( 'Drop Index MyComm.NameIndex' );
              execSql;   {删除主索引 }
              sql.clear;
              sql.add( 'Drop Index MyComm.Primary' );
              execSql;
         end;
     三. 注 意 事 项: 
    ---- (1) 在 索 引 更 改 时, 应 保 证 对 应 的 数 据 表 可 以 以 独 占 方 式(Exclusive=true) 打 开, 否 则 会 引 起 错 误. 
    ---- (2) 上 述 方 法 略 加 修 改 后, 也 可 用 于dBase,Oracle 等 其 它 数 据 库 的 数 据 表. 
    ---- (3) 如 果 需 要 重 新 对 索 引 文 件 进 行 索 引, 请 参 考BDE 的Dbi 函 数 说 明: 
    ---- RegenIndex, RegenIndexes. 
      

  8.   

    你上机试过没有?Delphi6.0环境下能通过吗?代码将会产生异常:Table is busy!with table1 do
         begin
       close;
       Exclusive := true;
       DatabaseName := 'd:\MyNote';
       TableName := 'MyComm.DB';
       Open;   {建立主索引 }
       AddIndex('','ID',[ixPrimary]);   {建立次索引 }
       AddIndex('NameIndex','ID;Name',[]);
       
       close;
      

  9.   

    你上机试过没有?Delphi6.0环境下能通过吗?代码将会产生异常:Table is busy!with table1 do
         begin
       close;
       Exclusive := true;
       DatabaseName := 'd:\MyNote';
       TableName := 'MyComm.DB';
       Open;   {建立主索引 }
       AddIndex('','ID',[ixPrimary]);   {建立次索引 }
       AddIndex('NameIndex','ID;Name',[]);
       
       close;
      

  10.   

    Is there no body can answer the question?
    ÎÒÊÔ³öÀ´²»Ðа¡£¬Delphi 6.0»·¾³£¬Windows2000 or Windows98,
    ϵͳÓÐVisiual Studio 6.0.