|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
UG NX二次开发访问数据库方式--ODBC访问图文教程
8 w$ x6 {5 e% \4 b# r: O7 P, K+ h; g- P% E5 f b
+ {# Y/ u! e# C/ Z0 o( }2 c% |
1.1 配置ODBC数据源
) S! e. ~2 o9 K2 H9 s g1、选择"控制面板"中的"管理工具"下面的"数据源 (ODBC)",如下图所示。
( L# y; K1 J+ O' e E. ?
) K% w" z0 C$ T) D' n2、在弹出的ODBC数据源管理器对话框中,选择系统“DSN”,并单击"添加…"按钮,将出现创建新数据源对话框,如下图所示。
6 T9 t5 O5 _. P
% _& t. k2 G% E O S3、在创建新数据源对话框中,选择你将访问数据源相应的驱动程序,比如,我们将访问Access数据库中的数据,此时可选择“Microsoft Access Driver(*.mdb)”,选择后,单击“完成”按钮,此时,出现数据源相应驱动程序的选择界面,如下图所示。) p( `. r8 U! [: t# V3 K# s
% G; y6 u3 n6 Z u
4、在驱动程序选择界面中,数据源名框中输入DSN的名称,比如,Screw。DSN的名称非常重要,它是后期访问数据源的唯一标识。输入DSN的名称后,可通过“选择(S) …”按钮选择相应数据源所在的路径,如果选择成功,将在界面出现已选中的数据源的完整路径和名称,如下图所示。
* E& m9 X3 i' j9 v, J. D. E. v0 q , @" u) N7 ~. \# q9 m
5、点击“确定”按钮,此时在“系统DSN”中就会出现你刚创建的ODBC数据源名,表明配置数据源成功。
4 G1 c! n6 `$ i8 ]/ W) D& O8 u; b; J: b# [9 o- u/ Q1 Y
1.2 读取ODBC数据源中的数据
4 V( H5 [. r0 v4 h0 U读取ODBC数据源中的数据时,经常使用到CDatabase(数据库类)、CRecordSet(记录集类) 。CDatabase类对象提供了对数据源的连接,通过它可以对数据源进行操作。CRecordSet类对象提供了从数据源中提取出的记录集进行操作。
6 \3 Y" {/ m! o' q1、CDatabase类/ D4 R9 |, E& f- s2 M* L& b7 ~
一个CDatabase对象代表与数据源的一个连接。创建一个CDatabase对象之后,调用Open或OpenEx成员函数指定一个DSN(数据源名)。一旦调用了这两个函数之一,就建立起了与DSN的底层数据源的连接。CDatabase对象通常与一个或多个记录集(CRecordset对象)一起使用。下面的例子是用一个CDatabase对象来建立与一个DSN的连接:
: W- s' M. f, R try{
/ e8 ?9 g8 M. F3 L CDatabase db;
F- p( ]# f/ v6 O9 k% T db.Open("Screw"); // 建立与DSN(Screw)的连接
* V5 b- r. c8 P: z // Use db3 B% H: l: L5 O2 H/ ?" c
...* _ E B9 [0 ^1 A+ R
db.Close(); //关闭先前建立的与DSN的连接
5 Y9 i! [) s/ g3 H }1 }4 `0 p7 p! y
CDatabase构造函数并没有做很多事情,只有调用Open函数才能建立起与数据源的连接,因此,我们有必要先看一下这两个函数。
, I U/ F w$ @. q3 W' H. ^5 F4 O virtual BOOL Open(
8 F' _* c: { _' r. p$ A, T LPCTSTR lpszDSN,* r8 O* x0 X. v3 f a5 B) O, U
BOOL bExclusive = FALSE,9 N1 ]6 Y- m: h
BOOL bReadOnly = FALSE,
4 V; U$ m: B! B0 p LPCTSTR lpszConnect = _T("ODBC;"),
z( B. V c% p5 _% M BOOL bUseCursorLib = TRUE5 a" i3 J, Z4 k; N1 i4 h5 w- Z
);
: @$ j3 ?1 l& T2 ^, ?8 J3 d7 Z在Open函数原型中,有几个选项在打开数据库连接的时候可以指定,但通常只需要提供第一个参数。在前面的例子中,这第一个参数是我们在前面建立的DSN的名称。3 O( F6 D2 d, {9 Z' Y6 Y* c
bExclusive参数指定是否允许其他应用程序对数据源的连接。bExclusive为FALSE时表示允许多个程序共享打开的数据源。bExclusive为TRUE时,在老版本的类库中并不支持,会引发一个断言错误,在.net中应该支持。5 Q, x# H/ n% e) c
bReadOnly参数允许应用程序指定建立连接之后,是否可以更新数据源。FALSE是默认值,表示可以通过这个连接来更新数据源。任何被创建并附属于这个CDatabase的CRecordset对象都自动继承这个值。
" w1 o% ?3 F5 ?' ?% D1 ^lpszConnect参数指定连接字符串。使用这个参数的好处是灵活性,如果数据源指定了用户ID和密码,可以通过lpszConnect参数来实现。上面的例子中,如果我们的数据源指定了用户ID为UgUser,密码为110,那么可以有两种使用Open成员函数的方式:/ Q [8 _$ h( `* t7 P1 {" w
db.Open( U- n, H4 x- h, Y$ j5 l$ p+ @; O
_T("Standard Part"),( j* r% P& K; _5 p' E" K- S
FALSE,6 L/ E4 R. N. o, k, Y4 q4 \) T
FALSE,
: r' l6 R8 {! Q _T("ODBC;UID=UgUser;PSW=110"),
) Y1 o0 d! {0 ` U! x FALSE6 E- D1 J& n; @4 x
);2 I' `# V0 q* [: {
db.Open(
; b& C. V. `2 U NULL,
" G( \) L1 V/ M FALSE,( E; e7 Z- i" B! E% y3 N
FALSE,+ s0 H4 ~' h: @. d
_T("DSN=Standard Part;UID=UgUser;PSW=110"),
& x: q& z' a. ?1 [ FALSE
4 |0 C+ v* r7 g4 Q" I );
6 ~: D- n- r5 vbUseCursorLib参数指定是否使用ODBC游标库,如果这个值被设置为TRUE(默认值),这个连接只允许静态快照或仅向前类型的游标。为了使用动态集,这个参数必须设置为FALSE。因为在后面我们要用到CRecordset类,所以上面程序段中的db.Open("Standard Pad")将会引起CRecordset类使用时的运行时错误(虽然与DSN的连接通过这一条语句能建立好),原因是bUseCursorLib参数未指定为FALSE。
, s3 k3 X$ k) O2 hCDatabase::OpenEx仅使用两个参数:一个连接字符串和一个代表连接选项的DWORD。lpszConnectString向函数传递ODBC连接字符串,dwOptions参数设置这个连接的建立方式。下面的值可以通过逻辑操作符OR一起使用:9 O2 y T$ ^- \+ k. u+ x9 R D2 y
CDatabase::Exclusive0 m, u9 F1 v. D" D
CDatabase::openReadOnly
0 I/ e% X o: |2 M# K, FCDatabase::useCursorLib- {. O# B1 Z: s8 }8 x& ?
CDatabase::noODBCDialog2 v! V, T/ F( U$ c5 m/ ]! C
CDatabase::forceODBCDialog
8 A; j& q8 ~( u/ M/ M这些值与在Open函数中的使用方法完全一样,唯一的区别是增加了noODBCDialog和forceODBCDialog标志。这些标志确定当应用程序企图建立与数据源的连接时,ODBC Driver Manager是否给用户弹出ODBC连接对话框。/ N6 N+ g* ^( A! W( E
2、CRecordset类
g; Y( ]6 w }1 h9 N H" c: ?一个CDatabase对象代表与数据源的一个连接,而一个CRecordset对象(称为记录集)代表从一个数据源检索出的一组记录。
- q/ Q7 j' m! {/ R2 t8 `* W; j- ZCRecordset类支持动态集类型和快照类型。动态集,或称键集合驱动记录集,是数据的动态集合,它支持双向滚动并与数据源的其他用户做的更新保持同步。另一方面,快照则是在记录集被填充时数据的静态照片。这个记录集不受其他用户所做的更改的影响。如果使用快照类型记录集的应用程序需要查看其他用户做的改动,必须先关闭记录集再重新打开。快照类型记录集也支持双向滚动。$ ^. _" M1 S* y
* ]' F' B% I _# k# ?$ J ^& u, N
" Z: o0 i7 x% P' k; n4 P* R
! C9 j& m$ u) W i! V
/ J4 m# c9 j$ p! v ^% |6 p0 ?: h4 T
2 ~ ?! E8 _* D, Y- `' E. u6 b! O" q' ]( v
0 g- X; P7 C; a6 ^; y" _( Z' ]- {8 n0 a3 q+ S) Z& t% c4 Z9 N
) f/ u3 a. L$ [ `0 j% g; X |
|