|
|
主要代码如下:
3 v% l$ w% N- _3 C' @9 U
* ~# O; m' Y+ j4 D( E) q, avoid RegisterDBSource(CString strDSName, CString strDBPath)
- B7 u) A4 F% {9 u9 C6 f$ l- i{+ }) |# b+ z: d- }0 Y
HKEY hKey;6 t+ j }1 ^0 s! [
DWORD nLabel; , s, M/ l" @" u# x- K I& ?" E9 h& w
7 a* Y0 ]0 `8 n D2 m& P, A
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
+ t4 J% A( K5 c/ {3 v, [% q CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;1 ~/ s: D7 e" y% [ {& O# T
- Q0 u3 ]3 Q, Y' \) u. { if(strDSName.IsEmpty()) return;* u2 Q7 b O0 C# P& M# x3 ~9 U8 Z
if(strDBPath.IsEmpty()) return;
) i. V" S. |9 t: z
8 A. n$ I1 Q0 g, |3 A CString strDataSource = strBaseKey + _T("\\") + strDSName;
8 `9 G' ^' p+ Y# Z, f9 |& k4 v, k
% e; w4 h; Y! [ CString strMdb = _T("Microsoft Access Driver (*.mdb)");( y9 }8 {- j' f9 R7 F* r4 ~* l; q! n
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");& l \7 }$ a$ L# L! i W4 S) `
CString strFIL = _T("Ms Access;");
3 E6 d6 b$ m% \" x2 k, f, c% x; {9 _ CString strUID = _T("");
) B8 y0 p; Q- _8 ^' I5 W; B* z
0 \6 `4 ?8 R# R$ z5 y5 L
7 Q- @5 j, k+ [! o
) v, B6 {' c' U- [) [ RegCreateKeyEx(HKEY_CURRENT_USER,
4 D9 d1 a6 T' s7 o' e- {1 h strMid,) H; ]( S8 Y! H+ L" X8 G9 z* O
0,
6 f' _2 O$ E+ A$ `+ k3 e; V& m NULL,
% Y( _- G/ {. m4 N6 F) Z REG_OPTION_NON_VOLATILE,
* \- o7 ?) q) M8 v3 t, Z KEY_ALL_ACCESS,) @) h: M" ^* p4 `, m5 m1 Y6 P
NULL,
( T; i |6 h. }& T; P% d+ X$ | &hKey,
3 R* t' h2 j+ s* N( O" [/ | &nLabel );//获取数据源键值句柄
( M% E x& u' z5 u6 D
8 T* T+ ] C) M/ I) x1 b RegSetValueEx(hKey,
" E) a6 B3 |7 q strDSName,
1 d5 W. r. W, [( W: } 0,
. x9 {/ V' ]" V' _0 d* l REG_SZ,/ ~* e9 P2 j, D! C
(const unsigned char *)((LPCTSTR)strMdb),2 T2 A( Z; ^& H5 n
strlen((LPCTSTR)strMdb)+1);///设置数据源类型
# Y- i# W* v: N8 j g8 J! p
" ?( `; w& i$ R; F: V2 t RegCreateKeyEx(HKEY_CURRENT_USER,$ x3 z1 ~' I) J' `' C
strDataSource,
9 t% k5 f$ E4 i* q, m: z 0,
( [! k$ c0 X% W NULL,
5 l: L' R- d& ^4 W/ L7 H0 u; I1 J REG_OPTION_NON_VOLATILE,
9 t+ l; x/ v5 _' n KEY_ALL_ACCESS,- J) N# ~( n* E4 _9 Q7 \! ?/ o
NULL,
- E( Q3 Z7 |' B! v6 L- w' z &hKey,
/ g* `- u8 z- [9 k. l! R& l &nLabel );//创建数据源子键! G* E/ f8 V1 h& e/ n! P6 k
1 b8 |2 |1 x/ a& b8 u
RegSetValueEx(hKey,
$ n0 w5 ~* J4 X6 D4 U `6 R' L) ` _T("DBQ"),; e- w; |% f! F$ t- W
0,
% d4 Y: U/ z+ a; S7 }/ [/ D/ @# G m REG_SZ,
4 q+ O/ o3 L3 l- y8 r! a (const unsigned char *)((LPCTSTR)strDBPath),
, E* C5 E0 C$ C9 q2 M6 Y strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径1 M7 ~) K1 X* C: T# a$ Q6 n
3 b$ b: O, j" z( X1 ^ RegSetValueEx(hKey,
) {0 K6 E" Q4 j& K _T("Driver"),
; V$ b$ X. M0 _* c( @( F 0,
9 B: J& W( q6 l7 N4 x4 W' U( K REG_SZ,
- G% |& S0 f3 R5 L( F+ ^, \ (const unsigned char *)((LPCTSTR)strDBDriver),
, ^3 y3 g q2 k6 i9 A* y strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
) B( [* Z3 e, q+ ^! b
" H5 Y# w! K- n) A+ V4 f M% l RegSetValueEx(hKey,6 k( ], M/ |1 U3 U
_T("FIL"),
% v- a% v: X$ @0 ~+ n4 ~: f: j' A 0,) l# Y: X/ i e t
REG_SZ,
# f$ F5 n+ y* e6 ] (const unsigned char *)((LPCTSTR)strFIL),
\( e9 n5 Y& g$ x. B% Y strlen((LPCTSTR)strFIL)+1);//表的类型+ O" b. v0 i( Z" o
" Z4 Q5 H; M* k( J' k+ r' a# t
RegSetValueEx(hKey,* {( G/ C* v. F y" y
_T("UID"),1 ]2 E6 Y- E: Y: n! Q5 F
0, @& G# z3 A: }) G6 k
REG_SZ,3 }& B! c" k9 ]# {5 D2 O
(const unsigned char *)((LPCTSTR)strUID),/ @& i+ B, j) b
strlen((LPCTSTR)strUID)+1);//必须项2 W6 }3 p- Z+ j% t& F
) z( s/ ~; N/ x
' s+ l Y) g5 h0 b$ n DWORD DriverId = (DWORD)25;/ t. _2 z7 p# g7 K7 ?( O; K1 s
RegSetValueEx(hKey,
+ i: E) G% k$ Q" b$ b _T("DriverId"),
9 f8 |+ ]+ t6 W7 }. g4 w V 0,' A# n/ C! X* O! R
REG_DWORD," s! b$ p0 t4 Y- j5 G1 s
(const BYTE *)(&DriverId),
( l# a7 b T% O4 o5 q: U* K. X sizeof(DWORD));//必须项
# r S! f! N% @' H7 f
/ S- [% s) ~6 D! d
4 B: T+ i+ Y6 I z( m5 b K6 F DWORD SafeTrans = (DWORD)0;( W( R% g' l- P( |& r. c
RegSetValueEx(hKey,
% D; j# C+ c8 b: Y _T("SafeTransactions"),7 W* z* U7 z) h0 D
0,
1 u" h7 F! O# ]/ N$ I REG_DWORD,+ o3 h# p7 V/ ^8 U8 d$ U& `
(const BYTE *)(&SafeTrans),1 p. Q( K* H) I$ B; s2 F
sizeof(DWORD));//可选项. a3 c4 t, v0 u$ u; d6 l; |
}5 a7 \7 ^" ~0 a+ N) V$ H' \) N
2 N- c( V _5 d5 Y3 t0 g3 }/ x' j
& Y: t, i. Z6 U0 u) c
: ~) @! T' z7 ^3 c# r6 e调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|