- 在线时间
- 0 小时
- 最后登录
- 2007-9-23
- 注册时间
- 2004-9-10
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 9975 点
- 威望
- 7 点
- 阅读权限
- 150
- 积分
- 4048
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1893
- 主题
- 823
- 精华
- 2
- 分享
- 0
- 好友
- 0

我的地盘我做主
该用户从未签到
 |
< >---转载自《计算机世界日报》 (文/凌震)</P> w3 I; o( ], ?7 k) O6 R7 K
< >---- 本文介绍了在 C++Builder 5环境下新增的ADO控件的使用方法,并给出了一个简单的实例。 </P>2 k+ ]0 k1 r4 W7 Z6 f4 J
< >---- 一、ADO概述 </P>
. K9 X0 Y* r. K< >---- ADO(Active Data Object) 是微软公司基于OLE DB的数据库模型。它实现了一系列COM接口,通过数据提供者(Data Provider)和数据使用者( Data Consumer)来实现广义的数据存取。ADO模型一方面简化了数据存取,例如使用Jet OLE DB Provider可以实现Access数据库的无DSN连接;另一方面,在ASP等Internet应用中也得到了广泛的使用。 </P>
) U* ?4 R) @2 Z, g+ h4 K! j< >---- 在C++Builder 5/Delphi 5中诸多新增特性中,ADO数据控件的引入是比较引人注目的,它使ADO编程和在Visual Basic 6中一样容易。由于VCL类库对ADO的封装更加合理,旧的数据控件可以很容易地升级到ADO支持,而不象在VB中某些DAO或RDO控件无法兼容ADO。 </P>9 q+ n( H+ [) K2 L, V
< >---- 二、使用ADO控件 </P>( m4 j; h. ?6 g9 ^( I, `# z( E
< >---- 在C++Builder 5中,ADO控件实质上是一种数据访问组件。如果读者有过C++Builder先前版本的数据库开发经验,就会发现与数据访问组件相连的数据源组件(TdataSource) 和数据感知组件(如TDBGrid)的使用方法和以前一样,只需把 TdataSource 连到ADO控件上即可。 </P>4 e3 e s$ A1 V8 S
< >---- 如果要实现简单的表操作或查询,可以使用TADOTable或TADOQuery。更一般地,可以使用TADODataSet控件,其基本属性的设置方法如下: </P># e1 G ]" y$ z5 e8 z) w
< >---- (1)ConnectionString属性:点击属性栏中的省略号,出现配置窗口,选"Use Connection String",按Build按钮。在接下来的窗口中选择数据提供者,以微软的Northwind示例Access数据库为例,选Microsoft Jet 4.0 OLE DB Provider, 按Next按钮,选择数据库的路径和文件名。点击Test Connection按钮可以测试数据库连接。点击"确定"。 </P>
1 E! O E2 A' f8 b- Q< >---- (2)CommandText属性:可以使用CommandText Editor生成SQL语句或Shape语句。 </P>
# m6 K2 W i' `. k< >---- 注意,TADODataSet不支持不返回结果集的DML语句,如DELETE,INSERT,UPDATE。如果要使用这些语句,选择TADOCommand或TADOQuery。 </P>+ v0 m3 o" a7 T7 i% K9 S. t
< >---- 这些ADO控件自身已能实现数据库连接,也可以设置其Connection属性为一个TADOConnection控件名,而在 TADOConnection控件中设置 ConnectionString属性。所有属性也可以用代码在运行期间设置。 </P>
/ Y4 Y) P! @* d5 n$ c. u( q8 R< >---- 三、一个Master/Detail实例 </P>: i h" H1 c" A7 y" m. d4 N
< >---- 下面以一个简单的实例说明ADO控件的应用。这里我们用Shape语句实现Master/Detail关系。关于Shape语句的详细解释,请参考MSDN文档。 </P>
. L4 y. b; X3 R6 v! V j& b7 G< >---- 1. 新建一个项目,并在窗体中放置下列控件(带省略号的属性值先不设置): </P>* p4 |) p5 j' B4 b4 o
< >名称 控件类型 属性 属性值 , D" Z4 |5 x3 D7 V1 o+ k5 f
ADOConnection1 TADOConnection ConnectionString … + b/ {; \8 u; `( V" H( n0 f, s
ADODataSet1 TADODataSet Connection ADOConnection1 CommandText…
6 ] q% [% P9 sDataSource1 TDataSource DataSet ADODataSet1 8 x' k2 Z& ^* n, d8 Z! N
DBGrid1 TDBGrid DataSource DataSource1
+ R& y- s5 p9 P5 J1 ~# @ADODataSet2 TADODataSet DataSetField … . c* l) a1 Y) p2 A& e/ Z
DataSource2 TDataSource DataSet ADODataSet2
8 V& V) N/ v. s7 V- X' A! bDBGrid2 TDBGrid DataSource DataSource2 </P>% K* I: v, M3 u2 P( S- ]
< >
4 H) H8 l3 N+ w4 c---- 2. 设置 ADOConnection1的ConnectionString值 </P>6 C; l c: f' I& j2 ]4 i0 ^
< >---- 选择Data Provider为MSDataShape,并设置Northwind数据库的路径和名称。 </P>+ Y2 ?9 x y, F' |* ~! U0 S f
< >---- 3. 设置 ADODataSet1的CommandText值如下: </P>3 c3 p0 @$ }! r$ Z) ?
< >SHAPE {select * from Orders}
1 k+ p9 T1 O. G; ]" mAPPEND ({select * from [Order Details]} AS Details! P4 P: U& @7 Z) v
RELATE OrderID TO OrderID)</P>
3 k- }; d R: v* c6 f1 l< >---- 这里定义了主表Orders和子表Order Details通过OrderID的连接。 2 s) _2 s8 C' Y+ S5 p! m. m5 M
---- 4. 在ADODataSet1控件上右击,选Fields Editor…->右击->选Add fields… 或Add all fields,务必选中"Details"项,这是我们在Shape语句中定义的用于子表连接主表的数据集。 </P>4 \4 q- A3 \2 r- X
< >---- 5. 设置 </P> w& H* j! A8 p; N6 G: l5 a: F
< >----ADODataSet2的DataSetField值,这时可供选择的值为ADODataSet1Details,选中它,表明与ADODataSet1的Details列相连。 </P>
0 R% J8 f. f, h% A- s< >---- 6. 出现在 DBGrid1中的 Details 列,其每个记录都是DataSet类型的。可以在DBGrid1中隐藏 Details列的显示:选择 DBGrid1的Columns属性,在弹出窗口的工具条上点击 Add all Fields,选中 Details,点击Delete Selected. </P>+ H. M+ a, v. j0 l' C9 H, J
< >---- 7. 运行该程序,当数据指针在主表Orders中移动时,子表Order Details自动更新以显示不同订单的明细条目。 </P>$ {1 j! l; [$ z2 C
< >---- 从以上实例看出, C++Builder 5完全具备开发复杂的ADO应用程序的能力,其强大的VCL控件使开发者能集中注意力于数据库的逻辑与功能设计,而不必关心繁复的常规代码和操作。 </P>
/ @0 Y6 N* f4 e; G< >
0 q; s. G7 t: G X, D7 @' K </P> |
zan
|