|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
UG NX二次开发访问数据库方式--ODBC访问图文教程
9 \& P- C- V" j( }8 Z, V/ q: Y: l: [
' F, u7 Z6 T$ O! a, F: g+ d
1.1 配置ODBC数据源
p4 ~/ W, M: d, t; O) ^; t$ y% b. E1、选择"控制面板"中的"管理工具"下面的"数据源 (ODBC)",如下图所示。/ A2 _/ U/ t. L! Z4 G- _
! T* S9 d( X4 C; m2、在弹出的ODBC数据源管理器对话框中,选择系统“DSN”,并单击"添加…"按钮,将出现创建新数据源对话框,如下图所示。
1 h6 V; Y$ ?* S9 t/ @. K, S
, m. k& R+ l8 E4 F- f) ]3、在创建新数据源对话框中,选择你将访问数据源相应的驱动程序,比如,我们将访问Access数据库中的数据,此时可选择“Microsoft Access Driver(*.mdb)”,选择后,单击“完成”按钮,此时,出现数据源相应驱动程序的选择界面,如下图所示。
5 B5 P ]6 R5 j- R
x# [: H" [7 Z7 j' s! ]4、在驱动程序选择界面中,数据源名框中输入DSN的名称,比如,Screw。DSN的名称非常重要,它是后期访问数据源的唯一标识。输入DSN的名称后,可通过“选择(S) …”按钮选择相应数据源所在的路径,如果选择成功,将在界面出现已选中的数据源的完整路径和名称,如下图所示。: H1 c+ T: C9 N3 I6 M* ^
# n/ H! o5 P, y& T* P! p! |
5、点击“确定”按钮,此时在“系统DSN”中就会出现你刚创建的ODBC数据源名,表明配置数据源成功。
5 p+ ^2 Z; a; ^" K9 G5 a4 ^* q" r* |: Q
1.2 读取ODBC数据源中的数据
8 q' k2 M( V7 J: K0 {# i. @3 o) t9 w. O读取ODBC数据源中的数据时,经常使用到CDatabase(数据库类)、CRecordSet(记录集类) 。CDatabase类对象提供了对数据源的连接,通过它可以对数据源进行操作。CRecordSet类对象提供了从数据源中提取出的记录集进行操作。1 q5 c T3 `' K% _3 M% z8 E
1、CDatabase类
1 T6 o' P- a) V一个CDatabase对象代表与数据源的一个连接。创建一个CDatabase对象之后,调用Open或OpenEx成员函数指定一个DSN(数据源名)。一旦调用了这两个函数之一,就建立起了与DSN的底层数据源的连接。CDatabase对象通常与一个或多个记录集(CRecordset对象)一起使用。下面的例子是用一个CDatabase对象来建立与一个DSN的连接:. U- @. x1 y5 G1 {8 A
try{
: N9 W. ~ M( o3 ]+ k/ H CDatabase db;
s4 T2 W" e3 E( T2 S7 A db.Open("Screw"); // 建立与DSN(Screw)的连接
$ Q( U/ A0 Z9 D6 N3 @ // Use db) B7 R$ X6 ^ m* w- Z
...
, M. Q5 d; c; h db.Close(); //关闭先前建立的与DSN的连接
% J8 S- u" C; ~/ k q' e }: x1 `- P9 R2 s0 q) `& @) h
CDatabase构造函数并没有做很多事情,只有调用Open函数才能建立起与数据源的连接,因此,我们有必要先看一下这两个函数。
# Y$ p N. J+ R+ b0 x# m6 A virtual BOOL Open(" G, ?/ C& o, K' ^# O, q
LPCTSTR lpszDSN,/ u2 n6 W" o$ c# K. M0 }
BOOL bExclusive = FALSE,
s# U# _( k$ |9 B z3 Q6 i* R BOOL bReadOnly = FALSE,) \/ T% b- [ N; w. @- m
LPCTSTR lpszConnect = _T("ODBC;"),
& e O, ~( x) p) ?5 L BOOL bUseCursorLib = TRUE
% n; j" V1 u3 F. @' Q);
3 u1 r8 o9 b' w `: e6 z2 ~; E在Open函数原型中,有几个选项在打开数据库连接的时候可以指定,但通常只需要提供第一个参数。在前面的例子中,这第一个参数是我们在前面建立的DSN的名称。
' G, }8 l2 G2 a" \bExclusive参数指定是否允许其他应用程序对数据源的连接。bExclusive为FALSE时表示允许多个程序共享打开的数据源。bExclusive为TRUE时,在老版本的类库中并不支持,会引发一个断言错误,在.net中应该支持。/ \# ~6 b9 W& h8 ]2 J, d8 h
bReadOnly参数允许应用程序指定建立连接之后,是否可以更新数据源。FALSE是默认值,表示可以通过这个连接来更新数据源。任何被创建并附属于这个CDatabase的CRecordset对象都自动继承这个值。* g+ w8 M4 J. E& Q5 E% ] v6 h
lpszConnect参数指定连接字符串。使用这个参数的好处是灵活性,如果数据源指定了用户ID和密码,可以通过lpszConnect参数来实现。上面的例子中,如果我们的数据源指定了用户ID为UgUser,密码为110,那么可以有两种使用Open成员函数的方式:
) l/ D# r) H: u9 f db.Open(( W# n5 J; N. ^8 Y
_T("Standard Part"),. ]) N. U: R! s5 n
FALSE,3 Q" ], ]0 B& P2 Z; F, ~
FALSE,3 X6 a5 p u2 a
_T("ODBC;UID=UgUser;PSW=110"),
; I& a6 M# G& \4 } FALSE6 h( }" G+ |8 v" c/ ]6 b# p
);
" b' z" X* e/ v- u1 F" x db.Open(
C8 y2 r5 T9 f8 {/ Y0 f8 C NULL,6 e5 X; i. l" |" f2 V
FALSE,
; r0 ^# a0 V& @" x FALSE,( c* t) P4 ]) C$ H% g$ t
_T("DSN=Standard Part;UID=UgUser;PSW=110"),
+ S1 V |8 z+ l4 X) d7 E FALSE9 O" F) ]( G. L! Q& q- E0 g" Q
);. C# y* b2 C% U1 y
bUseCursorLib参数指定是否使用ODBC游标库,如果这个值被设置为TRUE(默认值),这个连接只允许静态快照或仅向前类型的游标。为了使用动态集,这个参数必须设置为FALSE。因为在后面我们要用到CRecordset类,所以上面程序段中的db.Open("Standard Pad")将会引起CRecordset类使用时的运行时错误(虽然与DSN的连接通过这一条语句能建立好),原因是bUseCursorLib参数未指定为FALSE。8 U# w0 c5 J8 K) x
CDatabase::OpenEx仅使用两个参数:一个连接字符串和一个代表连接选项的DWORD。lpszConnectString向函数传递ODBC连接字符串,dwOptions参数设置这个连接的建立方式。下面的值可以通过逻辑操作符OR一起使用:
( B& t# y# O( NCDatabase::Exclusive/ r' L9 c5 q! h
CDatabase::openReadOnly' x4 c+ Y0 T( `" w
CDatabase::useCursorLib
& |# F# N: c: S; F6 z! P8 y$ F: k3 [CDatabase::noODBCDialog% J; X$ w5 m% A6 Y5 t/ w# K) m
CDatabase::forceODBCDialog
( e; s+ T0 g* b* X, n这些值与在Open函数中的使用方法完全一样,唯一的区别是增加了noODBCDialog和forceODBCDialog标志。这些标志确定当应用程序企图建立与数据源的连接时,ODBC Driver Manager是否给用户弹出ODBC连接对话框。
8 u* x. w; z) y4 |; A* v& ^# f2、CRecordset类
; G) E: t8 X: g. z1 _! Y* n一个CDatabase对象代表与数据源的一个连接,而一个CRecordset对象(称为记录集)代表从一个数据源检索出的一组记录。* k4 V! g" [# \9 B0 b [
CRecordset类支持动态集类型和快照类型。动态集,或称键集合驱动记录集,是数据的动态集合,它支持双向滚动并与数据源的其他用户做的更新保持同步。另一方面,快照则是在记录集被填充时数据的静态照片。这个记录集不受其他用户所做的更改的影响。如果使用快照类型记录集的应用程序需要查看其他用户做的改动,必须先关闭记录集再重新打开。快照类型记录集也支持双向滚动。; H( o3 V4 c3 Q ^* @4 |2 S
& t( A: l4 d- e! K* \. F1 I U! a$ {5 d% G& v9 o8 x+ I, \
8 S4 l+ o; S1 x! _ u' r; E. k7 b
* @2 u! F2 x* L. O3 c
+ f1 z/ D& ?5 Z' @" X) f7 z% s- B2 W+ ? ` I# P/ d9 ]( k) c! w
/ U/ E5 T2 Z1 |5 N
! q! u5 R' M! k. t4 d& b
5 a9 k ]- z7 n4 ~ |
|