|
|
主要代码如下:
# J. b( o: F/ p: M n G
8 z7 i! y0 }$ H/ d/ f' x: Pvoid RegisterDBSource(CString strDSName, CString strDBPath)0 T1 l3 o* x' ]2 g. c
{7 _! F$ n; e' a. g3 B/ r" q
HKEY hKey;8 E. |5 L% J5 D# F
DWORD nLabel;
$ J! ^0 C: R( q6 o
& C6 n. Z* i' c; c7 G CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
4 S5 g3 y- o" Q: ^: y& m/ d+ K! I S CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;5 E& o8 Q0 a1 J; q4 `# o( q( V4 l
* ? j- B+ B# ~( i' L if(strDSName.IsEmpty()) return;$ c# m2 q& W6 d5 x+ e9 U
if(strDBPath.IsEmpty()) return;
2 `3 o4 G+ `/ Y9 O5 t( f' R1 X7 X9 ^1 g0 C5 C6 C
CString strDataSource = strBaseKey + _T("\\") + strDSName;
0 n8 V u/ y3 B( [4 b4 D! v
4 h) `. A3 r" O& H# R0 | CString strMdb = _T("Microsoft Access Driver (*.mdb)");1 ]0 c& o Y% }) \/ g' _
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
: Q- J2 ~9 v" P! N; N) h CString strFIL = _T("Ms Access;");/ K0 p/ s& C# h6 m! Q4 t& `
CString strUID = _T("");6 v1 G8 P. N, o* [* i; c3 t+ g
/ @% E! [2 \, K- l
1 B4 M, k( |$ ~, D% Q+ x& [
7 e3 H* X; y! ~( k) ^* U" A( c RegCreateKeyEx(HKEY_CURRENT_USER,
( T( X+ G' O7 O9 g) O4 V3 _0 E strMid,4 [1 P; f- ?6 o( i8 N" Q
0,
# q4 r8 ^0 v& u NULL, 2 o6 L) k3 {; R/ s, k
REG_OPTION_NON_VOLATILE, % z/ d& a" R) M, l& O) d2 o
KEY_ALL_ACCESS,
( F* J. E4 k p% a- l NULL,+ d [' Y( a. {8 \ E0 c2 B6 t* ?
&hKey, 4 r& A5 N: D6 G) n+ _, z7 h
&nLabel );//获取数据源键值句柄9 h6 {. q- C% m' j- d; _
" ~/ ^- |- ]' L% r RegSetValueEx(hKey,$ H) ?5 {( y0 ^2 Q: Q
strDSName,; O2 U" b9 J) v, Z7 a7 m
0,
0 v' u K" L) ^. y) d1 @+ o REG_SZ,
: P/ ?, h7 @$ w) Z (const unsigned char *)((LPCTSTR)strMdb),
4 Z1 l/ n; y4 u strlen((LPCTSTR)strMdb)+1);///设置数据源类型7 i/ A8 V2 J# X+ R% W
+ r- k3 D% a$ f3 l! @" p RegCreateKeyEx(HKEY_CURRENT_USER,. O# M6 C) |; ?& O% P# L
strDataSource,
' x& M7 _3 \% Q& s- n0 \' ] 0,
% M: _# p1 V7 ]1 f3 E8 }" o NULL, ; n' }& S* e N' B( ~
REG_OPTION_NON_VOLATILE,
% g) U5 O$ @- F3 Y KEY_ALL_ACCESS,
- W/ `$ ]2 K7 h NULL,
) {' D' S* M0 U: q8 k8 I &hKey, 1 W3 W0 [" [- V
&nLabel );//创建数据源子键& o. S. I$ d4 H0 I
9 X; c$ P$ r3 G4 ]( O RegSetValueEx(hKey,
) w! v& t. \" F" x' P2 x _T("DBQ"),
3 @0 g( T) Y2 j6 {' v; ?$ n( Y 0,9 ]" q) u6 Y( J: q$ H0 f/ R& I
REG_SZ,: h9 R. {7 I. {' q$ N
(const unsigned char *)((LPCTSTR)strDBPath),, \* s9 v( x9 R/ ~/ M' X) W4 `) w
strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径5 j& v) p, ]- r) v2 v4 n! |" l
' `7 p; _ q {3 { RegSetValueEx(hKey,4 I7 Y8 }% Z3 j& h
_T("Driver"),: A) J6 _0 F6 h* u) H2 H) J4 ?) ?6 n
0,9 U: `5 r; D0 f! C/ U( Y
REG_SZ,
7 H* c- p4 k2 x- h& R' j( a/ m& a (const unsigned char *)((LPCTSTR)strDBDriver),* }" K" `8 b6 E
strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径, Z2 x' n5 `- v( ~$ d( Z
$ x- {5 c- E3 r' K2 r; { V RegSetValueEx(hKey," m' X% P/ I% G0 O
_T("FIL"),
2 H& t, l6 e1 r, f, V& R- N8 ] 0,0 ? J% c* ?8 n8 B
REG_SZ,2 B( Z- l/ C9 `& l& `# ~1 t. @
(const unsigned char *)((LPCTSTR)strFIL),
: r% S. U; _* P5 h$ L1 q# y strlen((LPCTSTR)strFIL)+1);//表的类型- k4 |, @8 C' k: Q3 n: L9 `9 Q
5 ~% i( c" T( R5 y9 n/ @8 D& [ RegSetValueEx(hKey,
" W# Q" n: t6 T. j; C. e+ [8 i _T("UID"),- _* e: n. f$ A/ }" h& n+ E
0,0 T6 o! p. v+ O8 A/ c
REG_SZ,
) s& S8 a- D3 r4 @4 p3 P G. V (const unsigned char *)((LPCTSTR)strUID),- k# Y4 d0 ^* m$ N( g Y
strlen((LPCTSTR)strUID)+1);//必须项6 B, D8 ^. k" P3 Z, `
6 i+ K+ Y2 W. _- K R/ w- ^
! b0 U9 x. u0 ?1 \5 O- C
DWORD DriverId = (DWORD)25;
; ]/ G' Y" s8 L9 D, ?, L RegSetValueEx(hKey,
2 ?3 ~. ^# _6 L' h( m0 I4 P* h _T("DriverId"),
( }/ ^, u: ~) h4 x5 U 0,% W" Q0 \" x; \/ V- `) D1 }
REG_DWORD,( ~9 C+ p4 _( T5 J4 y8 s4 V
(const BYTE *)(&DriverId),
$ Y$ [7 g) w+ c8 A6 S sizeof(DWORD));//必须项$ v8 z3 v) i/ b, {7 N3 U% [5 {
& \6 O/ @% v n: m9 y3 N8 I$ N- m
7 T6 I1 |0 V% w- r6 q, G
DWORD SafeTrans = (DWORD)0;
1 M9 p2 m5 ]% p& y" j RegSetValueEx(hKey,
* \7 i% I% v7 }, ?9 j J" A' E5 n _T("SafeTransactions"),
& N; \: ^+ C5 O, a& c 0,0 ]4 A. E# m* y& f$ |% w
REG_DWORD,4 p L" J+ d' U( w
(const BYTE *)(&SafeTrans),7 E1 X* Z; ^3 I% C& Q* v. E6 B
sizeof(DWORD));//可选项
3 T/ m) j& h" H# e4 x, i% P}0 I* Y8 W: a, l2 b, [
4 A( D4 ~: ^3 r, k/ n
2 ~7 V5 {% v( U/ S6 J: B7 f1 V
3 E8 j+ ]& X3 p P5 S调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|