|
|
主要代码如下:
3 [" J8 h( ^1 F q3 g- D
( Z, K; r. u' i0 ~: C) yvoid RegisterDBSource(CString strDSName, CString strDBPath)
% X% C, \7 I* j$ R; L I6 c{
3 _: y/ T T6 B/ {* u HKEY hKey;* v( L, G! K4 H% n: x- ]! \7 r& \3 h
DWORD nLabel;
0 G7 C9 r$ B1 a( E; G+ L! s1 U
) |) S5 A# i% Z CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");6 [5 M2 Z ?! n) R; V
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
4 R7 K& p7 O& F0 D" x0 T& J' m" L, P3 X9 o$ q$ f
if(strDSName.IsEmpty()) return;
2 m0 J0 p0 U; i. m; w4 {7 k5 Q if(strDBPath.IsEmpty()) return;
+ v4 D' A$ \0 g1 S* {) m9 I' L6 L" s
CString strDataSource = strBaseKey + _T("\\") + strDSName;
2 C* u+ K2 e5 z6 z) _
! v9 F) R: D- T4 f& D0 i5 R) d CString strMdb = _T("Microsoft Access Driver (*.mdb)");
* D9 W/ F% _7 b CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");' q& d/ o. |. i% v" a9 M
CString strFIL = _T("Ms Access;");
6 \1 Q) x. s' @6 Z1 | CString strUID = _T("");
, V" W$ o& g/ \4 I$ S9 F3 X p: t0 _" c2 V
8 M' s/ n2 E+ A- W2 }% { b' d" a* J# `! {7 I
RegCreateKeyEx(HKEY_CURRENT_USER,
1 N+ S; b& _% N+ p4 y4 `: x: D strMid,- g5 f* Z3 h! j+ ?5 F
0, 6 l- k4 j* g9 J; D5 T
NULL,
5 c1 Y. }* b1 v. H& O. ~ REG_OPTION_NON_VOLATILE,
6 p0 J& ?* w4 d6 F6 `, D KEY_ALL_ACCESS,1 @4 \2 k6 W7 Y
NULL,
. T8 I$ t, Y' W+ m3 \ &hKey, , T5 a7 ^8 _7 ~& {: K% a$ h' \
&nLabel );//获取数据源键值句柄
: N) D4 f8 Q- ~" N6 p5 f! r& P1 a! V9 r1 B, l9 N7 D
RegSetValueEx(hKey,
4 R" _& m% Q' M5 u7 m: j strDSName,
- E9 }' \) P' s8 c 0," k* c3 q. I' [5 s8 S# P( U, o
REG_SZ,
- @+ D2 y9 o/ J% y: |2 L. r (const unsigned char *)((LPCTSTR)strMdb),6 h' ^9 `' Z m4 G+ v
strlen((LPCTSTR)strMdb)+1);///设置数据源类型: m2 g5 o1 E6 R
0 n% V! E, g, t/ V1 o- d* M/ M
RegCreateKeyEx(HKEY_CURRENT_USER,. y, l" g/ @5 F! ?* p6 O6 J$ v
strDataSource,
3 o2 u1 N. {, r! B1 H 0,
" v/ J9 j- c/ U) a2 F& V NULL, 1 z: l2 w2 _- ~* E5 }
REG_OPTION_NON_VOLATILE,
- a) i8 w& Y; O' M& H d/ W KEY_ALL_ACCESS,
# }6 `7 Q6 }2 T, C NULL,3 l5 Y3 `" c) l, o4 T
&hKey, 9 r* s1 ^" g) L; ~/ @2 j
&nLabel );//创建数据源子键
" D/ Y {9 H \/ @. c% L# [* n S9 x) \3 z2 F5 l2 M6 w M1 j f
RegSetValueEx(hKey,+ n; L$ q6 o4 y5 {/ v: r
_T("DBQ"),0 `2 r7 H. t, N5 L! M( I
0,! E; N4 z8 g- Q2 ~+ F/ _" A
REG_SZ,, }! a7 Z `; r) @# S
(const unsigned char *)((LPCTSTR)strDBPath),
% O; r3 o, O3 Z; e+ S$ R3 ] strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径5 `/ }/ @7 b0 J# r1 ~$ q& a Y/ l
) ^' c `& o4 E# D- k4 q& O9 ] RegSetValueEx(hKey,. G6 q% h6 v! [9 ~/ p
_T("Driver"),
0 m/ Y! G; `' l. v. a: @ 0,$ f5 f A1 @' J8 C- [
REG_SZ,
/ T, {3 B1 e9 l4 H (const unsigned char *)((LPCTSTR)strDBDriver),5 @$ N/ E" l0 ]; ?9 z/ x7 z
strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径) U: s! K) }/ Y) a6 N
9 T" I6 e5 ]9 |$ y. V) K4 _3 j8 I
RegSetValueEx(hKey,/ t- \0 _: C: l
_T("FIL"),5 p- R( G% M. w$ c# A
0,
: c+ K- p5 Q) s3 e1 j2 d: a REG_SZ, g/ w5 s$ J1 C e; E# _4 `6 Q7 a
(const unsigned char *)((LPCTSTR)strFIL),
4 Z$ x5 E) g, \ d2 e3 g- b; k8 p strlen((LPCTSTR)strFIL)+1);//表的类型
9 b# z: Z4 e' X9 d( Z3 [1 R( ~9 a: Y9 I) w# Q; J0 h) O
RegSetValueEx(hKey,
5 z5 i/ w' w6 K1 c' q. X _T("UID"),
3 W* y$ G3 S9 u7 `% d; ` 0,9 `; a: U3 S3 A$ ^ b$ y5 j
REG_SZ,+ w* _" c% c* \7 ~
(const unsigned char *)((LPCTSTR)strUID),
1 n* _& K. e% F, k strlen((LPCTSTR)strUID)+1);//必须项
- ]; s# d E' F9 [* u+ p3 Y* u
0 x; `4 T1 q) P
6 G: P" J5 n" @9 F DWORD DriverId = (DWORD)25;3 U5 I/ W4 n% |: D" g6 @
RegSetValueEx(hKey,* N2 D+ @4 O! v8 a* x/ D
_T("DriverId"),1 S; ?+ C+ o: C' v8 K
0,
, I5 X7 k) K. V; _- C) K REG_DWORD,
! }, C4 k/ [7 C* k: S (const BYTE *)(&DriverId),
/ z/ k; R8 i7 }0 W sizeof(DWORD));//必须项# I6 e% m) z* Y" K, q
# R, ^1 u, |2 q; u5 T) u1 m
5 a7 n+ p: w0 }& [: X
DWORD SafeTrans = (DWORD)0;' \' t/ \" X) G2 V) k
RegSetValueEx(hKey,! i9 W' v9 \1 @+ T. s+ [5 D1 E0 f
_T("SafeTransactions"),
9 p/ x) T) Z7 S2 Q) T 0,+ C! g% G: O% z4 l W- S q) s5 K
REG_DWORD,
% }" o" P0 A% J& z2 D. k+ v, n7 g9 r (const BYTE *)(&SafeTrans),
7 C/ n) Z8 H. b4 e! y sizeof(DWORD));//可选项
4 _ m! u9 c! T4 O) B}
, w; P2 ^; `2 o% X! L2 |" q" q) z2 |! C+ p+ F9 a. F+ g5 a
& R f0 `% p2 t& K1 {5 `# i
: z: J$ `& o4 E3 s5 N调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|