|
主要代码如下:. [, }5 u/ s3 F5 }$ C9 U
* ?7 s% q1 ^+ U7 F* r; f
void RegisterDBSource(CString strDSName, CString strDBPath)) G+ P+ ^8 e S( }
{
6 v. b! |3 F) b# r; R1 B/ K- V' r HKEY hKey;# O0 x5 g! T3 n, q
DWORD nLabel;
) S9 {' T7 [$ Y, ?' ?
% K4 l T5 \) p* B# n- E CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");! x' s8 Y$ X' f
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;% ~+ L6 \7 D) t" e5 M* d
3 q1 p e, k! `5 e$ e if(strDSName.IsEmpty()) return;5 m* p( F) K5 f
if(strDBPath.IsEmpty()) return;
( a8 l$ ]4 K# ], Z% N O; b& Q6 [- o) i7 r3 r1 z* D* A% m3 G' Y
CString strDataSource = strBaseKey + _T("\\") + strDSName;0 O1 I( v) s M/ E; d7 ^! Y
) N* z; } A: l; j" j- T8 S CString strMdb = _T("Microsoft Access Driver (*.mdb)");4 ?, I9 `8 n8 @
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
Y1 d/ b3 s+ J CString strFIL = _T("Ms Access;"); V) d: b: _# r+ N. X/ X
CString strUID = _T("");3 B" r; }$ {8 b
2 S$ q; U3 F( y
5 N2 S1 O5 S1 R4 x
* R& x/ U. ^; p
RegCreateKeyEx(HKEY_CURRENT_USER, p* h. i: K' x0 J! S' E
strMid,
% O. y& ^% R7 J8 o; O 0,
; K' C# j) O3 ~) ? NULL,
' \1 A3 u$ e9 O6 A; U REG_OPTION_NON_VOLATILE,
4 x) T( X0 l S, D' B& k4 @& e KEY_ALL_ACCESS,! E/ f% c8 R; G% `1 h. D& s
NULL,9 S" C2 I. l$ z g
&hKey,
! Q5 ~* R; Y$ G% L3 T/ S &nLabel );//获取数据源键值句柄$ ]/ A& X- }& s7 n) s! g g J
) [4 k) `0 X$ K9 {8 g. L0 E" A* E RegSetValueEx(hKey,- o$ z, s* O: ~0 n d) @ \6 { D
strDSName,0 L/ f1 n( w. {1 i6 \
0,; ?2 w3 H$ A" v; U& Z" c1 r- y
REG_SZ,/ w6 V! \, B5 }
(const unsigned char *)((LPCTSTR)strMdb),
l) C3 G* }5 [. L4 U* d; [ strlen((LPCTSTR)strMdb)+1);///设置数据源类型7 ]4 [" D# w" P2 X/ y4 y6 U) U# ^
* B: Z: N& k. R. {% X Q
RegCreateKeyEx(HKEY_CURRENT_USER,; B% q: _0 ^+ L
strDataSource,. A; {5 X. C8 d' S
0, # j' R5 k" X @* ?% t2 H
NULL, * g) k% q, L& @7 Z. p2 q7 m
REG_OPTION_NON_VOLATILE,
6 m( H% Q7 V/ k U( ` KEY_ALL_ACCESS,0 v: y) a+ u: L+ c5 F# P" m8 N
NULL,
9 j2 ^+ X9 Z( F &hKey, ) ^ g$ l I: f2 M* _
&nLabel );//创建数据源子键; L% o1 W! z- d) x/ ~
2 M# G9 \" u n2 g- F RegSetValueEx(hKey,
* ?" v6 R' X' D; {1 N _T("DBQ"),
5 M. Z! l7 D" W3 {* [% A 0,
E$ |5 O( }4 [ REG_SZ,
5 [) f+ O0 Q' {! ? u2 \0 b (const unsigned char *)((LPCTSTR)strDBPath),
/ D' x" y5 T8 \* f. T8 { strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径6 t% B' a' q y4 b8 r$ @+ B% k* Y
- s6 k2 w' x" D
RegSetValueEx(hKey, q( S; q7 n) R4 Y& A
_T("Driver"),
4 U" w1 P, n% s- D; q( e( F4 n2 G# | 0,4 }, O% P. Y1 E. d8 N
REG_SZ,
; P. E8 `6 H0 l, e7 M (const unsigned char *)((LPCTSTR)strDBDriver),2 Q7 p" @8 ? R/ Q- R1 r# e( f
strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
$ g$ W% H8 |- ^) A& \! F$ p
& A9 ?" i# W4 G" I$ I RegSetValueEx(hKey,
* u1 \* u$ x% m _T("FIL"),
3 g) O Q- k1 n" \6 | 0,
' z6 f) _7 [* u& }4 ? REG_SZ,
* g# Y3 x( }! I2 J0 j- B4 M (const unsigned char *)((LPCTSTR)strFIL),8 a9 _0 \) l$ Q3 j) u
strlen((LPCTSTR)strFIL)+1);//表的类型! z! |5 o6 b! e$ C- {. _: [
& R1 H. k) y) j# g7 ^; C
RegSetValueEx(hKey,
+ m5 a p* {" A+ e3 n# P _T("UID"),
6 H7 k$ `; s# m2 J3 W) i: V7 q* q 0,
8 `) {" S6 S. a REG_SZ,$ x* k* h2 }. H% `5 @
(const unsigned char *)((LPCTSTR)strUID),
/ k: V6 |* ?6 j' R, E! G @ strlen((LPCTSTR)strUID)+1);//必须项; N% @4 n- k5 O; _+ K: } B
- f2 n5 G5 T: |; ]
& e7 [3 S) m* ]+ a, q* {- ~5 P DWORD DriverId = (DWORD)25;2 e7 f G3 t, g
RegSetValueEx(hKey,& c5 J6 {/ C, C9 g9 m) R
_T("DriverId"),; C1 ?- s( ?+ y
0,
/ o; Q9 P2 K5 P, B REG_DWORD,! i7 Z" W. y3 t3 W: |# H6 [4 Z
(const BYTE *)(&DriverId),& T' ]1 e% S$ l7 Q5 Y" e% [+ i
sizeof(DWORD));//必须项
5 A7 {% V5 s. r. @, B& A" B
9 p- a: E: G7 g { V0 M: n# h8 c$ l: ^ E$ }, C' u
DWORD SafeTrans = (DWORD)0;- M- l$ S( W* b8 `% ?
RegSetValueEx(hKey,* U" f: U( B; A' c
_T("SafeTransactions"),# X" t- {. D/ t
0,3 c5 l3 a& n) c
REG_DWORD,
% }1 x4 v3 d: X/ T (const BYTE *)(&SafeTrans),! o/ m+ t1 r, Z; {! a! ?1 F
sizeof(DWORD));//可选项* P. n4 y$ ]5 `; w- s8 X- ~9 S4 T
}
5 a6 C) y7 v6 u% l# _$ {+ r/ N, s" W0 g6 ~& T- K4 [
9 Q* o) ?# O7 V. _5 S* l1 l9 P; h$ S6 u4 B
调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|