BDE数据库应用程序ppt课件.ppt_第1页
BDE数据库应用程序ppt课件.ppt_第2页
BDE数据库应用程序ppt课件.ppt_第3页
BDE数据库应用程序ppt课件.ppt_第4页
BDE数据库应用程序ppt课件.ppt_第5页
已阅读5页,还剩124页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章开发BDE数据库应用程序 本章内容 学会使用BDE连接数据库Table和Query组件的使用方法学会开发简单的数据库应用程序 8 1使用BDE连接数据库 数据库引擎BDE是Delphi访问数据库的驱动程序之一 它提供访问数据库的API函数库 通过BDE不仅可以访问本地数据库 如Paradox dBASE FoxPro和Access等 而且还可以访问InterBase Oracle Sybase Informix MicrosoftSQLserver和DB2等远程大型数据库 8 1 1BDE的体系结构 使用BDE开发数据库应用程序要遵循通常的数据库体系结构 BDE应用程序除需要数据源和数据集以外 还应包括以下两个方面 一个或多个用于控制事务及管理的数据库组件一个或多个会话组件 用于隔离数据访问操作 并且可以管理成组的数据库 通过BDE访问数据库的体系结构 8 1 2使用BDE管理器 应用程序对数据库的访问是通过数据库别名实现的 数据库别名则需要在BDE管理器中建立并配置 打开BDE管理器的方法为 开始 程序 BorlandDelphi7 BDEadministrator BDE管理器显示窗口 BDE管理器介绍BDE管理器窗口中 configuration标签页用于配置与数据库连接时使用的参数 databases标签页用于建立并管理数据库别名 只有配置好数据库后才能建立该数据库的别名 definition子窗口是其左边子窗口选项配置窗口 此窗口的所有配置参数将保存在Idapi32 cfg文件中 BDE数据库驱动的主要类型本地数据库驱动程序 用于访问Paradox等本地数据库 SQL数据库驱动程序 用于访问C S结构的SQL数据库 如DB2 InterBase Oracle等 为保证数据库的正确连接 这些数据库在客户端计算机上都有相应BDE驱动程序 ODBC驱动程序 任何ODBC驱动都可用于BDE ODBC几乎支持目前所有的数据库 因此 Delphi也可以访问几乎所有的数据库 配置数据库别名应用程序只有通过数据库别名才能访问数据库中的数据 因此 正确建立数据库别名是开发数据库应用程序相当重要的一环 下面用几个典型实例分别说明通过BDE管理器设置数据库和建立数据库别名的方法 例1 配置InterBase数据库并建立一个Interbase数据库别名 已知该数据库的库文件为 d Interbase examples database employee gdb 1 配置InterBase数据库打开BDE管理器 单击Configuration标签页并展开Drivers Native下的所有数据库名称 选择IntrBase 则BDE管理器右边的Definition窗口就会显示出配置InterBase数据库使用的所有参数 请将SERVERNAME和USERNAME两个参数设置如下 ServerName d InterBase examples database employee gdbUserName sysdba其他参数可使用其默认值 此时BDE管理窗口显示内容如下图所示 若在InterBase的左边出现一个绿色的三角图标 则表示已修改了该数据库的配置参数 单击工具条上的Apply按钮保存修改后的数据库配置 2 建立interbase数据库别名数据库别名实质上是连接到数据库的一个接口 同一个数据库可以建多个别名 方法 BDE管理器 databases 右击 new 则弹出一个 新建数据库别名 对话框 从中选择 interbase 后 即可建立一个新数据库别名 若想对数据库别名进行修改 则在选中该别名并修改后 单击apply按钮即可 例2 以访问Access数据库为例 具体说明ODBC的使用方法 1 打开ODBC管理器打开方法 Delphi Database Explore 则打开一个SQLExplore窗口 选择 Databases 子窗口中的根目录 然后选择此窗口的Object OBDCAdministrator菜单 此时打开一个名为 ODBC数据源管理器 的对话框窗口 ODBC数据源管理器对话框 创建新数据源对话框 2 创建新数据源方法 ODBC数据源管理器 添加 创建新数据源对话框中中选MicrosoftAccessDriver mdb 驱动程序 完成在显示的对话框中输入数据源名和相应的文字描述 若此时按确认按钮 数据源就建成了 数据源建成后 还需要继续设置数据源对应的数据库 设置数据源对应的数据库的方法 1 单击 创建 按钮 为新建数据源创建数据库 2 单击 修复 按钮修改已有数据库连接 此方法适用于对已有数据源的修改 ODBCMicrosoftAccess安装对话框 创建数据库话框 3 创建ODBC数据源对应的数据库在对话框窗口单击 创建 按钮 则显示 新建数据库 对话框窗口 在这个窗口中 你可选择数据库文件所在文件夹 并输入要建立的新数据库名 然后单击 确定 按钮 若创建成功 系统将显示 数据库 创建成功 的提示 当操作再次返回时 单击此对话框中的 确定 按钮即完成数据库的创建及数据源的配置工作 4 建立BDE与ODBC的数据源连接BDE管理窗口 右击 Databases 子窗口 在弹出菜单中选择 Refresh 单击 Databases 根目录 选择Object BDEAdministrator菜单 选择 Configuration 页 展开 Drivers 节点 鼠标右键单击ODBC节点 在弹出菜单中选择New 在 DriveName 输入框输入用户自己使用的驱动程序名 例如AccessDB 在 ODBCDriverName 输入框中选择建立ODBC数据源时使用的驱动程序MicrosoftAccessDriver mdb 在 SelectDataSourcestoCreateAliases 选择已建立的数据源名 MyAccessDatabase 单击 OK 按钮完成设置 此时在Databases子窗口中又显示一个名为MyAccessDatabase1数据源名 即为BDE与ODBC建立连接的数据源 修改完成后确认 例3 使用已创建的ODBC数据源及Delphi的软件工具DatabaseDesktop创建Access数据库表 1 创建表Delphi Tools DatabaseDesktop 然后 在显示的窗口上选择菜单File New Table 将打开一个CreateTable 创建表 对话框 在此对话框上 选择AccessDB作为表的类型 然后单击 OK 按钮 则显示一个名为CreateAccessDBTable对话框窗口 2 在DatabaseDesktop中创建数据表建立有5个字段的表 字段名分别表示 年级 专业 学号 姓名 和 年龄 字段设置完成后 单击 SaveAs 按钮 将出现SaveTableAs对话框 在这个对话框中 首先要把别名设为MyAccessDatabase1 这时 将出现一个数据库登录对话框 单击 OK 按钮使它消失 因为还没有设置用户名和密码 在 文件名 编辑框中输入表名 不需要扩展名 本例为StudentItem 最后单击 保存 按钮 则新建的表就被保存在指定的数据库中 8 2BDE组件简介 BDE组件是一组用于开发数据库应用程序的专用组件 它包含Table Query StoredProc DatabaseSession BatchMove UpdateSQL NestedTable八个组件 对数据库应用程序的创建起到了关键的作用 BDE组件可访问目前几乎所有的数据库 这些组件中最常用的是Table和Query组件 下面通过一个例子来介绍操作步骤 例1 利用Table组件显示并操作数据表新建一个项目 在主窗体上放入Table DataSource DBNavigator和DBGrid四个组件 它们的组件名分别为Table1 DataSource1 DBNavigator1和DBGrid1 例1 利用Table组件显示并操作数据表设置Table1的DatabaseName TableName和Active属性值分别为DBDEMOS Customer db和True 设置DataSource1组件的DataSet属性值为Table1 设置DBGrid1和DBNavigator1组件的DataSource属性值为DataSource1 DataSource1 DBGrid1 DBNavigator1 Table1 8 3Table组件 Table组件用于访问指定数据表中的数据 它既可以代表数据表中的所有行和列 也可以代表它的部分行和列 使用Table组件可完成打开 浏览 修改和建立数据表等操作 8 3 1打开 关闭数据表1 打开表需要的前提条件使用Table组件打开数据表前必须设置其三个属性 DatabaseName TableName和TableType DatabaseName属性功能 用于指定数据表所在的数据库别名 1 设计期 若已通过BDE已设置了数据库别名 就可在此属性显示的下拉列表中选择表所在的数据库别名 2 运行期 可使用Table1 DatabaseName 数据库别名 语句 若对本地数据库 可直接使用数据表文件所在的路径 TableName属性功能 用于指定要打开的数据表名方法 1 设计期 设置好DatabaseName属性后 在数据表组件的对象观察器中 使用TableName属性可选择要打开的数据表 2 运行期 在运行期设置要打开的数据表 可使用如下语句 Table1 TableName 数据表文件名 注意 使用此方法设置数据表名前 请确保Table1是关闭的 否则 关闭后再使用上述命令 TableType属性功能 用于设置要打开数据表的类型 TableType属性值及其对应的表类型 一般情况下 tableType属性常使用默认值ttDefault 此时 BDE会根据数据表文件的扩展名来确定数据表的类型文件扩展名与表类型的对应关系 2 打开数据表在应用程序中 对表进行操作前都必须首先打开表 打开表的方法 1 使用数据表组件的Open方法 2 使用数据表组件的Active属性比较 上述两种方法都能打开数据表 但第2种方法效率较高 因为第1种方法最终要将数据表的Active属性值设为True 3 关闭数据表数据表使用完成后要及时关闭 关闭数据表的方法 1 调用数据表组件的Close方法 2 将数据表组件的Active属性设为false 8 3 2浏览数据表建立数据表的目的是查询表中有用的数据 浏览数据表是查询数据表中数据的重要手段之一 在Delphi中 浏览数据表是通过移动记录指针来实现的 这里的指针可以理解为记录指示器 它用于表示数据表中可操作记录的位置 通常把指针指向的记录称为当前记录 由于只能操作指针指向的记录 因此要修改数据表中的记录 就必须先移动记录的指针 为方便对数据表的操作 数据表 Table和Query 组件提供了一系列移动记录指针的命令 常用的命令有 数据集组件 Table和Query 移动记录指针命令First 将记录指针移动到第一条记录上 Last 把记录指针移动到最后一条记录上 Next 使记录指针向后移动一条记录 Prior 使记录指针向前移动一条记录 MoveBy Num 用于从当前记录开始向前或向后移动Num个记录 当Num 0时 向后移动 当Num 0时 则向前移动 1 判断记录指针位置判断记录指针位置的方法 1 BOF函数 用于判断记录指针是否在第一条记录上 2 EOF函数 用于判断记录指针是否在最后一条记录 例3 使用循环语句使记录指针遍历数据表Table1的每条记录 Table1 Last 使指针移动到最后一条记录WhilenotTable1 BOFdo 若指针没有在表的第一条记录上 则继续循环Begin 对当前记录进行操作Table1 Prior 指针上移一条记录End BOF函数值为True的情况 刚打开数据表 刚调用了First方法 调用Prior方法失败 说明指针前没有任何记录 EOF函数值为True的情况 打开一个空数据表 刚调用了Last方法 调用Next方法失败 说明指针后面已没有记录 显然 如果数据表是空的 则BOF和EOF的返回值都是True 2 保存记录指针的位置保存记录指针的方法 使用书签变量使用书签变量的步骤 1 定义书签变量 格式 var书签变量名 TBookMarkStr 2 将指针位置保存到书签变量 3 记录操作完成后 恢复指针的位置 2 保存记录指针的位置 2 保存记录指针的位置 格式 书签变量名 Table1 Bookmark 3 恢复保存的记录指针 格式 Table1 Bookmark 书签变量名 数据表的Bookmark属性不仅可以获取 而且还能设置记录指针位置 例3 移动记录指针实例 1 在窗体上分别放入Table1 DBGrid1和Datasource1 Table1的DatabaseName TableName和Active属性值分别为DBDEMOS Customer db和True Datasource1的DataSet属性为Table1 Dbgrid1的Datasource属性值为DataSource1 2 在窗体上再放置Groupbox1 Groupbox2和Groupbox3三个Groupbox组件 在Groupbox1组件中放入5个按钮和一个编辑框 设置它们的组件名分别为FirstButton PriorButton NextButton LastButtont MoveByButton和Edit1 分别编写这五个按钮的OnClick事件 具体内容参见下面的源程序 另外 再设置Edit1的Text属性值为0 例3 移动记录指针实例在Groupbox2组件中放入3个按钮 设置它们的组件名分别为GetButton GotoButton和ClearButton 并分别设置这三个按钮的OnClick事件 具体内容参见下面的源程序 在Groupbox2组件中再放一个名为Label2标签组件 它用于显示指针所处的位置 记录指针移动程序窗体 主要代码 procedureTForm1 FirstButtonClick Sender TObject FirstButton按钮的OnClick事件begintable1 First end procedureTForm1 PriorButtonClick Sender TObject PriorButton按钮的OnClick事件begintable1 Prior end procedureTForm1 NextButtonClick Sender TObject NextButton按钮的OnClick事件begintable1 Next end procedureTForm1 LastButtonClick Sender TObject LastButton按钮的OnClick事件begintable1 Last end procedureTForm1 Button1Click Sender TObject MoveByButton按钮的OnClick事件beginTable1 MoveBy StrToInt Edit1 Text end 数据源的DataChange事件 记录移动或修改时执行此事件 procedureTForm1 OrdersSourceDataChange Sender TObject Field TField beginifTable1 BOFthenLabel2 Caption 记录指针在表首部 elseifTable1 EOFthenLabel2 Caption 记录指针在表尾部 elseLabel2 Caption 记录指针在表首尾之间 end procedureTForm1 GetButtonClick Sender TObject 获取 按钮的OnClick事件beginBM Table1 Bookmark 获取指针GotoButton Enabled True 使设置 恢复 按钮可用GetButton Enabled False 使设置 获取 按钮不可用ClearButton Enabled True 使设置 清除 按钮可用end procedureTForm1 GotoButtonClick Sender TObject 恢复 按钮的OnClick事件beginTable1 Bookmark BM 恢复指针位置end procedureTForm1 ClearButtonClick Sender TObject 取消 按钮的OnClick事件beginBM 清除书签GotoButton Enabled False GetButton Enabled True ClearButton Enabled False end 8 3 3操作数据表为方便理解 我们将表的操作分为字段操作和记录操作两部分 1 字段操作在Delphi中 利用TField及其派生对象可以很容易地访问数据表的字段 字段对象的功能 取得或设置当前字段的值 通过修改字段对象的属性来改变它在程序中的行为 通过字段对象编辑器还能为数据表增加查找和计算字段 进而大大改善数据表可读性 读取字段值读取字段值的方法 1 通过数据表字段数组 格式 表名 字段名 如 S Table1 Name 也可一次获取多个字段的值 基本格式如下 表名 字段名1 字段名2 字段名n 注意 通过上述格式返回的是一个Variant数组类型的数据 该数组的下标从0开始 且数组中的元素也是Variant类型 例如 假定Table1打开的是animals dbf表 它有Name Size和Area三个字段 则同时取出这三个字段的值可使用 Table1 Name size area 格式 例 利用表的字段数组获取字段的值procedureTForm1 Button1Click Sender TObject Button1的OnClick事件VarVarArr Variant beginVarArr VarArrayCreate 0 2 varVariant 建立变体变量数组VarArr Table1 Name size area 获取字段的值ShowMessage 名称 VarArr 0 大小 inttostr VarArr 1 区域 VarArr 2 end 图8 3 2利用变量数组获取字段的值 单击 读取字段值读取字段值的方法 2 通过FieldByName函数数据表组件的FieldsByName函数以字段名作为参数 其返回值是字段对象 格式 FieldByName 字段名 得到一个字段对象后 可以利用字段对象的有关属性来获取字段值或向字段赋值 用于访问字段值的属性 如把Table1表中第3个记录的OrderNo字段的值赋给整型变量I 可使用如下代码 Table1 Open Table1 MoveBy 2 I Table1 FieldByName OrderNo AsInteger 读取字段值的方法 3 通过Fields属性数据表的Fields属性也是一个字段对象数组 格式 Fields Index 表示数据表的第Index个字段对象 其中Index表示字段号 其值从0开始 如 若Table1表的第1个字段是字符串类型 则将此字段的值赋给字符串变量S的程序代码为 S Table1 Fields 0 AsString 2 字段的数据类型每个字段对象都有确定的类型 Delphi为字段对象预定义了多种类型值 数据表具体使用哪种字段类型取决于所在的数据库 例1 判断Table1表的OrderNo字段的类型是否为整数型 若是则显示 OrderNo字段的类型为整型 代码如下 Iftable1 fieldsbyname orderno datatype ftIntegerThenShowmessage OrderNo字段的类型为整型 3 字段名和编号通过字段对象的FieldName属性可获得字段名 如 S Table1 Fields 0 FieldName 若知道了字段对象 通过字段对象的FieldNo属性也可获得此字段对应的编号 如 I Table1 FieldsByName OrderNo FieldNo 另外 数据表组件还有返回字段个数的属性FieldCount 但要注意的是它没有将聚集字段计算在内 若要计算所有字段的个数 可使用数据表的FieldList属性 例2 将Table1表的所有字段名称显示出来 VarI integer ForI 0toTable1 fieldcount 1doShowmessage Table1 Fields I fieldname 4 修改字段值字段值的修改需要两个前提条件 1 确定要修改的字段值为当前记录的字段值 可通过移动指针命令来完成 2 使当前记录处于编辑状态 通过数据表的Edit方法可使当前记录处于编辑状态 当字段处于编辑状态时 即可对字段的值进行修改操作 操作完成后 使用数据表Post方法保存已做的修改 修改字段值的基本步骤 1 移动指针到要修改字段值的记录上 2 使用Edit方法使当前记录处于编辑状态 3 修改字段的值 4 调用Post方法保存修改结果 例1 将Table1数据表最后一条记录的Size字段的值修改为23 Table1 LastTable1 Edit Table1 Size 23 Table1 Post 在某些情况下 数据表中的数据可能是只读的 在修改记录前 最好先判断当前数据表是否可修改 数据表组件的CanModify属性就可完成这一工作 因此 修改数据表较规范的格式为 IfTable1 CanModifyThenBeginTable1 Last Table1 Edit Table1 Size 23 Table1 Post end 在保存修改前 使用数据表的Cancel方法可放弃所做的修改 例如 IfTable1 CanModifyThenBeginTable1 LastTable1 Edit Table1 Size 23 Table1 Cancel End 5 字段对象编辑器字段对象编辑器是Delphi为开发者提供的 用于设置字段对象属性的窗口 使用字段对象编辑器主要有四步 1 打开字段对象编辑器 2 添加字段对象 3 修改字段对象的属性 4 退出编辑窗口 打开方式 1 用鼠标双击数据表组件2 用鼠标右键单击它 再选择FieldsEditor菜单将数据表的字段添加到字段对象编辑窗口的方法 用鼠标右击字段对象编辑器窗口 在这个菜单中有两个菜单项可完成字段对象的添加工作 1 Addfields 菜单可有选择的将数据表的字段加入到字段对象编辑器中 2 Addallfields 菜单项可一次将数据表的所有字段添加到字段对象编辑器 加入到字段对象编辑器的字段 在源程序文件中会生成一个与其对应的字段对象 字段对象的属性既可通过对象观察器来修改 也可通过代码来修改 修改字段对象属性的方法是 1 在字段对象编辑器中选择要修改的字段对象 2 在其对象观察器中修改其属性值 下图即说明了操作的主要步骤 右击 右击菜单 双击 字段对象编辑器 字段对象编辑器及其右击菜单 在字段对象编辑器中不仅能修改字段的显示格式 而且还能增加有自动查询或计算功能的新字段 增加计算字段有时显示数据表中的数据时 需要显示由表的其它字段经过计算而获得的数据 通过为Table组件增加计算字段 就可圆满解决此问题 下面以Orders db数据表建立 批发量 字段为例介绍增加计算字段的方法 例5 通过字段对象编辑器为通过字段对象编辑器为Orders db表增加一个新字段 要求此字段能自动计算每个记录 产品 的批发量 已知产品批发量是其产品总量的32 其操作如下 1 双击Table1进入字段对象编辑器 右击此窗口 选择右击菜单中的 Addall 将Orders db表中的所有字段增加到字段对象编辑窗 2 右击字段对象编辑窗 在弹出的菜单中选择 NewField 命令 在 NewField 对话框的 Name 字段名编辑框中输入新建字段名WholeSaleTotal 在Type选择框中设置字段类型为Currency 在FieldType单选按钮组中选择Calculated 最后 单击OK按钮 设置计算字段 3 设置Table1的OnCalcFields事件 选择Table1表 选择Events页 找到OnCalcFields事件后双击 则进入OnCalcFields事件编辑窗口 在此事件中编写获取新字段值的公式 代码如下 procedureTForm1 Table1CalcFields DataSet TDataSet beginSataSet WholeSaleTotal DataSet ItemsTotal 0 32 end 注意 1 这里建立的计算字段是数据表的虚拟字段 在实际数据表中并不存在 2 在字段对象编辑器中 通过鼠标拖动可改变字段的排列顺序 增加查询字段通过字段对象编辑器 可为数据表增加查询字段 来解决实际应用中的问题 例6 为订单表增加一个查询字段 用于从客户表中查询相应的客户名称 查询字段的建立步骤 1 建立一个新项目 并在主窗体上放入二个Table组件 组件名分别为Table1和Table2 将它们的DatabaseName属性设为DBDEMOS 设置它们的TableName属性分别为orders db和Custmer db 设置它们的Active属性为Ture 2 在主窗体上放入一个名为Datasource1的数据源组件 设置其属性DataSet的值为Table1 3 在主窗体上放入一个名DBGrid1的表格组件 并设置其属性DataSource的值为DataSource1 4 双击Table1 进入字段对象编辑器 右击此窗口 选择右击菜单的 Addfields 功能 在打开的新窗口中选择要显示的字段后按 OK 确认 再右击字段对象编辑窗口 在弹出菜单中选择 Newfields 菜单 则打开一个 Newfields 对话框 在此对话框中设置新建查询字段相关属性 具体设置如下 Table2 设置查找字段 6 拖放字段字段对象编辑器还有一个不太明显的特征 其中的字段可通过鼠标直接拖放到窗体上 Delphi可自动感知拖到窗体上的字段类型 并且为它选择合适的数据感知组件 如果让拖放到窗体上的标签标题为中文名称 最好将字段的DisplayLabel属性值设置为要显示的中文名称后再执行拖放操作 向窗体上拖放后字段 7 Blob字段BLOB BinaryLargeObject 字段主要用于存储文本 图像或OLE对象等内容较庞大的数据 对Blob字段的读写操作是通过字段对象实现的例7 建立一个能够保存并播放音乐的程序 播放音乐主窗体 1 建立用于保存音乐数据的数据表PlayMusic db 其字段名称 类型及含义如下 Title 字符型 简单音乐说明 字符型 音乐数据来自的音乐文件名Music Blob型 用于保存音乐数据2 建立一个新项目 在主窗体上放入名为ImageList1的TImageList组件 双击这个组件 在打开的对话框中 将程序中使用的 播放音乐 和 另存音乐 图标增加到此组件中 再放入一个ToolBar1的工具条组件到主窗体中 然后右击此工具条组件 选择右击菜单中的 NewButton 菜单项为ToolBar1增加两个按钮 并为增加的这两个按钮命名为Play和SaveAs 设置ToolBar1组件的Images属性值为ImageList1 在窗体上再分别放入数据表组件Table1 数据源组件DataSource1和表格组件DBGrid1 并设置Table1的DatabaseName属性值为PlayMusic db表所在的文件夹 设置Table1的TableName和Active的属性值分别为PlayMusic db和True DataSource1的DataSet属性值为Table1 设置DBGrid1的DataSource属性值为DataSource1 在主窗体上再放入一个名为OpenDialog1的打开文件对话框组件和一个名为SaveDialog1的保存文件对话框组件 并分别设置它们的Filter属性值为 音乐文件 wav wav 为Play按钮和另存按钮SaveAs的单击事件和将音乐数据保存到数据表时激活的BeforePost事件编码 代码如下 保存当前记录前要求用户选择音乐文件 以便保存音乐数据到数据表中 procedureTForm1 Table1BeforePost DataSet TDataSet beginIfapplication MessageBox 要加入音乐数据吗 保存提示 mb iconwarning mb YesNo idyesthen beginIfOpenDialog1 ExecutethenbeginTable1Extract OpenDialog1 保存文件名Table1Music LoadFrom 将音乐数据保存到数据表的Music字段end end end 播放当前记录中保存的音乐procedureTForm1 PlayClick Sender TObject tryTable1Music SaveToFile MusicTemp 将音乐保存到一个临时文件Screen Cursor crHourGlass 出现等待光标 播放声音 如果出现问题则触发异常 Win32Check PlaySound MusicTemp 0 SND SYNCorSND finallyScreen Cursor crDefault end end 将当前记录中的音乐数据另存到一个指定的文件中procedureTForm1 SaveAsClick Sender TObject var beginwithSaveDialog1dobegin table1 初始化文件名ifExecutethen 执行对话框操作Table1Music SaveTo 把blob数据保存到文件end end 2 判断表所处的状态对表进行操作前 有时需要知道数据表当前所处的状态 如数据表是否可用 即是否已打开 是处于编辑状态还是添加状态等 数据表的这些状态都可通过数据表的State属性来判断 对记录操作前常使用如下格式判断数据表当前的状态 If表名 State 表状态值ThenBegin 表的操作 End 3 操作表的记录操作数据表的记录主要包括记录的追加 插入 删除 查找和过滤等操作 1 记录的追加或插入操作使用数据表的Append和Insert方法可完成这两种操作 格式 1 调用Insert 或Append 方法 使数据表进入插入 或追加 记录模式 2 修改数据表的字段值 3 调用Post方法将修改后的数据保存到数据库中 3 操作表的记录注意 当数据表处于插入或添加状态时 若移动指针到其它记录上 则对该记录的修改将被自动提交给数据库 Post方法是将数据暂时保存在记录缓冲区中 当应用程序正常退出时才正式写到数据库中 若想将修改的记录真正存入数据库 可使用数据表组件的FlushBuffer方法 另外 数据表的Insert方法有以下特点 对有主索引的Paradox表来说 记录将插入到索引位置 若无主索引则插入到当前记录之前 对dBASE FoxPro和Access表来说 插入与追加的功能相同 它总是将插入的记录追加到数据表的最后 对SQL数据库插入记录的物理位置由其具体的实现来决定 3 操作表的记录 2 记录的删除操作删除记录指的是删除数据表中指针所在的记录 其使用格式为 表名 delete 例如 删除Table1表的所有记录 Table1 open Table1 first whilenotTable1 eofdoBeginTable1 delete End 3 操作表的记录 3 查找记录查找记录按查找是否使用索引来分可分为无索引查找和索引查找两种 A 无索引查找使用Locate方法完成 Locate方法可根据一个或多个字段的值查找数据表中的记录 并把记录指针移动到第一条匹配的记录上 定义如下 functionLocate ConstKeyFields String ConstKeyValues Variant Options TLocateOptions Boolean Keyfields用于指定查找记录所依据的字段 KeyValues用于设置要查找的字段值 Options用于指定查找方式 它可取loCaseInsensitive和loPartialKey两个值或它们的组合 若Options中有loCaseInsensitive 则查找时将区分大小写 如果有loPartialKey 则按部分匹配查找 当对多个字段查询时 参数KeyFields中的字段名之间要用分号 分隔 与此对应的查找值则必须使用变体常量 格式为VarArrayOf 字段值 1字段值2 字段值n 例如 查找Table1表中客户号为1351 订单号为1003的记录 若查到则显示 记录找到 否则显示 没找到 IfTable1 Locate CustNo OrderNo VarArrayOf 1351 1003 ThenShowmessage 记录找到 ElseShowmessage 没找到 提示 若数据表已经建立并打开相关索引 Locate会自动通过索引来查找 所以此方法有较高的查找效率 B 索引查找索引查找指的是按照索引对数据表中的数据进行查找 由于有索引的数据表可使用查询优化算法 因而有极高的查询效率 在查询设置上 在进行索引查找前必须对要查找的字段建立索引并打开它 打开索引可通过表组件的IndexName属性来实现 例如 如果数据表Table1有一个基于Company字段的索引 索引名为ByCompany 则打开此索引的命令为 Table1 IndexName ByCompany 需要说明的是 若没有指定索引名 数据表将自动使用主索引 1 使用GotoKey方法查找格式 表名 SetKey 设置进入数据搜索状态 dsSetKey 并清空保存查找关键字的缓冲区 表名 FieldValues 索引字段 查询值 设置要查找值表名 GotoKey 开始查找例如对表Table1 使用ByCompany索引查找名为 Unisco 的公司记录 程序代码如下 Table1 OpenTable1 IndexName ByCompany Table1 SetKey Table1 FieldValues Company Unisco Table1 GotoKey 2 使用FindKey方法查找FindKey用于在索引字段中查找给定值的记录 格式 表名 FindKey 常量数组 这里的常量数组是一个类型为arrayofconst的参数 它表示查找值 例如 若Table1打开的是学生名单表 设该表按 姓名 和 年龄 两个字段建立的索引名为XMNL 要求使用FindKey查找该表中年龄为20岁的 李明 的记录 代码如下 Table1 OpenTable1 IndexName XMNL IfnotTable1 FindKey 李明 20 ThenMessageBeep 0 没找到则发出嘀的声 3 使用FindNearest或GotoNearest查找使用FindNearest或GotoNearest方法查找数据表中的记录与使用FindKey和GotoKey方法类似 只是这里是按最接近匹配的方式查找的 例如查找Table1表的第1个字段中与123最接近的记录 代码为 Table1 FindNearest 123 同样 通过SetKey和GotoNearest也可以完成上面的操作 代码为 withTable1dobeginSetKey Fields 0 AsInteger 123 GoToNearest end 4 通过设置范围过滤记录设置范围 Range 可完成数据表记录的过滤功能 范围设置后 只有符合指定条件的记录才允许用户操作 格式 表名 SetRange 下界值 上界值 假设Table1打开的是Customer db表 此表按CustNo字段建立了主索引 则使用SetRange方法设置数据表 使用户只能操作CustNo字段值在1231到1361之间的记录 程序代码为 Table1 SetRange 1231 1361 除SetRange之外 还可使用ApplyRange方法来设置过滤范围 只是它的使用方法比较复杂 步骤如下 调用SetRangeStart方法 进入范围上界设置状态 通过表的Fields或FieldByName设置关键字段值的上界 调用SetRangeEnd方法 进入范围下界设置状态 通过表的Fields或FieldByName设置关键字段的下界 调用ApplyRange使设置的范围起作用 对前面的例子使用SetRangeStart语句设置范围 程序代码如下 withTable1dobeginSetRangeStart Fields 0 AsInteger 1231 起始值为1231SetRangeEnd Fields 0 AsInteger 1361 截止值为1361ApplyRange end 提示 如果要取消数据表的范围过滤器 可使用CancelRange方法 例如 取消Table1范围过滤器的代码为Table1 CancelRange 6 条件过滤条件过滤就是将不符合条件的记录暂时隐藏 只留下满足条件的记录 设置方法 1 通过数据表的Filter属性 称为 属性设置法 2 通过OnFilterRecord事件 称为 事件设置法 需要注意 使用这两种方法的前提是必须预先设置数据表的Filtered属性值为True 1 属性设置法将过滤条件通过手工或代码方式写入到表的Filter属性中 以使数据表过滤掉所有不满足条件的记录 通过代码设置Filter属性的格式为 表名 filter 条件表达式 如 在程序运行期直接将过滤表达式写到Table1的Filter属性中 方法如下 Table1 Filter Custno 1400 AND Custno 1500 Table1 Filtered True 通过属性设置的过滤有较高的效率 能用属性设置完成的过滤 最好不用其它方法 2 事件设置法通过数据表的Filter属性设置过滤虽然简单高效 但不能使用较复杂的过滤条件 当使用较复杂的过滤条件时 就必须使用 事件设置法 使用事件过滤记录的步骤如下 A 将数据表的Filtered属性设为True B 编写数据表的OnFilterRecord事件 过滤事件中有两个参数 其中Dataset表示当前的数据表名 参数Accept则用于设置过滤 如使用 事件设置法 将Company字段中不以S开头的记录过滤出去 则代码如下 procedureTForm1 Table1FilterRecord Dataset TDataSet varAccept Boolean varFieldValue String BeginFieldValue DataSet Company 获得Company字段的值Accept FieldValue 1 S 过滤掉字段值的第一个字符不为 S 的记录End 4 设置主细表设置主细表的目的是当用户在主表中任意选择一条记录时 程序会在细表中自动查询与该记录相关的记录 主表和细表一般是按所起作用来划分的 起决定作用的是主表 设置主细表的基本步骤 1 确定要建立主细表关系的主表和细表 要求细表按关键字段建立并打开索引 这里的关键字段是在主细表之间建立关联的字段 如客户表与订单表主细表关系中 客户号 CustNo 即是关键字段 2 设置细表的MasterSource和MasterFields属性 建立与主表的关系 设置主细表实例1 建立一个新项目 在此项目的主窗体上分别放入2个Table 2个数据源 2个表格和1个数据表导航组件 其组件名分别为Table1 Table2 DataSource1 DataSource2 DBGrig1 DBGrid2和DBNavigator1组件 设置它们的相关属性见下表 4 设置主细表Table2的MasterFields的值是通过对话框设置的 设置方法 选中Table2 到对象观察器中找到MasterFields属性 单击此属性设置框右侧的对话框按钮 显示字段连接设计器对话框 在对话框的可用索引选择框中 选择包含关键字段CustNo的索引名 并在细表字段 DetailFields 和主表字段 MasterFields 选择框内选择关键字段名CustNo 然后单击 Add 按钮以创建主细表之间的链接 最后 单击 OK 按钮完成主细表设置 注意 设置MasterFields属性之前必须先设置MasterSource属性 设置细表的MasterFields属性 5 使用数据表事件数据表的事件与数据表的方法的区别 数据表的方法是Delphi为开发者准备的用于完成某些特殊功能的程序代码 它包括数据表的过程和函数 开发人员可直接调用 数据表的事件要求程序员自己编写程序模块 在执行方式上 数据表的事件一般不需显式调用 它通过用户发送的消息来激发执行 事件的特征可将事件划分为三类 即以After Before和On开头的事件 After 事件表示当 操作发生后执行的事件 Before 事件表示当 操作发生前执行的事件 On 事件表示当 操作发生时执行的事件 8 3 4建立数据表数据表的CreateTable方法可完成动态创建数据表的功能 其步骤如下 1 创建表对象即定义TTable类型的变量并对其实例化 如定义一个名为NewTable对象可使用如下代码 VarNewTable TTable NewTable TTable Create Self 2 设置表对象的属性要设置的属性为DatabaseName TableName和TableType NewTable DatabaseName 创建表的数据库别名 NewTable TableName 表文件名 NewTable TableType 表类型名 3 定义要创建数据表的结构定义数据表结构是通过数据表对象的FieldDefs属性的Add方法来实现 定义格式如下 ProcedureAdd constName String DataType TFieldType Size Integer 0 Required Boolean False 其中 Name用于指定字段名称 DataType用于指定字段类型 Size用于指定字段的宽度 要注意 此参数只适用于字符和备注两种类型的字段 而整型 日期型等类型字段的大小固定为0 Required用于设置字段值是否必须非空 为True时表示非空 对强制非空的字段来说 当保存记录时 要求字段必须有确定的值 3 建立索引创建数据表时建立索引 则要使用数据表对象的IndexDefs属性的Add方法 Add方法定义格式如下 procedureAdd constName Fields String Options TI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论