|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
UG NX二次开发访问数据库方式--ODBC访问图文教程
% W( ?: r* U8 {2 w% f" E% o" `: X
6 d0 |, Z. Q9 y6 f1 S/ x1.1 配置ODBC数据源% Q1 e" m2 _0 s/ p5 K
1、选择"控制面板"中的"管理工具"下面的"数据源 (ODBC)",如下图所示。
; W% z; N F: t) T
( U | m ?8 h- {" N8 W
2、在弹出的ODBC数据源管理器对话框中,选择系统“DSN”,并单击"添加…"按钮,将出现创建新数据源对话框,如下图所示。
7 z% m2 d1 n: e$ \: f
) ]& Z3 ~/ n0 y: h. g
3、在创建新数据源对话框中,选择你将访问数据源相应的驱动程序,比如,我们将访问Access数据库中的数据,此时可选择“Microsoft Access Driver(*.mdb)”,选择后,单击“完成”按钮,此时,出现数据源相应驱动程序的选择界面,如下图所示。' J- J$ F- x6 R+ t, y
8 A# w& s1 ~& G9 E
4、在驱动程序选择界面中,数据源名框中输入DSN的名称,比如,Screw。DSN的名称非常重要,它是后期访问数据源的唯一标识。输入DSN的名称后,可通过“选择(S) …”按钮选择相应数据源所在的路径,如果选择成功,将在界面出现已选中的数据源的完整路径和名称,如下图所示。
0 K2 w; q) M8 V/ i+ {9 K$ V
- i; t- k$ [% w( L3 f! J% F5、点击“确定”按钮,此时在“系统DSN”中就会出现你刚创建的ODBC数据源名,表明配置数据源成功。, u$ s2 o* b2 g3 F( }/ F+ S
( ^9 y: E! b$ E1.2 读取ODBC数据源中的数据2 o0 R- B$ n. k4 |
读取ODBC数据源中的数据时,经常使用到CDatabase(数据库类)、CRecordSet(记录集类) 。CDatabase类对象提供了对数据源的连接,通过它可以对数据源进行操作。CRecordSet类对象提供了从数据源中提取出的记录集进行操作。
- t, }9 J0 L5 Y$ C! i, x/ R! N* Q1、CDatabase类, U# d- \8 U5 Y( h# G0 ?$ r' I2 g6 H
一个CDatabase对象代表与数据源的一个连接。创建一个CDatabase对象之后,调用Open或OpenEx成员函数指定一个DSN(数据源名)。一旦调用了这两个函数之一,就建立起了与DSN的底层数据源的连接。CDatabase对象通常与一个或多个记录集(CRecordset对象)一起使用。下面的例子是用一个CDatabase对象来建立与一个DSN的连接:* p' W, E, [4 p9 R/ e6 ^
try{
, C- x$ {. o, G6 M' C CDatabase db;
9 L2 C4 N/ H4 I6 Z db.Open("Screw"); // 建立与DSN(Screw)的连接9 B6 U4 }2 ~5 e8 b& z& }
// Use db" p7 R$ G3 v' Q. b; o
...
0 _( e% t! c4 |8 a; g db.Close(); //关闭先前建立的与DSN的连接# O8 ?8 w2 [5 M2 Y# R
}
- d( j2 P/ D" V' ~" @1 QCDatabase构造函数并没有做很多事情,只有调用Open函数才能建立起与数据源的连接,因此,我们有必要先看一下这两个函数。3 s# A# l/ U6 _1 b$ s1 i
virtual BOOL Open(
& P) I8 R% r5 U4 `( W LPCTSTR lpszDSN,
" B g! `0 e2 P BOOL bExclusive = FALSE,
' B! k- Y) w x( B) G. y1 l- \ BOOL bReadOnly = FALSE,
3 S O: K' ~4 h1 y5 h. o" v LPCTSTR lpszConnect = _T("ODBC;"),# m, a7 V7 K3 i z ]8 z# M/ b
BOOL bUseCursorLib = TRUE
h. ~* s" M" M f);( F: x5 D. P: \' m$ P# H
在Open函数原型中,有几个选项在打开数据库连接的时候可以指定,但通常只需要提供第一个参数。在前面的例子中,这第一个参数是我们在前面建立的DSN的名称。
) L4 w! B. y# p* v( q( ibExclusive参数指定是否允许其他应用程序对数据源的连接。bExclusive为FALSE时表示允许多个程序共享打开的数据源。bExclusive为TRUE时,在老版本的类库中并不支持,会引发一个断言错误,在.net中应该支持。
+ Q3 x. |0 h' T: G: rbReadOnly参数允许应用程序指定建立连接之后,是否可以更新数据源。FALSE是默认值,表示可以通过这个连接来更新数据源。任何被创建并附属于这个CDatabase的CRecordset对象都自动继承这个值。; ~5 A3 a& W; F5 j' u
lpszConnect参数指定连接字符串。使用这个参数的好处是灵活性,如果数据源指定了用户ID和密码,可以通过lpszConnect参数来实现。上面的例子中,如果我们的数据源指定了用户ID为UgUser,密码为110,那么可以有两种使用Open成员函数的方式:4 p) F, E& m$ H/ g$ t$ U
db.Open(
8 }/ Y' s' a+ t _T("Standard Part")," u* P0 A8 O* c1 N# i3 X% v
FALSE,' Y; j1 ]7 {7 x( K
FALSE,
- p3 g. R: d; N9 m z# G& Q$ g _T("ODBC;UID=UgUser;PSW=110"),' R V" X, A5 g
FALSE* d V- q% _: y; ]/ k) X, X. z
);1 w5 c" @! P+ H( i ?7 Z
db.Open(
2 X& q5 I; X& X# @ NULL, z" W; X* F: {' D+ D' x, C& z W
FALSE," x2 j) b+ Z$ F, _$ _, o
FALSE,) k7 j: P2 u1 Q, C) U6 }- ]
_T("DSN=Standard Part;UID=UgUser;PSW=110"),
4 N8 e) ?8 o& h; b FALSE- j, t6 i& }* o+ Q) t1 Q, Y) u
);2 q r* {; E- W( S
bUseCursorLib参数指定是否使用ODBC游标库,如果这个值被设置为TRUE(默认值),这个连接只允许静态快照或仅向前类型的游标。为了使用动态集,这个参数必须设置为FALSE。因为在后面我们要用到CRecordset类,所以上面程序段中的db.Open("Standard Pad")将会引起CRecordset类使用时的运行时错误(虽然与DSN的连接通过这一条语句能建立好),原因是bUseCursorLib参数未指定为FALSE。
! @7 N8 t3 D1 y# ] y8 ~CDatabase::OpenEx仅使用两个参数:一个连接字符串和一个代表连接选项的DWORD。lpszConnectString向函数传递ODBC连接字符串,dwOptions参数设置这个连接的建立方式。下面的值可以通过逻辑操作符OR一起使用:
. q- {* o, a2 k3 Y# `: D0 RCDatabase::Exclusive
. N3 p% g. ^; N/ Z' S9 ?CDatabase::openReadOnly
3 ~: T' l' t7 u5 W/ D# u2 UCDatabase::useCursorLib0 T; J8 D" I) T, \( b7 c
CDatabase::noODBCDialog Z9 x N3 e) a3 _
CDatabase::forceODBCDialog$ K; A! o1 c" K8 @0 u- x9 R
这些值与在Open函数中的使用方法完全一样,唯一的区别是增加了noODBCDialog和forceODBCDialog标志。这些标志确定当应用程序企图建立与数据源的连接时,ODBC Driver Manager是否给用户弹出ODBC连接对话框。1 r) `/ {& I9 _+ J, B2 {6 d, O+ x' _
2、CRecordset类 [5 U7 {1 v. y: G$ J5 A( U/ t; G
一个CDatabase对象代表与数据源的一个连接,而一个CRecordset对象(称为记录集)代表从一个数据源检索出的一组记录。6 h/ S6 i0 N$ H6 u% ]3 a
CRecordset类支持动态集类型和快照类型。动态集,或称键集合驱动记录集,是数据的动态集合,它支持双向滚动并与数据源的其他用户做的更新保持同步。另一方面,快照则是在记录集被填充时数据的静态照片。这个记录集不受其他用户所做的更改的影响。如果使用快照类型记录集的应用程序需要查看其他用户做的改动,必须先关闭记录集再重新打开。快照类型记录集也支持双向滚动。& m& W h1 r9 B% Y. {
" z1 f( ?/ V, j5 y. e, m! O9 N, e4 D- E* i
7 D9 v; \/ _. m! h
9 V+ O/ o' E( H, F
% t% G, H- K% j0 G& d! e5 _( U/ L% a7 s& B
/ ]6 \' l9 n7 c% ~* }9 r
! L- e K8 g8 K3 Z# J2 m3 {
, g' J: ^& r7 o9 f7 e( e- b |
|