|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
UG NX二次开发访问数据库方式--ODBC访问图文教程& u6 {/ _2 Y6 C3 ^( Y
8 g/ i- p- h- N! Q' Y# H0 B
9 k- B$ R$ C0 H
1.1 配置ODBC数据源
1 d& u" U+ w5 c& r8 z% R1、选择"控制面板"中的"管理工具"下面的"数据源 (ODBC)",如下图所示。) G( o. L) } N/ }8 G1 d2 P( G9 k
5 j$ q' h: \" `$ h- @9 d$ |2、在弹出的ODBC数据源管理器对话框中,选择系统“DSN”,并单击"添加…"按钮,将出现创建新数据源对话框,如下图所示。" t# [4 e" A1 j: U7 m: ~9 d4 \
: v' N5 b( v1 e: J. C3 j3、在创建新数据源对话框中,选择你将访问数据源相应的驱动程序,比如,我们将访问Access数据库中的数据,此时可选择“Microsoft Access Driver(*.mdb)”,选择后,单击“完成”按钮,此时,出现数据源相应驱动程序的选择界面,如下图所示。9 l/ t0 `4 v: V
. u( F4 @1 p3 j8 Q4、在驱动程序选择界面中,数据源名框中输入DSN的名称,比如,Screw。DSN的名称非常重要,它是后期访问数据源的唯一标识。输入DSN的名称后,可通过“选择(S) …”按钮选择相应数据源所在的路径,如果选择成功,将在界面出现已选中的数据源的完整路径和名称,如下图所示。
! o( O: _. t7 a+ r# } 8 U% ^$ W5 O) t- O" d \# I
5、点击“确定”按钮,此时在“系统DSN”中就会出现你刚创建的ODBC数据源名,表明配置数据源成功。) X( C- o$ t8 {6 a5 k5 Y
/ x) f. j" T2 H5 o# w& \6 U3 t1.2 读取ODBC数据源中的数据
! K: _9 l! u- P8 e4 z读取ODBC数据源中的数据时,经常使用到CDatabase(数据库类)、CRecordSet(记录集类) 。CDatabase类对象提供了对数据源的连接,通过它可以对数据源进行操作。CRecordSet类对象提供了从数据源中提取出的记录集进行操作。
! Y0 Z% D! I+ w; O4 ]: v2 g1、CDatabase类$ @) G$ B/ n# F2 n* E
一个CDatabase对象代表与数据源的一个连接。创建一个CDatabase对象之后,调用Open或OpenEx成员函数指定一个DSN(数据源名)。一旦调用了这两个函数之一,就建立起了与DSN的底层数据源的连接。CDatabase对象通常与一个或多个记录集(CRecordset对象)一起使用。下面的例子是用一个CDatabase对象来建立与一个DSN的连接:- D. F0 }9 I, F% K4 C: E! U
try{
1 v) J0 w O0 M% i8 N" ^6 K& t. S% j CDatabase db;
. S8 z1 [1 R0 w" e db.Open("Screw"); // 建立与DSN(Screw)的连接
" m/ w$ ] s) S# X // Use db
6 H# w' M; D7 @% a ...# E; X! w6 H( }2 {# H% B/ _1 V, c
db.Close(); //关闭先前建立的与DSN的连接) ^8 O5 F( z) x- ?* o
}
4 ~6 X; v; k) l3 x( v6 ZCDatabase构造函数并没有做很多事情,只有调用Open函数才能建立起与数据源的连接,因此,我们有必要先看一下这两个函数。
" @: Z8 q0 w. M8 K virtual BOOL Open(
& R9 G4 v2 F. W! Y2 h5 D LPCTSTR lpszDSN,
3 U0 E y* }8 U) k6 W0 m BOOL bExclusive = FALSE,
: d4 o" C. ~( d- V: \" M- v5 W! Z1 x BOOL bReadOnly = FALSE,
* T: A6 d( _% u, [( Y5 i* g& r/ J0 K- g LPCTSTR lpszConnect = _T("ODBC;"),* i1 B6 T A* C; x% E' N
BOOL bUseCursorLib = TRUE
/ f8 T; F! `) z$ _- V" I);: K5 v" T% J5 i( K& ]4 L9 M+ \; f2 d
在Open函数原型中,有几个选项在打开数据库连接的时候可以指定,但通常只需要提供第一个参数。在前面的例子中,这第一个参数是我们在前面建立的DSN的名称。
, ]5 J3 m# ~( d! q% d& KbExclusive参数指定是否允许其他应用程序对数据源的连接。bExclusive为FALSE时表示允许多个程序共享打开的数据源。bExclusive为TRUE时,在老版本的类库中并不支持,会引发一个断言错误,在.net中应该支持。9 I7 T9 V/ w+ I# v0 x1 a1 s
bReadOnly参数允许应用程序指定建立连接之后,是否可以更新数据源。FALSE是默认值,表示可以通过这个连接来更新数据源。任何被创建并附属于这个CDatabase的CRecordset对象都自动继承这个值。% ^8 @" N% k. ~% Y- L
lpszConnect参数指定连接字符串。使用这个参数的好处是灵活性,如果数据源指定了用户ID和密码,可以通过lpszConnect参数来实现。上面的例子中,如果我们的数据源指定了用户ID为UgUser,密码为110,那么可以有两种使用Open成员函数的方式:
3 o0 n2 @* N- v2 x4 S5 T5 q db.Open() B) Y3 p7 ], t
_T("Standard Part")," t }" @! b) Y5 e) g
FALSE,
) |% F! ^' ]+ t5 f( i F' a FALSE,' f+ j7 p1 V3 ~2 S! z8 w. f7 x
_T("ODBC;UID=UgUser;PSW=110"),
" c, Z0 Q8 d! [1 J* A1 k9 k FALSE- \- l7 h( \ T2 K' _9 C* K, h3 k
);( ?0 e) k, a8 ^" w0 l% K8 r8 g
db.Open(
3 m( x. @5 e q5 X NULL,3 O5 O! c5 E5 ]9 U# n Y9 m
FALSE,
" r7 q7 u1 h5 _$ G+ d# ~4 @ FALSE,
. X5 L3 @2 h* I" R4 u _T("DSN=Standard Part;UID=UgUser;PSW=110"), ~7 W$ C/ B" {* B, {2 Y
FALSE
* j6 }4 _7 m9 ?1 c1 N );) p5 t2 O# I5 D0 N) ?- \
bUseCursorLib参数指定是否使用ODBC游标库,如果这个值被设置为TRUE(默认值),这个连接只允许静态快照或仅向前类型的游标。为了使用动态集,这个参数必须设置为FALSE。因为在后面我们要用到CRecordset类,所以上面程序段中的db.Open("Standard Pad")将会引起CRecordset类使用时的运行时错误(虽然与DSN的连接通过这一条语句能建立好),原因是bUseCursorLib参数未指定为FALSE。' _/ {- y8 Y1 h: E
CDatabase::OpenEx仅使用两个参数:一个连接字符串和一个代表连接选项的DWORD。lpszConnectString向函数传递ODBC连接字符串,dwOptions参数设置这个连接的建立方式。下面的值可以通过逻辑操作符OR一起使用:& b5 x3 c; r% S, y
CDatabase::Exclusive
) X* U. x5 T- R8 _& D% C8 BCDatabase::openReadOnly* a- ^ V$ l5 m: T- ?3 E
CDatabase::useCursorLib- ~% V) y9 ~5 G4 }
CDatabase::noODBCDialog' L' O$ `( s! L8 B$ a
CDatabase::forceODBCDialog! w" A, L3 n: `2 t
这些值与在Open函数中的使用方法完全一样,唯一的区别是增加了noODBCDialog和forceODBCDialog标志。这些标志确定当应用程序企图建立与数据源的连接时,ODBC Driver Manager是否给用户弹出ODBC连接对话框。* M9 j0 ~, }% Y3 j% j2 X
2、CRecordset类0 n7 D ]8 {+ p C* }+ H( T6 |. |. X
一个CDatabase对象代表与数据源的一个连接,而一个CRecordset对象(称为记录集)代表从一个数据源检索出的一组记录。
+ g3 ?; u1 L. U, h! D s' {CRecordset类支持动态集类型和快照类型。动态集,或称键集合驱动记录集,是数据的动态集合,它支持双向滚动并与数据源的其他用户做的更新保持同步。另一方面,快照则是在记录集被填充时数据的静态照片。这个记录集不受其他用户所做的更改的影响。如果使用快照类型记录集的应用程序需要查看其他用户做的改动,必须先关闭记录集再重新打开。快照类型记录集也支持双向滚动。
6 {, y6 a! u/ L* {% [3 T, T5 x% b0 r: Y! z9 L
; U( G9 M8 B, M+ a
+ [# r4 p$ [9 a; {! G$ p6 v5 d# ?! i/ X) ?5 m B, h5 R
+ z1 q$ g6 h A4 w b, S
0 O$ J, ]; Y0 f O% X) C/ c
$ f; S# V- K K/ ^, t9 \0 A( T6 v
1 c4 w& @# W+ N- _3 B3 p, G1 b
# `1 _6 o, e5 `( E" ?2 G
|
|