|
|
主要代码如下:% p, R0 ?. b5 v3 {$ ^" s
0 k- g0 Z w. S R% w6 C" I5 ]
void RegisterDBSource(CString strDSName, CString strDBPath)4 g' |6 Z) ~( J# i5 e/ f
{
7 m- l: C! ?! Y( A/ F% L1 V }, i HKEY hKey;
( x3 b1 a" m/ Z/ D' F6 g2 |$ R: l DWORD nLabel;
2 G% O7 N+ c5 J1 b6 Q8 J1 J5 W
0 p, n7 b$ `5 ~1 A2 r& j CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
/ c6 b! c1 U5 E+ k; w! M9 } CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;% K1 \9 x6 G6 ]* F. R k% R: H5 M
4 }, J5 d" q8 F7 u$ [
if(strDSName.IsEmpty()) return;
% K9 Z: k, g( \# I f7 R" z if(strDBPath.IsEmpty()) return;, B- ]. h9 b6 T2 O
* P7 z' a5 \: X/ `- ~% ~6 ^0 ^ CString strDataSource = strBaseKey + _T("\\") + strDSName;. t; E, ?8 S( G! M; K$ {; p
# U; r) j3 F/ m$ U4 b CString strMdb = _T("Microsoft Access Driver (*.mdb)");
/ j I" c8 m0 o/ S' I CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");; I/ q4 K+ e1 H% B7 ?! p
CString strFIL = _T("Ms Access;");
0 _1 g3 ^. n2 i. j$ C CString strUID = _T("");) v5 Y$ c1 I3 M* c1 T6 c" K
+ z# [/ q9 y( Y1 {/ E( }9 M0 ` & U8 y3 c! ^! Z
: b4 ?3 J. a/ k6 W. q% X9 v$ G L
RegCreateKeyEx(HKEY_CURRENT_USER,
+ |1 \6 z" M& E2 B; e6 x# @9 C strMid,! a0 V5 ~7 {3 p2 A5 s
0, % j+ T& C; g1 }7 P" w3 A
NULL,
' Y) W- r/ J& W: } REG_OPTION_NON_VOLATILE,
: X5 b* m9 z* {1 z$ }) ?7 k9 {' j Q KEY_ALL_ACCESS,
# |/ z i8 l. z& O' d% e NULL,3 ^1 J$ C6 }" H* E
&hKey,
2 t7 d, j$ ]$ o &nLabel );//获取数据源键值句柄3 C7 }) T& R5 s
8 M2 V5 W# _6 V6 I
RegSetValueEx(hKey,
- s e5 p8 c9 q4 d$ [7 X! v* g strDSName,& m* d F/ Q( K; b k' z: ^
0," D. I/ g8 G. T& T( m/ x9 n
REG_SZ,$ n; [# {- E T+ U- ~! X4 q+ t
(const unsigned char *)((LPCTSTR)strMdb),
) n4 p4 E' g* |+ t+ H Q strlen((LPCTSTR)strMdb)+1);///设置数据源类型& W* K0 t$ I1 o5 r/ k
5 |+ t# e1 p$ |. c RegCreateKeyEx(HKEY_CURRENT_USER,2 K3 G' b1 K6 R+ y8 _8 n3 U
strDataSource,' _! v4 g. ~0 p8 H
0,
6 G+ ~3 N( {: v* a& N: K NULL,
9 ?9 U* V2 c# c; L REG_OPTION_NON_VOLATILE, ) }' {0 s* `2 D4 U5 @
KEY_ALL_ACCESS,9 }7 N# d7 g8 {! U3 k% U0 y
NULL,7 v H" |# M/ [- [ S( a
&hKey, ^. {% j; ]7 g
&nLabel );//创建数据源子键' N' x3 o0 ]# f0 N
+ Q4 ]; {8 A3 R# d0 ^$ H4 a4 ~& c! v RegSetValueEx(hKey,
8 j/ ^. T, p4 `1 x1 R+ y$ v7 M _T("DBQ"),4 A# y0 `: ^' g4 |
0,7 X' j" q. B% A
REG_SZ,. D+ Q- [- [$ A% |# v8 w# \
(const unsigned char *)((LPCTSTR)strDBPath),
. {7 A+ {& V' p5 c1 D3 \ @# n strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
, x: G% k, \& f5 T' i, {- q7 ~' b# d# [6 S1 }6 E
RegSetValueEx(hKey,/ r/ F8 y) p( Z8 q g/ q0 `* E
_T("Driver"),
0 H) E$ I1 h3 ^ d; s% b: q 0,7 ^2 G4 a/ x+ f2 K2 l
REG_SZ,
, z/ }: x8 A) A4 p0 n (const unsigned char *)((LPCTSTR)strDBDriver),
. l W" ^0 c# t7 h, Z strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
3 d1 x! _$ y6 S: e3 D. m5 l7 C5 |+ @" Y$ j9 N
RegSetValueEx(hKey,; ^, j% G* }% H: j/ l: S0 X
_T("FIL"),( g! A( ~2 ?2 z, i1 L6 L6 S
0,
4 O9 o, O [3 f8 R& G/ y7 p REG_SZ,% `: F1 A) d O! r
(const unsigned char *)((LPCTSTR)strFIL),) s3 k) T T# f: X3 V' k
strlen((LPCTSTR)strFIL)+1);//表的类型/ O8 a1 I2 P' X* k! u! b
7 N6 A7 P( Z! y2 n" E% Y! D2 H: k) z
RegSetValueEx(hKey,: t9 A6 m' m: M- t; k4 S$ Q
_T("UID"), E3 l- F6 H$ S( S- D( n
0," l; G1 U3 |) ]) t3 h, \' Y
REG_SZ,9 f2 ~1 h, x- \ l; g
(const unsigned char *)((LPCTSTR)strUID),
( D4 W* T* f* C; }, y! q6 l! h% M strlen((LPCTSTR)strUID)+1);//必须项, d7 Y2 O/ W0 L& d" c5 `, ]2 H
& X: N5 D( \. |' Q/ c
( H0 p0 r% A' y$ G
DWORD DriverId = (DWORD)25;
7 b9 j; H0 x& n. T) T RegSetValueEx(hKey,
9 ^' `0 R4 M: M/ g6 [, r( U5 _! n _T("DriverId"),
% ^& J& b' D- v2 [! Q" G 0,: R9 _ q3 n k1 ^& W9 f
REG_DWORD,
3 I+ L! d4 N/ {9 B; ~' ^ (const BYTE *)(&DriverId),9 A' F9 T6 p" Y- y
sizeof(DWORD));//必须项8 a0 J9 P3 D8 e: x
& n. d/ }) I: c9 h+ K! f3 }
% y" _0 d& n7 [. Z DWORD SafeTrans = (DWORD)0;; s. F, C; C% z( T' E3 @' H
RegSetValueEx(hKey,8 g$ \/ D3 Q u. E, D$ p, P
_T("SafeTransactions"),
1 l7 r3 Q7 |; V* ~" O; [' P8 m( u 0,/ G4 @6 X. l" ^) @8 i$ [
REG_DWORD,
) W/ \' V9 ^/ l+ ? (const BYTE *)(&SafeTrans),. r5 s- q p( g0 q4 l
sizeof(DWORD));//可选项1 D( I% P, d" J
}' }. D1 d7 Q! Z* k* q- Y
. ? @3 m3 t1 W+ C
% }. l$ l0 L) e* T% S8 q R h) x' c. p% K, S% ^
调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|