|
|
主要代码如下:
) a2 h3 x/ {; d) u/ N+ p% b6 B& x, J
( Z6 V( Q4 f& Q- u3 O6 G3 B* f0 Svoid RegisterDBSource(CString strDSName, CString strDBPath)9 W2 V& O9 ?& i" y& M) i! d& }2 c
{' s0 ?0 i4 `4 F" `; t& u
HKEY hKey;
; ~* q5 [! J' |+ T- e DWORD nLabel; : e" C. D# B% v- q2 u2 Q
8 b$ ^* ^9 B; E CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
" f) g3 S% C+ y( a7 A8 }5 v/ E. J: u) Y CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;* t' i. Q: g2 M* t
' w4 k; n7 X5 i. D: x
if(strDSName.IsEmpty()) return;: K% Z7 O3 l+ g! Q% h7 A8 ]' p
if(strDBPath.IsEmpty()) return;3 Y. \9 }; {* s- G6 k
$ k7 z6 ?0 g* N# }$ v8 K% \2 Z
CString strDataSource = strBaseKey + _T("\\") + strDSName;# S7 R7 M+ {! d9 o4 T q/ z
- [8 W0 X3 a, J, k
CString strMdb = _T("Microsoft Access Driver (*.mdb)");
; E$ Z0 _1 V# a, _/ _ CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");2 G% r( C6 c$ U
CString strFIL = _T("Ms Access;");
1 m( @2 ? L5 i4 V# o7 t2 V% l& K CString strUID = _T("");
: d. t# v5 y) v- e/ t9 z: i' K) z- v# h1 e3 E" F3 o' J/ T
+ `. |; w7 \6 d3 a7 m/ P% k6 U1 R
% J5 d. I! n. |$ r6 j+ V7 j RegCreateKeyEx(HKEY_CURRENT_USER,
/ I& l- W3 O8 n I+ V7 v1 k strMid,
) I6 w/ I$ }$ i& { ^ 0,
. U* f, n) T/ u Z& U2 J9 R NULL,
; x# l( c; q' Q- J* k: s) ~ REG_OPTION_NON_VOLATILE, 7 A4 l1 X' ]0 o! ]0 Y
KEY_ALL_ACCESS,8 z* I' r" I B% w8 s1 D: v! B
NULL,
5 B% @: n/ h& i &hKey,
( O0 p+ x1 E5 r/ u0 r4 M0 ]' b7 \ &nLabel );//获取数据源键值句柄 `( z: p: q7 _! j. j$ l! b0 U" ?# x+ i
- D$ k. L# l# M6 T& f7 E
RegSetValueEx(hKey,
6 |( }' Z! @1 F$ m strDSName,
6 Y) A: _. @$ `3 { 0,
, B! u5 o) ]+ u7 W REG_SZ,7 g6 K; ~; I* G0 U0 m
(const unsigned char *)((LPCTSTR)strMdb),
- K( G/ a9 o* Q6 s strlen((LPCTSTR)strMdb)+1);///设置数据源类型' \1 G3 }. Z# |1 }, @$ s2 d+ b. k4 b
% ]* x% ?2 R" Q/ H4 [& a4 r
RegCreateKeyEx(HKEY_CURRENT_USER,
, I7 e5 ^ \% ]9 x1 P strDataSource,
+ P+ ~* I" g, O1 W- r1 N 0,
* U- T0 I: r* h- Y/ ?$ Z) W8 k NULL,
7 ^- K1 z% k$ L/ M( I4 p2 Z2 C) X3 f REG_OPTION_NON_VOLATILE,
3 X4 S' P# f1 G KEY_ALL_ACCESS,
8 [! t6 C' Z9 S: r3 i NULL,$ Z$ j- x+ R, q, e# ?
&hKey, ) `0 v, M- R" k4 M4 P4 b5 v
&nLabel );//创建数据源子键1 X4 ^( d" _1 O5 D) H( ~
" D4 m0 ~6 ?$ p4 c
RegSetValueEx(hKey,
+ v5 F; m/ w5 i _T("DBQ"),# G7 o! Y& H5 ?3 s' k' L
0,, V7 [+ ^; @3 Y5 J7 }% J/ L
REG_SZ,
2 T: W# u3 m9 ~: W2 V (const unsigned char *)((LPCTSTR)strDBPath),
/ V7 T8 l8 o* A0 C" Z strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
% B9 L& y( s1 Z, F3 w6 W' H# Z# C- ~% Q2 R3 u( h. K) J9 `
RegSetValueEx(hKey,( z9 T2 @: A( M2 s3 w
_T("Driver"),
2 L3 N7 K. T0 M6 }" R8 O 0,( I& N/ m. u4 |( Y% Y. L# P
REG_SZ,
' m2 g; p! l ]; [0 `, b (const unsigned char *)((LPCTSTR)strDBDriver),( a; W- o. Y0 u8 c: t; [ |$ o
strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径4 V) |' S: `. @$ Y, A4 Q5 D3 D
, ` o) ^. F$ M RegSetValueEx(hKey,& ^& z5 ^" k9 G
_T("FIL"),
, N( ~' \# C/ G) n6 Y, O 0,
* t8 p8 r/ ^0 z- H% Y REG_SZ,
E- g/ ^0 D6 m7 k& i0 l3 s0 W; l (const unsigned char *)((LPCTSTR)strFIL),/ N7 Q L( v5 V" @: \+ R& j
strlen((LPCTSTR)strFIL)+1);//表的类型 e" C2 r5 T: E9 b* n# k/ M
. h' e2 Y% u9 [3 S RegSetValueEx(hKey,) X! E; v b8 b6 Q. E; \
_T("UID"),; N. m u- K, T6 L1 b9 B- A r; H
0,
( g0 U' [/ o' } REG_SZ,9 y! {3 F1 i3 g: P0 M; `
(const unsigned char *)((LPCTSTR)strUID),
! y, f5 B# W- G, y, Q$ M; P& N strlen((LPCTSTR)strUID)+1);//必须项9 K5 J$ {9 e) p1 t" C
8 B2 w6 M! \8 ]5 f: H" G3 E. `5 `
; w6 L+ x2 L3 L2 J1 M
DWORD DriverId = (DWORD)25; S2 a2 c2 M( d/ J
RegSetValueEx(hKey,. [+ {, ?: k6 q0 j" z1 C
_T("DriverId"),
9 a; ^1 X# h# B: S1 d$ V 0,
( y# n8 l! p: X. H REG_DWORD,+ @8 n C+ i* v/ C6 ?
(const BYTE *)(&DriverId),
. w0 Y' Q6 M1 Q/ k7 W sizeof(DWORD));//必须项2 h: W" c2 {; |. `" l( d
1 f" f* O. a' D; R; c# Z! u, u7 T& t4 ^8 V6 B1 }
DWORD SafeTrans = (DWORD)0;6 ^3 F* t2 {: i- A/ L
RegSetValueEx(hKey,. r& ?$ r' ]0 T" |
_T("SafeTransactions"),
6 X x8 I' X R2 ?" K 0,6 x$ `) d. Y+ x/ t
REG_DWORD,
( h* \" F* F2 N' y3 Q/ T! i (const BYTE *)(&SafeTrans),
3 \) o0 ?, ^0 K P5 {$ [) ~; D sizeof(DWORD));//可选项. w' [* c/ T5 p* ~% a$ D
}; V* f4 {, g( Z4 E" Q4 u* I Q1 V
7 C* w/ A2 S- C6 ~$ T( d ( ]: X+ D# A! u
3 w6 I* p: p! ]. w9 Y' F
调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|