|
主要代码如下:
l$ d+ P" @7 S2 X' [# r$ d& b q" O
void RegisterDBSource(CString strDSName, CString strDBPath)
! N6 p: j. e2 L, o9 A{
7 w. [9 d( o' c* f7 z HKEY hKey;
$ b% Q7 H4 F4 x( y5 ?9 A+ m" q) ~; ^ DWORD nLabel; , j* o& a5 t9 i# g: r! z0 O
8 u% h0 _. \) `0 }8 J- b6 w CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
/ B& s; J; S. f CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
$ C7 m9 l/ O& W& D1 z5 h! d# V i% } w2 Z7 D# b
if(strDSName.IsEmpty()) return;
& i1 t' N! X: e6 C if(strDBPath.IsEmpty()) return;: @5 ~4 o7 h8 R; V6 v( I7 o* Q
1 ~+ P, L p# u i/ w7 {9 _8 i5 U CString strDataSource = strBaseKey + _T("\\") + strDSName;7 K' l& ` S/ j) y# x
9 a2 Y' z" j x. r+ v CString strMdb = _T("Microsoft Access Driver (*.mdb)");
K! V2 J0 E0 L: e9 a( ~ CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");- U& `6 E* t& Q/ b a# Y. P' V
CString strFIL = _T("Ms Access;");" z" ^! ` d* W2 x& n8 d- n/ y
CString strUID = _T("");
0 Y1 Q+ j; Z7 E) Q- w, d t, _7 f( ^; ~) M- B* P; n% Z; ?/ r$ T
0 S: B% ~6 k2 S2 ^$ Z4 ]0 v4 J* o" q, I; y/ z2 b) ?) y/ L5 E
RegCreateKeyEx(HKEY_CURRENT_USER,
2 ^2 b0 ]9 c2 ]$ x+ r. | strMid," c R3 J; n& s P9 X8 B- c" h! a! X9 r
0,
0 A- l4 q- R2 V/ f0 e* z" i3 P NULL,
- E- G: e2 T( \7 n/ Q7 i" c% i8 M REG_OPTION_NON_VOLATILE,
% @, O: S, E* @0 W KEY_ALL_ACCESS," t6 f0 N9 Y- X3 G1 L+ {
NULL,
* O! x, u# k8 }. n1 { &hKey, - y$ a5 A" g; T" p
&nLabel );//获取数据源键值句柄% K' m* J4 v3 C! F) q
, T. t" F! b4 J
RegSetValueEx(hKey,
" c; e1 x6 z* K9 P! _, k/ C strDSName,
( N) }8 b+ e# I( Q 0,
+ w( P6 V- S$ B% g# B* Y REG_SZ,9 c1 {/ U1 z( F' z1 U" r
(const unsigned char *)((LPCTSTR)strMdb),
7 ~5 F# |* t+ L# H2 y- m strlen((LPCTSTR)strMdb)+1);///设置数据源类型
% E* `) \. x( |8 e& h" f2 O6 C: e) M7 X$ b; S
RegCreateKeyEx(HKEY_CURRENT_USER,
3 S3 G9 M8 F- R9 A- E& ~ strDataSource,) K# m" v: R; R- S
0,
5 M! }3 r9 m8 G; k# n NULL, 4 y. Q& m. b2 o' d
REG_OPTION_NON_VOLATILE, # A/ j' ~' K# V1 H# v
KEY_ALL_ACCESS,
4 u8 t9 {* T9 l0 p NULL,4 y( @7 j; S a
&hKey,
! _+ P6 T2 b) p7 g% W1 [& f. ^& | &nLabel );//创建数据源子键
3 D2 E* G7 L- X, [% v: w, O/ v3 I8 y
RegSetValueEx(hKey,' i2 ]# M9 {, i/ [, V$ L
_T("DBQ"),
9 U9 M; z- ]6 {2 X 0,( K# k" D6 q4 t$ N Z4 v% I
REG_SZ,$ h9 w6 D# W4 j# N. [! q
(const unsigned char *)((LPCTSTR)strDBPath),
n: y- z# w, v3 K strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
( p6 x/ b2 t' u8 Z0 m& K: Z# s7 D: D) X& h- |" _
RegSetValueEx(hKey,1 x; u' z) @ m1 v" f
_T("Driver"),5 b0 R! U# P, [. P- y# A5 C5 F
0,5 k8 z3 ^9 ?* W. L s
REG_SZ,
1 O- U+ T% L! f g F6 {( Y6 m (const unsigned char *)((LPCTSTR)strDBDriver),
& `7 n4 w1 S" ?9 o L5 ^ strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径0 X) R9 ^8 M% V' ^: p
0 w: c! E: E3 W0 Q) S' h% b* `
RegSetValueEx(hKey,. e% Y1 O! {) j! \0 N' E: @
_T("FIL"),
* p s( G! q/ t, g& w 0,
$ b7 x. j% Y/ e" F, G2 \# p* z* K REG_SZ,
; F6 t" J, r/ _+ ]+ p K R* k (const unsigned char *)((LPCTSTR)strFIL),
/ k- a- ]. l Q. ? strlen((LPCTSTR)strFIL)+1);//表的类型
" j+ `. c5 O" S" H1 p ]1 M, K& z1 @6 d9 p* v8 K, Z' J+ D
RegSetValueEx(hKey,
- G6 f. E \: g+ t, A/ ` _T("UID"),2 R2 u: N6 Z& ~; R3 _
0,
- s* Y, i o4 `% v2 O* Z REG_SZ,
+ F5 r' n# H( N5 i (const unsigned char *)((LPCTSTR)strUID),
0 ?9 Y4 g" N) O+ W0 i strlen((LPCTSTR)strUID)+1);//必须项5 w+ g5 u: W+ _" c+ f* e3 f
5 r6 r6 j% S% q( ^. b9 z" T) Q E! i5 a5 ^, B
DWORD DriverId = (DWORD)25;# g0 m8 `9 v3 y5 T4 j$ R- ^
RegSetValueEx(hKey,
0 I; W7 c: Q7 F: F _T("DriverId"),$ Z4 {/ k2 m" d7 u4 f% r0 R
0,
3 t+ L8 D8 e( Y, F REG_DWORD,( @2 @1 z5 Q' y2 {
(const BYTE *)(&DriverId),2 d; R+ h0 i1 c' j
sizeof(DWORD));//必须项7 \( U* v; ~& K
n" b- a8 Z# n/ d/ _- C" e
" K, \" P! j% A* f# V2 N% x DWORD SafeTrans = (DWORD)0;- l7 P! I) \# h, N. p
RegSetValueEx(hKey,1 U: U' z: k5 A/ j/ \
_T("SafeTransactions"),
* X3 j/ W, ^2 ~1 _ 0,5 ]: @9 j1 q' t& R$ J# M7 x
REG_DWORD,
6 d% d! b$ `2 t, ]* b (const BYTE *)(&SafeTrans),
4 v& C3 G) `0 s% T& E1 u; \ sizeof(DWORD));//可选项
. l& C/ C+ u+ X- \( l/ e- D}
9 [" I8 t" h% G, q" O& C! v
9 v% `! S* U; q2 T' p
" D- z& j* j8 P) I$ {+ m6 u/ c) \6 i5 c; i" Z2 M3 Z1 f
调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|