⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dpi28.htm

📁 delphi 教程 Delphi 6 常见的大部分函数的使用方法及使用例子
💻 HTM
字号:
<html>
<head>
<title>用Dephi程序维护Paradox 数据表的索引</title>
 
 
 
 
 
<meta content="text/html; charset=gb2312" http-equiv=Content-Type>
 
 
</head>
<p align="center"><script src="../../1.js"></script></a>

<body bgcolor="#ffffff" leftmargin="5" topmargin="1" marginheight="5" marginwidth="5">
<div align=center> 
  <table border=0 cellpadding=0 cellspacing=0 width=680 align="center">
    <tbody> 
    <tr> 
       
    </tr>
    </tbody> 
  </table>
  <table border=0 bordercolordark=#66aaff bordercolorlight=#66aaff cellpadding=0 
cellspacing=0 width=680 align="center" height="128">
    <tbody> 
    <tr> 
      <td bgcolor=#F9D23C height=14> 
        <div align=center class=H1> <b><font 
      color=#ffa000><b><font color="#FFFFFF">用Dephi程序维护Paradox 数据表的索引</font><font size="3" color="#FFFFFF"> 
          </font></b></font></b></font></div>
      </td>
    </tr>
    <tr valign=top> 
      <td class=H1 height=236> 
        <p align="center"><b><font size="3"><br>
          </font></b>  <br>
          在 数 据 库 编 程 中, 索 引 文 件 对 于 改 善 数 据 查 询 速 度 有 着 举 足 轻 重 的 作 用, 充 分 使 
          用 索 引 文 件 可 以 极 大 改 善 数 据 库 应 用 程 序 的 性 能, 这 一 点 恐 怕 是 难 以 否 认 的. <br>
          <br>
            在 应 用 过 程 中, 用 户 的 查 询 条 件 可 能 是 多 种 多 样 的, 如 果 能 根 据 用 户 查 询 建 立 
          和 选 择 索 引, 对 于 保 证 应 用 程 序 的 性 能, 无 疑 是 很 有 帮 助 的. <br>
          <br>
            另 外, 由 于 停 电 等 意 外 事 故 很 容 易 造 成 数 据 库 中 的 索 引 文 件 未 及 时 更 新 甚 至 于 
          损 坏, 此 时 如 果 应 用 程 序 再 出 几 个 错 误 信 息, 无 疑 将 使 用 户 的 处 境 雪 上 加 霜. <br>
          <br>
            因 而, 动 态 维 护 数 据 库 索 引 文 件, 将 使 你 的 数 据 库 应 用 程 序 更 有 稳 定 性 和 可 靠 
          性. 笔 者 将 以Delphi 编 程 中 常 用 的Paradox 数 据 库 为 例, 介 绍 数 据 库 索 引 文 件 的 动 
          态 维 护. <br>
          <br>
            Paradox 数 据 表 索 引 分 为 主 索 引(Primary Index) 即 关 键 字(Primary Key) 索 
          引 和 次 索 引(Secondary Index), 其 中 主 索 引 对 应.PX 文 件, 次 索 引 对 应.XG* 和.YG* 
          文 件. <br>
          <br>
          一. 创 建 表 索 引 <br>
            (1) 用Table.AddIndex 来 实 现 <br>
            方 法:AddIndex( IndexName,FieldNames,Options ) <br>
            其 中:( 详 见Delphi 帮 助) <br>
            IndexName: 索 引 名 称, 仅 在 指 定 次 索 引 时 有 作 用. <br>
            FieldNames: 索 引 域, 可 指 定 多 个 域, 各 域 之 间 用 分 号 隔 开, 如'Field1;Field2;Field3' 
          <br>
            Options: 索 引 选 项, 可 为[ixPrimary, ixUnique, ixDescending, ixCaseInsensitive, 
          ixExpression] <br>
            其 中: <br>
            ixPrimary : 建 立 的 索 引 为 主 索 引( 不 适 用 于dBase 数 据 表). <br>
            ixUnique : 不 允 许 重 复 值 的 索 引. <br>
            ixDescending: 按 降 序 索 引. <br>
            ixCaseInsensitive: 索 引 排 序 时 按 忽 略 大 小 写( 不 适 用 于dBase 数 据 表). <br>
            ixExpression: 建 立 表 达 式 索 引( 适 用 于Delphi3.0, 仅 适 用 于dBase 数 据 表). 
          <br>
            ixNonMaintained: 是 否 不 需 要BDE 自 动 维 护( 适 用 于Delphi1.0). <br>
          <br>
            下 面 是 一 个 例 子: <br>
          <br>
            假 设 有 一 个 存 放 通 讯 录 数 据 表MyComm.DB( 类 型 为Paradox) 存 放 于 本 地 目 录d:\mynote 
          下, 现 建 立 一 个 主 索 引( 索 引 域 为 编 号ID) 和 一 个 次 索 引( 索 引 域 为 编 号ID 和 姓 名Name, 
          索 引 名 称 为NameIndex). <br>
          <br>
          with table1 do<br>
          begin<br>
          &nbsp;&nbsp;&nbsp; close;<br>
          &nbsp;&nbsp;&nbsp; Exclusive := true;<br>
          &nbsp;&nbsp;&nbsp; DatabaseName := 'd:\MyNote';<br>
          &nbsp;&nbsp;&nbsp; TableName := 'MyComm.DB';<br>
          &nbsp;&nbsp;&nbsp; Open;<br>
          <br>
          &nbsp;&nbsp;&nbsp; {建立主索引 }<br>
          &nbsp;&nbsp;&nbsp; AddIndex('','ID',[ixPrimary]);<br>
          <br>
          &nbsp;&nbsp;&nbsp; {建立次索引 }<br>
          &nbsp;&nbsp;&nbsp; AddIndex('NameIndex','ID;Name',[]);<br>
          &nbsp;&nbsp;&nbsp; <br>
          &nbsp;&nbsp;&nbsp; close;<br>
          end;<br>
          <br>
          <br>
          (2)用SQL来实现<br>
          &nbsp;&nbsp;&nbsp; 对Paradox数据表来说,用SQL只能建立次索引.<br>
          &nbsp;&nbsp;&nbsp; 在SQL语法中,用来建立索引的语句是:<br>
          Create Index IndexName On TableName<br>
          (IndexField1,IndexField2,..)<br>
          &nbsp;&nbsp;&nbsp; 其中:<br>
          IndexName为一个次索引的名称,如MySecIndex1等.<br>
          TableName为对应数据表的名称,如MyTable等.<br>
          TableName后面为索引域列表,所有索引域有圆括号括起来,<br>
          &nbsp;&nbsp;&nbsp; 各索引域之间用逗号隔开.<br>
           <br>
          <br>
            下 面 是 一 个 例 子: <br>
          <br>
            假 设 有 一 个 存 放 通 讯 录 数 据 表MyComm.DB( 类 型 为Paradox) 存 放 于 本 地 目 录 <br>
          <br>
            d:\mynote 下, 现 建 立 一 个 次 索 引( 索 引 域 为 编 号ID 和 姓 名Name, 索 引 名 称 为NameIndex). 
          <br>
          <br>
          &nbsp;&nbsp;&nbsp; with query1 do<br>
          &nbsp;&nbsp;&nbsp; begin<br>
          &nbsp;&nbsp;&nbsp; close;<br>
          &nbsp;&nbsp;&nbsp; DatabaseName := 'd:\MyNote';<br>
          <br>
          {建立次索引NameIndex}<br>
          sql.clear;<br>
          sql.add( 'Create Index NameIndex On MyComm(ID,Name)' );<br>
          &nbsp;&nbsp;&nbsp; execSql;<br>
          end;<br>
           <br>
          <br>
          二. 删 除 表 索 引 <br>
            (1) 用Table.DeleteIndex 来 实 现 <br>
            DeleteIndex 只 能 删 除 次 索 引 名 称. <br>
            方 法:DeleteIndex( IndexName ) <br>
            其 中:( 详 见Delphi 帮 助) <br>
            IndexName: 次 索 引 名 称. <br>
          <br>
            下 面 是 一 个 例 子: <br>
          <br>
            假 设 有 一 个 存 放 通 讯 录 数 据 表MyComm.DB( 类 型 为Paradox) 存 放 于 本 地 目 录 <br>
          <br>
            d:\mynote 下, 现 有 一 个 次 索 引( 索 引 域 为 编 号ID 和 姓 名Name, 索 引 名 称 为NameIndex), 
          将 删 除 之. <br>
          <br>
          with table1 do<br>
          begin<br>
          &nbsp;&nbsp;&nbsp; close;<br>
          &nbsp;&nbsp;&nbsp; Exclusive := true;<br>
          &nbsp;&nbsp;&nbsp; DatabaseName := 'd:\MyNote';<br>
          &nbsp;&nbsp;&nbsp; TableName := 'MyComm.DB';<br>
          &nbsp;&nbsp;&nbsp; Open;<br>
          <br>
          &nbsp;&nbsp;&nbsp; {删除次索引}<br>
          &nbsp;&nbsp;&nbsp; DeleteIndex('NameIndex');<br>
          &nbsp;&nbsp;&nbsp; <br>
          &nbsp;&nbsp;&nbsp; close;<br>
          end;<br>
           <br>
          <br>
            (2) 用SQL 来 实 现 <br>
            在SQL 语 法 中, 用 来 删 除 索 引 的 语 句 是: <br>
            Drop Index TableName.IndexName <br>
            要 删 除 次 索 引 时,IndexName 为 一 个 次 索 引 的 名 称, 如'MyTable.MySecIndex1' 
          等. <br>
            要 删 除 主 索 引 时,IndexName 为'primary', 如'MyTable.primary'; 值 得 注 意 的 
          是, 在 删 除 主 索 引 成 功 后, 数 据 表 的 所 有 次 索 引 也 自 动 删 除. <br>
          <br>
            下 面 是 一 个 例 子: <br>
            假 设 有 一 个 存 放 通 讯 录 数 据 表MyComm.DB( 类 型 为Paradox) 存 放 于 本 地 目 录 <br>
            d:\mynote 下, 已 定 义 一 个 主 索 引( 索 引 域 为 编 号ID) 和 一 个 次 索 引( 索 引 域 为 
          编 号ID 和 姓 名Name, 索 引 名 称 为NameIndex). <br>
            现 在 因 为 索 引 损 坏, 要 删 除 索 引, 以 便 重 新 索 引. <br>
          <br>
          with query1 do<br>
          begin<br>
          &nbsp;&nbsp;&nbsp; close;<br>
          &nbsp;&nbsp;&nbsp; DatabaseName := 'd:\MyNote';<br>
          <br>
          &nbsp;&nbsp;&nbsp; {删除次索引NameIndex }<br>
          sql.clear;<br>
          sql.add( 'Drop Index MyComm.NameIndex' );<br>
          execSql;<br>
          <br>
          &nbsp;&nbsp;&nbsp; {删除主索引 }<br>
          sql.clear;<br>
          sql.add( 'Drop Index MyComm.Primary' );<br>
          execSql;<br>
          end;<br>
           <br>
          <br>
          三. 注 意 事 项: <br>
            (1) 在 索 引 更 改 时, 应 保 证 对 应 的 数 据 表 可 以 以 独 占 方 式(Exclusive=true) 打 
          开, 否 则 会 引 起 错 误. <br>
            (2) 上 述 方 法 略 加 修 改 后, 也 可 用 于dBase,Oracle 等 其 它 数 据 库 的 数 据 表. <br>
            (3) 如 果 需 要 重 新 对 索 引 文 件 进 行 索 引, 请 参 考BDE 的Dbi 函 数 说 明: <br>
            RegenIndex, RegenIndexes. <br>
            (4) 以 上 程 序 在Delphi3.0 下 测 试 通 过。<br>
          <br>
          <br>
          转载自popcool开发专区<b>(文/王发军)</b></p>
        <p align="center"><font 
      color=#ffa000><b><br>
          </b><b>                                            
      </td>
    </tr>
    </tbody> 
  </table>
</div>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -