|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
UG NX二次开发访问数据库方式--ODBC访问图文教程
. P7 u) I* o5 M3 u
* q7 n+ b+ D% h. C' t# M: ]) `3 F
1.1 配置ODBC数据源) O; E; E1 v: A# I/ x2 z: o3 J
1、选择"控制面板"中的"管理工具"下面的"数据源 (ODBC)",如下图所示。
& P% W7 T1 ?9 }8 r* R# g! Z2 s6 ~
1 f# c: Z0 m# B: W& E+ G- s1 a2、在弹出的ODBC数据源管理器对话框中,选择系统“DSN”,并单击"添加…"按钮,将出现创建新数据源对话框,如下图所示。* b, c( B9 k5 y; l1 m
' Z3 M7 u1 @2 W% L6 W3、在创建新数据源对话框中,选择你将访问数据源相应的驱动程序,比如,我们将访问Access数据库中的数据,此时可选择“Microsoft Access Driver(*.mdb)”,选择后,单击“完成”按钮,此时,出现数据源相应驱动程序的选择界面,如下图所示。
% I4 d; C, n7 y& O8 ?. Z
4 P5 |4 L& W1 n' p L: K
4、在驱动程序选择界面中,数据源名框中输入DSN的名称,比如,Screw。DSN的名称非常重要,它是后期访问数据源的唯一标识。输入DSN的名称后,可通过“选择(S) …”按钮选择相应数据源所在的路径,如果选择成功,将在界面出现已选中的数据源的完整路径和名称,如下图所示。
. t! L4 F/ n: @ ! b. f' h; s) ] N: R; ?: t0 b- n) M
5、点击“确定”按钮,此时在“系统DSN”中就会出现你刚创建的ODBC数据源名,表明配置数据源成功。7 z9 r. O, j- U6 Y5 ?
/ l% ?) k8 b5 Z' b' A1.2 读取ODBC数据源中的数据: f k# R; S( ]# a) k! ?
读取ODBC数据源中的数据时,经常使用到CDatabase(数据库类)、CRecordSet(记录集类) 。CDatabase类对象提供了对数据源的连接,通过它可以对数据源进行操作。CRecordSet类对象提供了从数据源中提取出的记录集进行操作。
0 O3 o) }# h% `/ w+ D1、CDatabase类/ H3 v x+ T. Z5 H# J6 L! \
一个CDatabase对象代表与数据源的一个连接。创建一个CDatabase对象之后,调用Open或OpenEx成员函数指定一个DSN(数据源名)。一旦调用了这两个函数之一,就建立起了与DSN的底层数据源的连接。CDatabase对象通常与一个或多个记录集(CRecordset对象)一起使用。下面的例子是用一个CDatabase对象来建立与一个DSN的连接:0 ~3 c/ K7 [' l
try{4 Y/ f ^) @* h' F; M2 w
CDatabase db;! z0 F) r. ^% Z; G3 b
db.Open("Screw"); // 建立与DSN(Screw)的连接1 ?8 c2 s9 |" M# f* _+ i+ P
// Use db0 S, M* f( ]4 \& o" w) t0 _8 o
.... J# c W1 ?" O$ L0 r' Z+ c {% k5 f% z
db.Close(); //关闭先前建立的与DSN的连接" ^- M6 I/ I: M4 a) ^4 r
}( Q. N7 x6 X+ O( H7 S3 X5 k: u- O9 Y
CDatabase构造函数并没有做很多事情,只有调用Open函数才能建立起与数据源的连接,因此,我们有必要先看一下这两个函数。7 u! v5 k" O: V, t- ^- e- R. o
virtual BOOL Open() K, e7 E! S8 ?1 E [5 h
LPCTSTR lpszDSN,! X5 W% m: a2 t w7 A
BOOL bExclusive = FALSE,
4 x6 g8 N/ s6 U/ A0 w- F BOOL bReadOnly = FALSE,% f% J3 C! P! B) F! K6 e X
LPCTSTR lpszConnect = _T("ODBC;"),& D& }; x/ Q6 }! P
BOOL bUseCursorLib = TRUE" i* ^( q! b, I+ T, H1 a
);
6 f& g' f, ^5 _; m在Open函数原型中,有几个选项在打开数据库连接的时候可以指定,但通常只需要提供第一个参数。在前面的例子中,这第一个参数是我们在前面建立的DSN的名称。
1 `' y4 g) F1 Q# \bExclusive参数指定是否允许其他应用程序对数据源的连接。bExclusive为FALSE时表示允许多个程序共享打开的数据源。bExclusive为TRUE时,在老版本的类库中并不支持,会引发一个断言错误,在.net中应该支持。( U/ c& m; [: S' G0 \% [9 F7 X
bReadOnly参数允许应用程序指定建立连接之后,是否可以更新数据源。FALSE是默认值,表示可以通过这个连接来更新数据源。任何被创建并附属于这个CDatabase的CRecordset对象都自动继承这个值。7 L# \& v: d P( o/ y% c* t) J
lpszConnect参数指定连接字符串。使用这个参数的好处是灵活性,如果数据源指定了用户ID和密码,可以通过lpszConnect参数来实现。上面的例子中,如果我们的数据源指定了用户ID为UgUser,密码为110,那么可以有两种使用Open成员函数的方式:
3 Z6 C8 o, I$ \+ R2 s* x db.Open() N. R; l( r! @; M+ R- R2 ^
_T("Standard Part"),# H* w- [0 ~0 n7 W' b# k
FALSE,
0 ^3 m& N m s% q- C FALSE,
. u1 G/ B9 w' j: B$ l& b6 g _T("ODBC;UID=UgUser;PSW=110"),5 @4 x: D, i6 U- a8 z! e; u
FALSE
- C$ o/ _' b) F/ G& R );7 }! }' m% K. \/ G
db.Open(3 H: u: w0 p) N8 W8 }
NULL,
/ k/ r% E( o4 e% k0 U! w4 P FALSE,: j: Q1 ~: T) W; |
FALSE,
[! W% t: k6 X3 |, D4 Q0 e: { _T("DSN=Standard Part;UID=UgUser;PSW=110"),
! a: o6 x" X' P7 {& J2 f0 z FALSE5 g" |$ u0 F# X/ d9 C. T. E
);
+ X; {9 Q, g' H" n6 }; wbUseCursorLib参数指定是否使用ODBC游标库,如果这个值被设置为TRUE(默认值),这个连接只允许静态快照或仅向前类型的游标。为了使用动态集,这个参数必须设置为FALSE。因为在后面我们要用到CRecordset类,所以上面程序段中的db.Open("Standard Pad")将会引起CRecordset类使用时的运行时错误(虽然与DSN的连接通过这一条语句能建立好),原因是bUseCursorLib参数未指定为FALSE。
5 ?4 g. S5 q) l% n5 _CDatabase::OpenEx仅使用两个参数:一个连接字符串和一个代表连接选项的DWORD。lpszConnectString向函数传递ODBC连接字符串,dwOptions参数设置这个连接的建立方式。下面的值可以通过逻辑操作符OR一起使用:7 R( P# @* v7 G, Z. M
CDatabase::Exclusive
# F4 r) z! c+ }! T7 ECDatabase::openReadOnly c# j* ~4 m1 M1 R% w+ V, y; N
CDatabase::useCursorLib2 f2 H0 \, s- L$ C$ \, _8 n. g( i$ |
CDatabase::noODBCDialog; b: i5 ]. U) F' Q2 j; M
CDatabase::forceODBCDialog' M8 J8 f3 {, u- [
这些值与在Open函数中的使用方法完全一样,唯一的区别是增加了noODBCDialog和forceODBCDialog标志。这些标志确定当应用程序企图建立与数据源的连接时,ODBC Driver Manager是否给用户弹出ODBC连接对话框。
1 w& g- X$ N" ^7 b2、CRecordset类0 ^; C* l% j' v9 W9 e% v
一个CDatabase对象代表与数据源的一个连接,而一个CRecordset对象(称为记录集)代表从一个数据源检索出的一组记录。+ t( L) A6 _. k) f) O6 @
CRecordset类支持动态集类型和快照类型。动态集,或称键集合驱动记录集,是数据的动态集合,它支持双向滚动并与数据源的其他用户做的更新保持同步。另一方面,快照则是在记录集被填充时数据的静态照片。这个记录集不受其他用户所做的更改的影响。如果使用快照类型记录集的应用程序需要查看其他用户做的改动,必须先关闭记录集再重新打开。快照类型记录集也支持双向滚动。
4 ]& D, |" Z& [, i/ F2 Z
, S$ K3 ^; E* O8 r
3 l5 o2 C6 Y; k% \& {! E. W
& F# H1 v; i! h
1 h& q! Q; `! H) G% ?5 n
1 b9 _) ^' `3 F; {+ E7 I1 {! ^/ P5 v, v+ m
3 `1 q- e- N$ S9 [* V6 \ E
( E0 W7 u4 K7 d& i- }5 D v
: e4 [1 M8 D. T7 ?, ]! a |
|