使用TDBGrid
TDBGrid构件以栅格的形式显示和编辑数据集中的数据 它的外观很大程度上取决于下面三个因素 l 一是永久的列对象 二是永久的字段对象 三是数据集构件的ObjectView属性将影响ADT和数组字段的显示方式 对于TDBGrid构件来说 最重要的属性是Columns 这是一个TDBGridColumns对象 用于管理一组TColumn对象 在设计期 可以打开一个编辑器建立永久的列对象 然后在对象观察器中设置列对象的属性
动态的列对象
如果TDBGridColumns的State属性设为csDefault 列是动态生成的 列的属性取决于字段的属性 当字段的属性发生变化时 列的属性也跟着变化 让列动态生成的好处是 可以在运行期动态地选择其他数据集 而不用担心栅格是否适合于显示新的数据集 例如 可以用同一个TDBGrid构件先显示一个Paradox表 再显示查询另一个数据库的结果 在设计期 无法直接修改动态列对象的属性 只能修改字段对象的属性 从而间接地修改动态列对象的属性
动态列对象的生存期也取决于字段对象的生存期 如果数据集没有建立永久的字段对象 那么 当数据集关闭时 所有的动态列对象也将消失 注意 如果在运行期把TDBGridColumns的State属性设为csDefault 将删除所有的列对象 然后根据数据集中的字段对象重建列对象
要能够在设计期自定义栅格 就要用到永久的列对象 建立了永久的列对象后 如果TDBGridColumns的State属性设为csCustomized 就可以独立设置每一列的属性 例如 默认情况下 列的标题显示字段的标签即DisplayLabel属性 通过修改TColumnTitle的Caption属性可以重新指定列的标题 而TField的DisplayLabel属性则不会受到影响 TDBGridColumns的State属性设为csCustomized适合于那些数据集的结构是固定不变的情况 如果需要在运行期切换不同的数据集 就不能把State属性设为csCustomized 要创建永久的列对象 首先要在窗体上选择TDBGrid构件 然后对象观察器中单击Columns属性边上的省略号按钮将打开编辑器
刚开始的时候 这个编辑器是空白的 这是因为 默认情况下 栅格中的列对象都是动态生成的 还没有永久的列对象 要基于数据集中的每一个字段分别创建一个永久的列对象 可以单击鼠标右键 在d出的菜单中选择 Add All Fields 命令 要创建一个独立的永久列对象 可以单击工具栏上的(Add New)按钮 选择这个刚创建的列对象 然后在对象观察器中设置FieldName属性指定一个字段 设置Caption属性指定列的标题 要删除一个列对象 可以单击工具栏上的(Delete Selected)按钮 如果把永久的列都删掉 栅格反而能显示数据集中所有的字段 这是因为 永久的列删掉以后 Delphi 会自动把TDBGridColumns的State属性设为csDefault并且动态生成所有的列
要调整列在栅格中显示的顺序 可以用鼠标把列对象前移或后移 对于永久的列对象来说 它的属性的默认值仍然取自于字段 除非您修改了永久列对象的属性 例如 默认的情况下 列的标题就是字段的DisplayLabel属性 如果修改字段的DisplayLabel属性 列的标题将随之改变 但是 一旦您修改了列对象的Caption属性 列的标题不再与字段的DisplayLabel属性存在联动关系 它们彼此是独立的
前面讲过 创建一个永久的列对象时 需要设置FieldName属性指定一个字段 不过 您也可以让FieldName属性为空 此时 TColumn对象的Field属性将返回NULL 并且该列在栅格中是空白的 空白的列往往用于用户显示一些自定义的内容 如图像或图表等 几个列对象的FieldName属性可以设为同一个字段 由此可见 TDBGrid的FieldCount属性可能小于栅格的列数
数据源
TDataSource构件是一个非可视的构件 它充当了数据集和数据控件之间的桥梁 每一个数据控件都必须指定一个数据源(TDataSource构件) 相应地 TDataSource构件的DataSet属性必须指定一个数据集 下面简单介绍一下TDataSource构件的属性和事件 DataSet属性用于指定一个数据集 在设计期 可以在对象观察器中为DataSet属性选择一个数据集 在运行期 可以通过代码动态地选择数据集 程序示例如下
With CustSource DoBeginIf DataSet = Customers thenDataSet := Orders ElseDataSet := Customers ;End;
也可以指定另一个窗体上的数据集构件 例如
Procedure TForm FormCreate (Sender : TObject);BeginDataSource Dataset := Form Table ;End;
一般情况下 TDataSource构件的名称是无关紧要的 不过 TDataSource构件的名称应当能反映它所连接的数据集 例如 假设TDataSource构件连接的数据集叫Customers 相应地 TDataSource构件的名称最好叫CustomersSource
Enabled属性用于控制TDataSource构件是否与数据集连接 设为True表示连接 设为False表示暂时断开连接 如果Enabled属性设为False 凡是连接于这个数据源的数据控件将变成空白 如果AutoEdit属性设为True 当用户在数据控件中键入字符时 数据集就自动进入dsEdit状态 如果AutoEdit属性设为False 程序必须调用Edit函数才能进入dsEdit状态
lishixinzhi/Article/program/Delphi/201311/8450
Delphi提供了两种方式在数据库表中查找记录 Goto方式和Find方式 这两种方式十分相似 它们的主要区别在于为查找指定查找值的方法不一样
使用Goto方式进行数据查找使用的方法有SetKey方法 GotoKey方法和GotoNearest方法 其实际步骤如下
①确保要查找的字段是关键字段或辅助索引字段
②调用SetKey方法把与表对应的TTable部件置成查找状态
③把查找值赋给相应的字段
④调用GotoKey方法 并测试它的返回值检验查找是否成功
假设Table 对应的表中第一个字段是关键字段 Edit 是应用窗体中的一个编辑框 用户可以通过Edit 输入查找值 下面的代码将通过Goto方式进行查找
Table SetKey; {将Table 置成查找状态}
Table Field[ ] AsString := Edit Text; {指定查找值}
Table GotoKey; {进行查找}
上面最后一行代码是根据用户指定的查找值 在表中执行查找 查找的结果有两种 也许成功也许失败 这是由调用GotoKey方法之后返回的布尔值来决定 如果返回True 那么查找成功 并且记录指针会指向与查找值匹配的记录 如果返回Fale 那么查找失败 记录指针的位置不发生变化 下面的代码可以测试调用GotoKey方法之后的返回值 告知用户查找是否成功
Table SetKey;
Table Field[ ] AsString:= Smith ;
If not Table GotoKey then
ShowMessage( 记录没找到 )
在这一段代码中 如果在表中没有找到第一个字段值为Smith的记录 该应用程序会d出一个对话框告知用户 记录没有找到
如果在表中存在多个关键字段或辅助索引中包含多个字段时 你在进行查找时 只想为第一个字段指定查找值 那么必须要设置TTable部件的KeyFieldCount的属性值为 如果想为多个字段指定查找值 只能为相邻的字段指定查找值 例如辅助索引 有三个字段 那么我们只能为第一个字段 第一和第二个字段 第一和第二以及第三个字段指定查找值 而不能为第一和第三个字段指定查找值
GotoNearest方法的使用与GotoKey方法完全一样 只是它用于不精确查找 它不要求查找结果与查找值精确匹配 当表中有与查找值精确匹配的记录时 它将记录指针移到该记录处 当表中没有与查找值精确匹配的记录时 它会查找出与查找值最接近的记录 并将记录指针移到该记录处
下面是应用GotoNearest方法的一段代码
Table SetKey;
Table Fields[ ] AsString:= Sm ;
Table GotoNearest;
执行上述代码后 若表中存在第一个字段值等于Sm的记录时 记录指针将移到该记录处 若表中不存在第一个字段值等于Sm的记录 而存在第一个字段值等于Smith的记录 那么记录指针会移到该记录处
如果我们不是以数据库表中的关键字段作为查找字段 我们也可以为TTable部件的IndexFieldName属性中的字段或IndexName属性中的字段指定查找值进行数据查找 例如 假设Customer表中有一个名叫CityIndex的辅助索引 我们为CityIndex中的字段指定查找值进行查找时 首先设置TTable部件的IndexName属性为CityIndex 然后再进行查找 下面是具体的程序代码
Table IndexName := CityIndex ;
Table Open;
Table SetKey;
Table FieldByName{ City ) AsString := Edit Text;
Table GotoKey;
使用Find方式 使用Find方式在数据库中进行数据查找的方法有 FindNearest方法和FindKey方法
FindKey方法和FindNearest方法为数据查找提供了一个简单的方法 它们将SetKey 指定查找值 执行查找三个步骤融合在一步里完成 它们在指定查找值时 是把各字段的查找值组成一个数组传给FindKey或FindNearest 下面是使FindKey方法的一个例子
假设Tabel 对应的表中的第一个字段是关键字段
Table FindKey([Edit Text])
如果用GotoKey方法完成这一功能则需要编写下面代码
Table SetKey;
Table Fields[ ] AsStrine := Edit Text;
Table GotoKey;
FindKey方法和FindNearest方法的区别与GotoKey和GotoNearest方法的区别是一样的
创建主要──明细数据库应用
TTable部件中MasterSource属性和MasterFields属性是用于定义两个数据库表的一对多的关系 MasterSource属性指定主表对应的TDataSource部件 MasterFields属性指定主表和明细表之间建立联系的字段 主表和明细表之间建立一对多关系时 可能不只是基于一个字段 可能有多个字段 如果有多个字段 那么在说明MasterFields属性时 多个字段之间要用分号隔开 如Table MasterFields := OrderNo;CustNo 在设计阶段可以使用字段连接设计器(Field Link Designer)为两上表创建一对多的关系 在Object Inspector 中双击TTable部件的MasterFields便可以打开Field Link Designer 进行一对多关系的创建
Field Link Designer提供了一种可视化的方法来创建主要──明细表之间的一对多关系 图中Available Indexes组合框中存放着明细表中的关键字段和索引字段 可以选择索引字段进行连接 在主表中选择一个用于连接的关键字段 然后将其与明细表中相应的关键字段连接 单击Add按钮 主要──明细表的连接字段将显示在Joined Fields列表框中 如
CustNo >CustNo
TDataSource部件及其应用
TDataSource部件是开发数据库应用程序中用到的非常重要的部件 它是连接数据集部件TTable或TQuery和数据浏览部件的桥梁 TDataSource部件本身十分简单 它所拥有的属性 事件和方法都比较少 在使用该部件时无需作太多的工作 它主要是为数据浏览部件服务的 如果在应用程序中没有使用数据浏览部件 我们也没有必要为应用程序设置TDataSource部件
TDataSource部件的属性
TDataSource部件除了其他部件都拥有的Name属性和Tag属性之外 主要有下面几个属性
DataSet属性 该属性说明TDataSource部件从中获取数据的数据集的名字 它可以是TTable部件的名字 也可以是TQuery部件的名字 甚至还可以指定其他窗体内的数据集作为该属性的值 如在下面的程序中我们指定窗体Form 中的table 作为窗体Form 中的DataSource 的DataSet属性值
TForm Formcreate(Sender : Tobject)
Begin
DataSource DataSet := Form Table ;
end;
Enable属性 Enable属性可以暂时性地切断TDataSource部件和与之相连的数据集部件的连接 这是一个布尔型变量 当它的值为False时 TDataSource部件和数据集部件的连接被切断 且所有与TDataSource部件相连的数据浏览部件中将变为一片空白 不显示任何数据信息 当Enabled的值变为True时 TDataSource部件和数据集部件的连接恢复 且与TDataSource部件相连的数据浏览部件恢复显示数据 不过要实现上述这些功能 一般不使用TDataSource部件的Enabled属性 而是调用数据集部件的DisableControls方法和EnableControls 方法 因为调用这两个方法可以方便地控制与数据集部件相连的所有TDataSource部件以及与TDataSource部件相连的数据浏览部件
AutoEdit属性 这是一个布尔型变量 它用于说明是否将与TDataSource部件相连的数据集置于编辑状态 当AutoEdit的值为True时 应用程序运行时 与TDataSource相连的数据集部件自动地被设置成编辑状态 当用户在与TDataSource部件相连的数据浏览部件中输入新的值时 数据集部件中的记录也随之改变 如果AutoEdit的值为False 用户想通过数据浏览部件或程序修改数据集中的记录 必须要调用数据集部件的Edit方法 将其置为编辑状态之后才能够进行
lishixinzhi/Article/program/Delphi/201311/25159
表 Delphi用于数据维护的方法
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
方 法 名 功 能
──────────────────────────────
Edit 将数据集置为编辑状态
──────────────────────────────
Append 投寄所有被修改的记录 将记录指针移到表中的最后一条记录 且将数据集置为插入状态
──────────────────────────────
Insert 投寄所有被修改的记录将数据集置为插入状态
──────────────────────────────
Post 将插入的新记录和修改的记录写回磁盘上的数据库表 即投寄 当投寄成功时数据集回到浏览状态 若投寄不成功数据集仍然保持原有状态
──────────────────────────────
Cancel 取消当前的 *** 作且将数据集置为浏览状态
──────────────────────────────
Delete 删除当前记录指针所在的记录且将数据集置为浏览状态
──────────────────────────────
AppendRecord 在表的最后插入一条新记录 记录的各个字段值作为
AppendRecord的参数传递给新记录
──────────────────────────────
InsertRecord 在当前指针所在记录的后面插入一条新记录 记录的各个字段值作为InsertRecord的参数传递给新记录
──────────────────────────────
SetRecords 修改当前记录 字段名和相应的字段值作为SetRecords的参数
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Edt方法 如果应用程序想对数据集中的数据记录进行修改 我们必须要将数据集设置成编辑状态 调用数据集部件的Edit方法便可以将数据集置成编辑状态 当数据集已经处在编辑状态时 调用Edit方法不会产生作用 当数据集处于编辑状态时 移动记录指针或调用post方法都可以将当前记录的修改写回到磁盘数据库表中 在程序中 Edit方法和post方法常常配合在一起使用 用于修改表中的记录 如
Table Edit;
Tabel FieldByName( CustNo ) Asstring := ;
Table st;
在上述这一段程序代码中 第一行程序是将Table 置成编辑状态 第二行程序是对当前记录指针所在的记录的CustNo字段的值修改成 第二行程序是调用post方法将对当前记录的修改写回数据库表
Append方法和Insert 方法 这两个方法都是将数据集部件置成插入状态 以在表中插入新记录 Insert方法是在当前指针位置的记录后面插入一打新记录 Append方法是在表的尾部插入一打新记录 不过这要注意 无论用户是调用Insert方法还是Append方法插入新记录 增加记录到一个具有索引的表中时 都是按照索引顺序写入其位置 也就是说对于索引表格Insert方法和Append方法的作用是一样的 Append仅适用于没有索引的表 Insert方法和Append方法实际上是将数据集置成插入状态 并且插入一条空白记录 要真正插入一条新记录 我们必须在调用Insert或Append方法之后 还要给新记录的各个字段赋值 最后调用post方法 将插入的记录写回数据库表 调用这两种方法插入新记录的一般步骤如下
With tabe DO
Begin
Insert; {调用Insert方法 插入一条空记录}
<为记录的各字段赋值>
Post;
End;
Post方法 数据集中的记录被修改或插入新记录时调用post方法将数据集的修改写回到数据库表 根据数据集所处的状态不同 post方法所产生的作用和效果是不一样的
● 当数据集处于编辑状态时 调用post方法 将当前记录的修改写回数据库表
● 当数据集处于插入状态时 调用post方法 将插入的新记录写回数据库表
● 当数据集处于SetKey状态时 调用post方法 将数据集置成浏览状态(Browse状态)
post方法的调用既可以显式地调用 也可以隐含地调用 当数据集处于编辑状态或插入状态时 当移动记录指针时 Delphi会隐含地调用post方法 将将当前记录的修改写回数据库表 在程序调用Insert方法或Append方法时 也会隐含地调用Post方法 将先前的数据集的修改写回数据库表
Delete方法 Delete方法用于删除表中的记录 调用Delete方法时 将会删除表中当前的记录 并且自动地将记录指针移到被删记录的下一条记录 同时将数据集置成Browse状态
Cancel方法 Cancel方法用于取消当前的 *** 作 当程序还没有调用Post方法 将对记录的修改写回数据库表时 调用Cancel方法 可以将记录恢复到没有修改之前的状态 并且在调用Cancel方法时 它总是将数据集置成Browse状态
AppendRecord方法和InsertRecord方法 这两个方法分别与Append方法和Insert方法相似 它们都是用于在表中插入一条新记录 但AppendRecord方法和InsertRecord方法比Append和Insert方法更简单更方便一些 它们直接在表中插入一条新记录 新记录的各个字段值作为AppendRecord或InsertRecord方法的参数传递给新记录并且不需显式地调用post方法 将插入的新记录写回数据库表 在给插入的新记录赋字段值时 将由多个字段值组成的数组作为AppendRecord或InsertRecord的参数 在字段值数组中可以为每一个字段提供一个值 或从左边一列开始依次为任意多个字段赋值 也就是说 用户可以从数据库表的最左一列起 把许多列的值同时传递给InsertRecord 直到所有的字段被赋值 用户也可以省略字段序列后面的的一些字段值 InsertRecord会用空值来填充这些字段 用户也可以对那些明确希望用空填充的字段传递保留字NIl
lishixinzhi/Article/program/Delphi/201311/25163
在delphi中有一批数据库专用的控件,比如ADO类的,可以直接用于数据库开发,你可以先用一个Access数据库自己进行一下测试。
首先在窗体上放一个ADOConnection1控制,用于与Access数据库进行连接,连接字符串为:
ADOConnection1ADOC_DataConnectionString:='provider=MicrosoftJetOLEDB40;'
+'userID=Admin;'
//+'DataSource='+ExtractFilePath(ApplicationExeName)+'MyRecordmdb;'
+'DataSource='+MyDataBaseName+';'
+'Mode=ShareDenyNone;ExtendedProperties=\"\";'
+'JetOLEDB:Systemdatabase=\"\";'
+'JetOLEDB:RegistryPath=\"\";'
+'JetOLEDB:DatabasePassword=\"123456;'//数据库密码
+'JetOLEDB:EngineType=5;'
+'JetOLEDB:DatabaseLockingMode=1;'
+'JetOLEDB:GlobalPartialBulkOps=2;'
+'JetOLEDB:GlobalBulkTransactions=1;'
+'JetOLEDB:NewDatabasePassword=\"\";'
+'JetOLEDB:CreateSystemDatabase=False;'
+'JetOLEDB:EncryptDatabase=False;'
+'JetOLEDB:Don'+''''+'tCopyLocaleonCompact=False;'
+'JetOLEDB:CompactWithoutReplicaRepair=False;'
+'JetOLEDB:SFP=False';
DMADOC_DataLoginPrompt:=False;
再放一个ADOQuery1控制,用于 *** 作数据表,将它的Connection属性设置为ADOConnection1。或用语句实现:ADOQuery1Connection:=ADOConnection1;
然后再分别放置一个DataSource1和一个DBGrid1控件,
将DataSource1的DataSet属性设置为ADOQuery1。
将DBGrid1的DataSource属性设置为DataSource1。
这时就可以通过ADOQuery1来执行SQL语句来查询数据表,并通过DBGrid1显示出来了。
在这一章里我们主要介绍Delphi的数据访问部件的层次结构 多部件之间的关系 部件的属性 方法 事件以及各部件的应用 这些部件包括
● TSession部件
● 数据集部件(TTable和TQuery)
● TDatasource部件
● 字段对象TField
● 字段编辑器的使用
● TReport部件和TBatchMove部件
我们对这些部件的属性 方法和事件进行一般性的描述 读者在实际使用Delphi开发应用程序时 还可以通过联机帮助获得有关部件更详细的信息
Delphi数据访问部件的层次结构
Delphi提供了强大的开发数据库应用程序的能力 它给用户提供了大量的数据访问部件 以方便程序设计人员开发数据库应用程序 这些部件中 有些部件继承了另一些部件的属性 方法和事件 也就是说多部件之间存在着继承和被继承的关系 各部件的这种关联便构成了一个层次结构
TSession是全局性的部件 在应用程序运行时 它自动地建立 在设计阶段和运行过程中它是一个不可见的部件
TDatabase部件是为开发客户/服务器数据库应用程序时 设置登录的数据库的有关参数的 它在数据访问部件页上
TDataset部件是不可见的 TTable和TQuery部件是由它派生而来的 这两个部件一般被称为数据集部件 它们在数据访问部件页上
TDatasource部件是连接数据集部件和数据浏览部件的桥梁 它在数据访问部件页上
TFields部件对应于数据库表中的实际字段 它既可以在应用程序的运行过程中动态地生成也可以在程序设计阶段用字段编辑器创建 它是不可见的部件 在程序中我们可以通过TField部件来访问数据库记录的各个字段值
Tsession部件及其应用
TSession部件一般用得较少 但它对于一些特殊的应用是很有用的 在每一个数据库应用程序运行时Delphi自动地创建一个TSession部件 程序设计人既不能看见该部件也不能显示地创建一个TSession 部件 但是我们可以在应用程序中全局性地使用TSession部件的属性 方法
TSession部件的重要属性及作用
TSession部件的许多重要属性是用于控制数据库应用程序与数据库的连接的 在一个应用程序中 可以全局性地设置TSession的有关属性值 对与之相连接的磁盘上的数据库进行控制 TSession部件主要有下列属性
Database属性 是TSession中可以进行连接的所有数据库的数据库名字列表 这些数据库的名字常常是实际数据库的别名 包括数据库的路径 用户名 用户登录口令等参数
DatabaseCount属性 是TSession中可以进行连接的所有数据库的数量 它是一个整数
KeepCounnections属性 是一个布尔型属性 用它说明应用程序是否保持与一个非活动数据库的连接 因为对于一个数据库 当该数据库中没有相应的数据集部件(TTable或TQuery)被打开时 该数据库将自动地变成非活动的数据库 缺省情况下 KeePcounnections的值是True 就是说应用程序总是保持着与数据库的连接 即使数据库变成了非活动的数据库时 也是如此 如果将KeepConnections属性设置成False 那么当数据库由活动状态变成非活动状态时 应用程序与该数据库的连接也随之中断
NetFileDir属性 说明BDE网络控制文件的路径名
PrivateDir属性 说明存取临时文件的路径名
TSession部件的方法
TSession部件中的大部分方法是用于向用户提供与应用程序相连接的数据库的信息 如数据库的名字及别名 数据库中的表名以及数据库引擎BDE的有关参数等 在设计数据库应用程序时 想要获取有关数据库的信息 调用TSession部件的下列方法 将会大大简化程序的设计
GetAliasNames方法 调用该方法 我们可以获得数据库引擎BDE中定义的数据库别名
GetAliasParams方法 该方法主要用于获取我们在BDE中定义数据库别名时所说明的参数值 如BDE所在的目录路径以及实际名称等
GetDatabaseNames 方法 调用该方法可以帮助我们获得当前应用程序可以进行连接的所有数据库的名字 数据库的名字是用户使用BDE工具定义的实际数据库的别名
GetDriverNames方法 数据库引擎BDE可以与多种数据库管理系统相连接 如客户/服务器数据库管理系统Oracle Sybase以及本地数据库管理系统dBASE Paradox等 BDE与每一种数据库管理系统进行连接时 都有相应的驱动程序 而且这些驱动程序都可以选择地安装 通过调用GetDriverNames方法 我们可以获得当前BDE安装的数据库驱动程序的名字
GetDriverParams方法 BDE的数据库驱动程序中包含着多个参数 如支持的民族语言 DBMS的版本号 文件块大小等 对于服务器上的DBMS 还有数据库服务器的名字等等
GetTableNames方法 因为每一个数据库都是由多个数据库表组成的 我们通过说明数据库名 然后调用GetTableNames方法 便可以获得该数据库中全部的数据库表的名字
上述这些方法在调用时都需要一个字符串列表作为参数 而且都返回一个字符串列表的值
TSession部件还有一个叫DropConnections的方法用于控制应用程序与数据库的连接 当调用DropConnections方法时 应用程序与所有的数据库的连接将会切断
TSession部件应用举例
例 :我们创建一个应用程序 通过调用TSession有关的方法获取当前应用程序可以进行连接的数据库的名字以及获取其中任意一个数据库中的全部数据库表的名字
通过TSession部件获取数据库的有关信息
窗体中主要使用了两个列表框 其中列表框DatabaselistBox用于显示数据库的名字 列表框TablelistBox用于显示数据库中的表名 程序运行完后数据库的名字显示在DatabaselistBox列表框中 当用户单击DatabaselistBox列表框中的数据库名时 该数据库全部的数据库表的名字将会显示在TablelistBox列表框中 有关的程序代码如下
lishixinzhi/Article/program/Delphi/201311/25161
以上就是关于Delphi数据库控件使用入门(三)全部的内容,包括:Delphi数据库控件使用入门(三)、DELPHI基础教程:数据访问部件的应用及编程(二)[3]、DELPHI基础教程:数据访问部件的应用及编程(一)[3]等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)