|
|
主要代码如下:
, n& K* [% O9 s" h! @* e# \/ k) ^* V; U; ]
void RegisterDBSource(CString strDSName, CString strDBPath)+ w9 E( g% I8 L
{2 H! f6 O' V+ k; [
HKEY hKey;: t1 c% P8 B7 }
DWORD nLabel;
( c) |( p: r; r- D. j$ G
" }4 O! Z% y1 ]& m7 s- a CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
2 L1 u5 ]' ]9 O* r; _- q& j' } CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;: H. @% W5 I2 }* z
& u0 D: u8 J. B3 l
if(strDSName.IsEmpty()) return;0 E( Q4 A; W$ }6 m* i
if(strDBPath.IsEmpty()) return;' }4 V" p I- D
/ F/ ~( w7 @! q0 V8 k- J+ X e! N
CString strDataSource = strBaseKey + _T("\\") + strDSName;
1 Y* j T5 Y3 o( y1 C) i) r; u8 {! d* `! R
CString strMdb = _T("Microsoft Access Driver (*.mdb)");7 r* ]' K& [ r+ O* v& G
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");& l0 m6 r( z: Y( |! N! N' |$ x9 d
CString strFIL = _T("Ms Access;");
. R- |6 B1 b; [& f( Y9 {7 j0 s7 _ CString strUID = _T("");# A) T/ D9 V' K% ~
( p* E/ c1 {# q9 E/ p3 k" i6 ^
5 q" N+ s2 n( L2 F
. H3 i* B* d7 p# v, j. R RegCreateKeyEx(HKEY_CURRENT_USER,3 G* ^% Y) [; o" t2 B I: Q
strMid,1 c# I) o$ a& a0 M1 f, Z7 s
0,
/ {5 g1 y- Y6 q% [9 Z# j3 G V+ K NULL,
, g) w* ]8 p4 V _; d1 H REG_OPTION_NON_VOLATILE, . J1 M; } n4 G* `0 l' }
KEY_ALL_ACCESS,
0 f/ ~9 Q7 _$ P0 w0 G NULL,
2 g. T- C$ g9 ^4 V- b! t& y &hKey, 8 h1 y3 U; O; P) Q' n8 n
&nLabel );//获取数据源键值句柄
3 N: m, Q$ w& q6 e6 I: }
0 {! s/ Z3 E& e RegSetValueEx(hKey, o4 U. A. `" P; W) }+ n4 h3 [
strDSName,# Z/ ?) q2 }) w; W+ L9 U4 @
0,+ x5 G- y: P6 k8 P
REG_SZ,0 t* Q7 \0 v2 j( F6 W
(const unsigned char *)((LPCTSTR)strMdb),% U6 f0 V3 v7 l5 \
strlen((LPCTSTR)strMdb)+1);///设置数据源类型8 ]5 m6 D& H' h4 X
- e1 B5 e7 p' x0 l/ [- } RegCreateKeyEx(HKEY_CURRENT_USER,
0 F5 g0 v P# ^2 [ strDataSource,1 o! x4 {$ m* w& ~; t
0,
; a2 \ k* z/ ` NULL, 4 f6 \8 v. ^$ x1 J) S9 _: ^! @+ r
REG_OPTION_NON_VOLATILE, + J1 A2 [9 ]) r, o0 `# i
KEY_ALL_ACCESS,
* v K& ^3 ]0 Q0 V NULL,' X$ S# Q% @3 ]" a% @& g' u5 k
&hKey,
& u6 E. D4 E7 R0 _9 ^% z0 O9 x &nLabel );//创建数据源子键
$ g, K0 y9 G0 p5 `% C
]: r# W+ Q0 O7 k RegSetValueEx(hKey,% s; ~% b8 v; R+ D6 Z
_T("DBQ"),
% M; \1 c$ s. E3 ?: M 0,
, P# s/ @: A0 |0 s# ~: L, x% d4 e' R REG_SZ,, J( y# S( F: `7 H* F6 Z5 {
(const unsigned char *)((LPCTSTR)strDBPath),+ B6 z$ k7 H7 q9 V/ W" R ]
strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
$ [2 Y$ ?; ?; e2 L
& P2 C/ f4 I: V/ R) V: [8 ] RegSetValueEx(hKey,
* n& Q8 p) e P/ u( v8 |$ g7 K _T("Driver"),
+ B+ X+ m: R/ G1 Z 0,: t0 ~3 k. M: E) I+ N7 ~2 S6 F
REG_SZ,
3 a. C ?7 c" J0 ?. D (const unsigned char *)((LPCTSTR)strDBDriver),, O% l" b5 f% F0 x& i2 R( ~2 y0 i
strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径) h3 \( v, {! f1 u( S& m
5 ^2 p$ r0 `, x# p6 W! B; P RegSetValueEx(hKey,; h2 W- T- S- s/ O
_T("FIL"),
( i% X4 ]/ P7 u; f! ]8 J! y. v 0, v8 I/ \- E2 P1 m8 @
REG_SZ,
9 D9 u" ^' e+ k3 Q7 e+ b: u (const unsigned char *)((LPCTSTR)strFIL),
5 S, U8 }* s# s& E- w- P B strlen((LPCTSTR)strFIL)+1);//表的类型
- \- h% u2 N7 I$ y5 `5 S) W% o9 w8 i& y: _; \' ?% ^- n
RegSetValueEx(hKey,
; S+ O& X- T. ? _T("UID"),
( d% k4 m' C" B2 R0 J 0,
6 E" {3 u5 m% Q REG_SZ,
5 k. ^+ N& F u4 Y( F (const unsigned char *)((LPCTSTR)strUID),0 G# n4 ^3 `( p9 ^$ W; q7 C
strlen((LPCTSTR)strUID)+1);//必须项
* ?! v% i0 p1 S; q8 G. g* Q9 w& J3 i( d
# J- m' `# q2 G2 G. w0 e
DWORD DriverId = (DWORD)25;
- ~ ~: J) u% g6 `0 ^ RegSetValueEx(hKey,
6 ], S, \1 E- i N+ d. { _T("DriverId"),
7 t2 E; F. I7 m) b 0,0 b7 U4 k' I9 @+ c2 ?- {9 T- A
REG_DWORD,
! y& M5 W4 M1 U7 k( w (const BYTE *)(&DriverId),
7 Q. w7 G0 Z- R' w# e* M sizeof(DWORD));//必须项2 E/ P. A) Z1 m: O! X4 |" i0 c
/ y. J7 j* O6 X1 \0 _& l
/ s+ `3 k! f0 t/ L8 F DWORD SafeTrans = (DWORD)0;
) [0 B; ^- t8 c* v; ^& t: D& p! D RegSetValueEx(hKey,/ r' s% ~' g4 h8 O
_T("SafeTransactions"),
# C. A" L( J2 I" d7 P5 m 0,. s6 @" E: `- D8 V5 J n5 C
REG_DWORD,
- ^1 y8 |' s! Z7 V (const BYTE *)(&SafeTrans),
( @: O% Q8 g6 R; g sizeof(DWORD));//可选项; L5 U! ~: E6 P" p( N) G m
}
5 |" F- h7 B( B2 {* o# Y9 n
, G* l5 U' o) f% w1 q 4 p4 a2 c* G* X6 r% O" R
4 a4 N" F, l3 D3 p3 c
调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|