|
|
主要代码如下:& J0 K: o( p) f, B! m% R' `
# M y' r) q! _& o; y/ Evoid RegisterDBSource(CString strDSName, CString strDBPath); |: |1 h4 n/ b0 \" g5 m( ~
{
2 B) O: S) g/ C# `5 U HKEY hKey;
, d5 r7 p/ p+ v" P- F/ V+ P DWORD nLabel;
' |: l6 O- @( m q
! }/ Q) C8 Y; n- L CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");0 j" a& G3 U# v
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;9 i- o- x2 @+ L8 |/ E+ p8 f) n0 T
. d+ d- ]& h, \3 B; v# B* w5 t
if(strDSName.IsEmpty()) return;9 P0 F) |8 A+ Y# C/ O
if(strDBPath.IsEmpty()) return;- O8 S5 ^4 `3 r: D, W5 o
1 g$ W. ]" F, M4 [! Y- P9 \
CString strDataSource = strBaseKey + _T("\\") + strDSName;
& j* V* m# c! c8 D, d
, r- Z1 T& P/ y" q& e CString strMdb = _T("Microsoft Access Driver (*.mdb)");
' ]! l4 ^$ V$ c1 o5 n CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
1 n' t2 M- ?. K; W$ ]+ O1 M: l CString strFIL = _T("Ms Access;");
6 u, G r, n" a' y& p3 J Z$ s CString strUID = _T("");3 g: Q4 o2 m0 V% W! X9 B( }0 o1 ]
2 O7 T ?0 |) H0 Q9 W$ v2 |
/ i! c2 L0 ^9 R( h4 r2 D0 n
6 P9 Q% \3 s4 p# s5 A( E, E4 k- h- \ RegCreateKeyEx(HKEY_CURRENT_USER,
2 [$ z) w& n' S2 D. R strMid,
( k9 F2 F" z3 Y2 i( L; y% c( Y 0,
5 D1 I( U& O! [% o NULL,
4 K3 }# ]0 }7 D( w8 O REG_OPTION_NON_VOLATILE, Q6 \3 E2 g$ I8 [8 Y( b
KEY_ALL_ACCESS,9 J* Z; \+ G8 C% O( s
NULL,4 `$ S% N3 W1 o: O; C; u6 }$ ?% v
&hKey, 4 d7 m; ?8 L4 p6 p9 O" ~
&nLabel );//获取数据源键值句柄
! Z9 y9 n/ r5 R9 ]) z0 e
. x6 \. N% s0 A$ R* A) k5 A RegSetValueEx(hKey," w: |8 T+ {2 g' I! Q
strDSName,9 Z) z0 N; O3 k( K! u
0,' E- |: P: \9 d; Q
REG_SZ,
4 p# J# u9 q& u+ r6 W (const unsigned char *)((LPCTSTR)strMdb),
, s* z! U' k1 { strlen((LPCTSTR)strMdb)+1);///设置数据源类型
3 l4 u0 L! S5 I+ U7 T* [# {; p
: A. T0 h( X) H. V% ^9 ? RegCreateKeyEx(HKEY_CURRENT_USER,
& N4 g' G7 D9 _/ ^! a2 o1 K8 `" V strDataSource,. Z: A ~$ u, ^7 K
0,
) Z# q1 g5 x2 a2 k+ z1 S- Z3 J NULL, ) V/ ]/ h8 c% P7 a# ?: I
REG_OPTION_NON_VOLATILE,
) E# Z$ G7 |. [ KEY_ALL_ACCESS,. q- X r) W& z# ^6 q
NULL,
2 v# y$ r2 d) W$ Y& L! L \' m &hKey,
1 V9 y4 v1 O% ^9 r. X1 L. \0 m &nLabel );//创建数据源子键
f( }( V: Y N/ f9 N0 p( H: g- K: E' Z: U; K: V/ D5 u6 U
RegSetValueEx(hKey,
% P8 Q9 i$ ]# m _T("DBQ")," I" ?6 h/ h/ G: h! y r5 S
0,5 D0 s+ v V7 p4 g/ y0 P
REG_SZ,- f1 {) F1 s) h4 w
(const unsigned char *)((LPCTSTR)strDBPath),
; P6 G" {1 x' i, Z7 E strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
( C5 F5 A3 ]* X' O% Y) A6 Q2 i9 p- }) k) y3 t5 J7 F
RegSetValueEx(hKey,1 h, g& o0 M& |; u# F
_T("Driver"),- T$ [! ^0 t) ^/ W
0,4 [+ Q% R9 @/ {+ O$ I( h, ^6 y- a4 B
REG_SZ,
, r% `' @1 l; q" F# M (const unsigned char *)((LPCTSTR)strDBDriver),, ]/ J+ E! g, m4 G) c* U( w
strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径7 b1 C. {' G: s0 E' I1 {. w
5 B. M. [/ f/ g) E& A2 i3 Q RegSetValueEx(hKey,; A8 Y* k4 Q9 g% O. Z
_T("FIL"), R0 ~2 C1 C' I& ~7 K; m
0, W) O& F: p0 P1 @8 X% K
REG_SZ,' Q% i5 e' C+ o# f7 r: Q! d9 Q9 B
(const unsigned char *)((LPCTSTR)strFIL),6 K- V5 l9 B; g+ E
strlen((LPCTSTR)strFIL)+1);//表的类型4 C" z4 v% ]% V) z% d" [
( O8 q6 a2 W3 ]# E" v o RegSetValueEx(hKey," N: _' c5 ^' r4 |+ l' m; |6 y; E
_T("UID"),. k& T( w4 x, H( u' J
0,2 B0 K6 F3 H0 M1 y5 `
REG_SZ,2 H5 K0 T; d6 i5 }$ K
(const unsigned char *)((LPCTSTR)strUID),+ U- C: O A) |
strlen((LPCTSTR)strUID)+1);//必须项
& ~5 o1 j; ^4 e# t! k+ w+ q9 e0 m
% Y8 y' p8 m3 A/ X
& \! j' V' i, ^+ i DWORD DriverId = (DWORD)25;
. F3 d& E8 f% M5 E RegSetValueEx(hKey,% I5 U! c( F, v8 w ~
_T("DriverId"),' F& T2 f4 T1 a6 [2 y
0,( Q1 s, V- R( W" i3 X) X
REG_DWORD,, b3 ]* Q! i4 m4 Z
(const BYTE *)(&DriverId),
0 j) _% p5 p' `, u' l* s+ p# Q6 X sizeof(DWORD));//必须项
5 w: S2 T2 j7 ]/ Z v: T; n- G
2 e% ~: K8 U* q* U+ ]5 x2 w k8 Q- S+ B' l8 k3 Y) M) W& E5 y4 R; B
DWORD SafeTrans = (DWORD)0;
- n; w5 J5 O& N RegSetValueEx(hKey,0 S& } w! j7 K
_T("SafeTransactions"),
* V! @( \, |" v: x2 x- ?$ r 0,0 W" S" h2 A; h( `8 [3 O
REG_DWORD,
# @$ m, v) B e. G7 ^# U; E (const BYTE *)(&SafeTrans),
" }, M3 [9 M/ W, r7 t9 n6 q$ p# M sizeof(DWORD));//可选项
9 B+ v; R# \/ _( d}
7 z9 d) r0 W0 ~# V8 v
( u3 Y5 V# r# m( \0 J3 A / s. ` W, \: R
) q/ n1 t# A& U9 M6 x
调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|