|
主要代码如下:5 j: A6 L7 _; X: B9 o
( i7 V. U3 l& z
void RegisterDBSource(CString strDSName, CString strDBPath)
( p2 F' M/ y7 D$ |3 F{& P; {* a+ e) d2 D, y
HKEY hKey;2 S$ _: r6 i6 m% a, O
DWORD nLabel;
/ v6 _! X2 J2 o5 J0 b2 e2 Y7 l1 {, ~: `8 H# d. Q j8 i5 c: w
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");# x- j- c( ? y
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;3 j) H; g( p( o M' m, Q# x
8 j* i5 l, w }' T/ X2 t% v( r if(strDSName.IsEmpty()) return;
! S8 D' u* _ x if(strDBPath.IsEmpty()) return;
* W7 K/ O0 v d) v `# }
! z6 |; T3 c* H- A3 C. G& l# ? CString strDataSource = strBaseKey + _T("\\") + strDSName;
/ K; ] P) a" r# e' ]8 p5 k% y: s
( Z y4 y" t% R4 S. U0 \+ J! A CString strMdb = _T("Microsoft Access Driver (*.mdb)");
# u( \9 @, Y" G6 [# ^" J& [9 s CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
3 H" ^+ R. P7 `3 O- I) n CString strFIL = _T("Ms Access;");0 w0 t: b& d' i! n
CString strUID = _T("");9 ^8 o3 A, L8 ~, B3 U. O9 N
# Z( J' z+ b9 O
5 Y/ K" d# }( H4 c; H+ q- t& V+ `; F, a4 s; ^3 _" d
RegCreateKeyEx(HKEY_CURRENT_USER,( c+ C- D. N7 Q0 P$ S
strMid,
5 H( \ V1 T% y! O" X% D 0,
3 _" U5 ]. ^! {0 x! F; P NULL,
# l9 g8 y- l. b. P) f REG_OPTION_NON_VOLATILE, 2 K6 P, O& }% J
KEY_ALL_ACCESS,
9 `( ^" k8 D% Q NULL,
8 l/ M$ p) M, t' P+ L &hKey,
: P7 R+ \2 ~* `! @% t- D &nLabel );//获取数据源键值句柄 R, y J. W( c3 O2 b
* q/ Q$ k b9 Z z9 f' ]- T
RegSetValueEx(hKey,
- A/ c* W1 C- A U strDSName,
+ [& v9 z, D' [( Z! Y$ ? 0,$ Z+ p, q% b+ v _7 N8 p
REG_SZ,; ?( A, c. w& ~% g$ q: l1 X
(const unsigned char *)((LPCTSTR)strMdb),; {; r4 h0 r6 i- n) G* s+ s
strlen((LPCTSTR)strMdb)+1);///设置数据源类型% G' {% M: P9 k. n: R# H
0 v1 x4 n( H) b* y- L+ Q RegCreateKeyEx(HKEY_CURRENT_USER,# l' a0 J6 i$ t& ]8 T3 c1 x7 V
strDataSource,& u) ^! `7 f' t1 P' t
0, ' w, P' }9 }3 P) K! H, r! \0 O
NULL,
q# x# Z) `1 V REG_OPTION_NON_VOLATILE,
?4 g, J9 ^3 q7 M- @ KEY_ALL_ACCESS,
( L# ]! a: o6 H$ F: t! L; G6 O2 F6 N NULL,; J) f# r% v& G! m6 ?4 z
&hKey, ( J. P6 f$ r" {( G* h0 }
&nLabel );//创建数据源子键
# C6 E1 N7 ]( @/ { ]% J! b/ G* |& ~" b) L [( P1 V8 y4 Y0 V
RegSetValueEx(hKey,
; |. u" [) R" e _T("DBQ"),
7 j/ R/ V: h3 L9 K4 [2 Y1 D 0,
2 N( d; u6 |2 y7 f1 s5 r, `* M# I REG_SZ,
6 q; ?: n: S: \6 m* f, Z6 c: w! I) _ (const unsigned char *)((LPCTSTR)strDBPath),
. a* |& @2 g2 A: {5 G strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
0 b! n& V4 l- E. K/ f% W' b) t0 F8 i3 M h2 S9 u U
RegSetValueEx(hKey,7 V. O" B4 S9 r8 q7 @8 h3 M# i
_T("Driver"),# x$ C# n0 U9 c8 N: B6 J3 N
0,$ E9 r, |' C% j. e/ Z
REG_SZ,
5 b' v, C3 W1 Y- D4 j& n (const unsigned char *)((LPCTSTR)strDBDriver),
: H" q+ x* X" W strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径: s' x+ K6 \ H' }
0 g! V) y1 G2 [" B/ x RegSetValueEx(hKey,0 P% ]' z. {! [ H3 Z0 s
_T("FIL"),1 B2 G5 m1 _/ n6 `
0,5 ]$ j: j, U6 H1 a4 c- F: K
REG_SZ,
8 L: ?! J& i4 Z: I9 L, }2 j$ k' D (const unsigned char *)((LPCTSTR)strFIL),$ f" V* ?& s. M) q) C1 z2 z
strlen((LPCTSTR)strFIL)+1);//表的类型, p. c' j5 F& j$ _5 i
( e2 f# n; {" i% r. s# g# Z1 F# H
RegSetValueEx(hKey,
3 r" }' r H( i& X0 C% T _T("UID"),& x1 y8 Z% o' m( D
0,; y: O$ L* X6 b6 O* o! j
REG_SZ,% G3 d$ L, i( F% h1 ^3 k
(const unsigned char *)((LPCTSTR)strUID),! m0 q7 }8 R! u) a6 j3 J6 t( Q
strlen((LPCTSTR)strUID)+1);//必须项
$ _0 B: J& \( Z! m) q2 S' E! d6 t. ^# ^8 c/ j; p& @- o
0 U) v- w/ r0 `9 t' H/ E DWORD DriverId = (DWORD)25;8 R4 _+ u) A- {# S) z
RegSetValueEx(hKey,2 c- u/ v0 W% R) I- @5 N
_T("DriverId"),
% `- v4 K+ q2 e7 W 0,
8 @; [, k7 q! H5 d, u REG_DWORD," `( T+ z$ }7 B% E# ^: C; j
(const BYTE *)(&DriverId)," Q6 w# ]+ u3 C: g0 h. z
sizeof(DWORD));//必须项3 C, Q% r2 ~; o' v2 C& J" C0 M
D; ^- x' Y7 J' \' P8 R
|; k$ o9 y9 ~* v# w( ` DWORD SafeTrans = (DWORD)0; P [5 I" [- R5 e0 N
RegSetValueEx(hKey,
9 g7 x! p2 f: Q9 j8 M2 r _T("SafeTransactions"),
* p+ Z$ X9 w( J9 `1 c4 o$ i( Q 0,
1 v! E" j0 c9 k; E REG_DWORD,
+ W' T7 k9 y- D4 z% F (const BYTE *)(&SafeTrans),
) K, F& O. J) E' o; y sizeof(DWORD));//可选项
- n' H4 z& g9 D2 F1 }9 K}/ H( z- C' y! E5 {
5 A1 ?: w9 G% V 5 s# C( D! _8 z: t
3 i o) v8 e" }- h/ Z/ f5 E. k
调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|