|
|
主要代码如下:9 d# m. i( [" f2 I F: H [
0 u Y) a) f& X f1 j1 N2 T: G! V$ h
void RegisterDBSource(CString strDSName, CString strDBPath)& P5 I9 ~# |3 v2 n3 j: i
{$ P/ w+ q: ]8 ^. I; i; E
HKEY hKey;9 D4 e& w' M& W2 ^4 Q
DWORD nLabel; ! \+ X/ A- p' ?8 @
9 a6 f2 H- y& w' E B& Y CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
( S; R% P ?- M' G( S; ]9 v2 ^) `2 d CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;+ g2 D$ B9 I- \! m/ m
" h$ L3 i" Z( `. u4 q/ I2 | ? if(strDSName.IsEmpty()) return;
! x3 g% F t6 u7 y" l6 E if(strDBPath.IsEmpty()) return;: [, f7 }; {6 q9 x3 J( W9 f% F3 S
0 P1 B* l) G+ @" \2 A8 [; K7 } CString strDataSource = strBaseKey + _T("\\") + strDSName;
% u% { @0 f( z/ ^! e) J4 x+ d) N% ~0 A; l; X4 g
CString strMdb = _T("Microsoft Access Driver (*.mdb)");. x$ @7 _ `. ~5 H% V q5 i9 W" _
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");8 t% i0 t9 i e4 V2 I! S) }
CString strFIL = _T("Ms Access;");
9 C' p. U3 v" z3 X CString strUID = _T("");! w' ?/ A3 G: b
8 ?5 N& p6 {0 [; k % d* F4 \$ U* m8 k# m: u6 ^
- X. R/ o4 p4 y RegCreateKeyEx(HKEY_CURRENT_USER,1 m1 L# d0 H) V4 _2 r
strMid,
5 s" K. w5 I# c& O 0,
5 l* G$ v* U7 B% `6 @ NULL,
) v d& x7 j% _ REG_OPTION_NON_VOLATILE, # P/ l _8 k5 V& ^+ A- i% |. z7 E
KEY_ALL_ACCESS,: r4 q" t5 L2 j9 C
NULL,# K* Q9 L: f: [# Z9 a- ]+ S
&hKey, - p; ]2 N" A2 T" u0 ], d
&nLabel );//获取数据源键值句柄( }- w% {8 |, x# \4 {+ X
' }2 k5 V' V3 Z: {: G; G3 f# X
RegSetValueEx(hKey,3 i- X& p2 x* `4 |& {8 T! X
strDSName,
\# b) N; H% O- T8 W 0,3 [) _ K. X+ d! j9 k. c6 X9 D
REG_SZ,
* f3 n# e1 X8 l; \1 z3 h (const unsigned char *)((LPCTSTR)strMdb),
4 \5 d4 B/ ~# g) N strlen((LPCTSTR)strMdb)+1);///设置数据源类型" Z! O, c+ }/ n$ m1 J# o. \
* I6 r. t7 v: D8 p E! _" u
RegCreateKeyEx(HKEY_CURRENT_USER,: |1 W, t- W, f3 `$ v) i. g/ J
strDataSource,# i2 S6 P2 f7 r! k
0, + ]1 T, S7 z, x4 j
NULL, + g9 U3 r8 R$ t; S' q: ?( G
REG_OPTION_NON_VOLATILE, 1 E- c& K$ Z) M# b
KEY_ALL_ACCESS,
/ `" O- r% B% K- o NULL,7 k2 W5 L+ E' o. t: Z/ T+ J
&hKey,
- L/ F* o$ k/ [) {( D &nLabel );//创建数据源子键
9 k/ p) x; m% Y2 r7 g7 D; x: c* _8 E# M
RegSetValueEx(hKey,: }& r+ ?: ~1 L: x9 [ J
_T("DBQ"),
! I4 a0 R* A/ t, s 0,
9 T4 ]5 o4 _1 _4 R* O9 r REG_SZ,8 O) i: l' Y( w3 a
(const unsigned char *)((LPCTSTR)strDBPath),3 B( Z6 C# k4 z
strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
& I" C. y: R9 |7 P: r f7 Z3 a: B) w7 ~! }+ [! _) X
RegSetValueEx(hKey,; ^9 g$ x4 u6 R$ E5 O% J9 G$ }: t
_T("Driver"),
1 P- T( D) T+ j: S: v 0,* x5 _ B, \; e; Y
REG_SZ,2 a8 _8 M. a! j! S! p# O
(const unsigned char *)((LPCTSTR)strDBDriver),
5 C$ D$ i- P" f strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径& H, g; H/ m0 \8 V7 K* M) T1 |$ D1 z
; L: p1 }/ H# t7 d( X) ]9 T- t
RegSetValueEx(hKey,2 ? f, E* k$ ]
_T("FIL"),: E& k8 H- w N- a
0,
) a2 K/ W% J8 [( m- e2 ?% | REG_SZ,% M$ N% T- p. M" [& w+ A( `
(const unsigned char *)((LPCTSTR)strFIL),+ j# i9 `5 l3 S8 {' }# v
strlen((LPCTSTR)strFIL)+1);//表的类型
* J0 A8 u- a( d$ M, [+ ~( M! k8 A4 H% a$ N7 |
RegSetValueEx(hKey,
3 k7 U9 o/ v2 m( B5 y8 ?; f8 |; ~' p/ O _T("UID"),
5 ?) k# O0 u% N( F, M2 E 0,, j4 {7 e5 q' g+ k! {- }
REG_SZ,1 B% m+ z5 ^+ ?, q1 k
(const unsigned char *)((LPCTSTR)strUID),
9 \% Z5 r( \6 D7 H strlen((LPCTSTR)strUID)+1);//必须项6 \& e# q% ?& D0 `$ d
3 M5 k+ O3 M2 S
' Z _( w: L6 S8 U DWORD DriverId = (DWORD)25;& F8 p! K( ~" `" P' z8 b! U
RegSetValueEx(hKey,* l5 u1 Y8 c, y5 u2 B, q/ w
_T("DriverId"),# m% i+ \. u; ^5 q$ o& K
0,
* k! s5 d, e+ K% i" ?, h2 {% r REG_DWORD,
6 E) C2 }$ O7 j" [) q6 R' a (const BYTE *)(&DriverId),
2 @6 u; x+ }7 J; j) r& }- m0 H sizeof(DWORD));//必须项; D( N/ i% A) ?) M' u' b
4 Q4 V% C( I& v& U8 c2 \' `! U# K% l5 t! t4 H D
DWORD SafeTrans = (DWORD)0;+ H. Y5 B" @" ?4 K; K5 z
RegSetValueEx(hKey,
/ ]3 V' `( B! _! d _T("SafeTransactions"),4 C; G' P3 |9 v0 r
0,- q7 n8 C# e, r# E
REG_DWORD,% v+ U: @# g. e$ _$ I# n3 t" v% {
(const BYTE *)(&SafeTrans),
1 S) n* x: B# r6 E! e/ z$ S sizeof(DWORD));//可选项
: A4 j7 o7 D7 O0 R" |* E& s5 C* v: D}
+ S2 N. c* B: V) N# s
% u$ l( A8 z" [5 `5 c z P
, Z$ \, ~! ~& b* O; S0 k. A+ V7 h' _
调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|