|
|
主要代码如下:
+ x' u6 I! p; s; @0 t9 `0 o" b& o+ s/ i( y' l) _
void RegisterDBSource(CString strDSName, CString strDBPath)
8 `! b7 k# N9 G( V D% J{
c. Z9 c8 C, ^& I% _9 H7 V HKEY hKey;2 q2 g( T/ j5 V# }+ M; X
DWORD nLabel; : C7 M, S$ E% O6 M
9 ?+ c0 o0 C0 x5 f7 I- N& Z+ R CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
# i% Y4 f4 Z. x; C2 e CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;5 L) N& f" W: t
5 d( H3 a# V) s; ^, C e6 }" ~8 h. L* s% [9 O if(strDSName.IsEmpty()) return;
; Y% p L! J( Z0 W, G5 I if(strDBPath.IsEmpty()) return;6 p3 t) s6 D) a# B- S* E
) u0 O8 w" P) Y- ?4 D
CString strDataSource = strBaseKey + _T("\\") + strDSName;. x3 X# m- g1 v: B2 ~( e8 G& R
8 |( m1 E2 H& j' V) m CString strMdb = _T("Microsoft Access Driver (*.mdb)");( x9 Y) ^. c! |
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
/ \3 R+ w' k. P8 G/ g+ t CString strFIL = _T("Ms Access;");
1 ^+ J. W( ^( U% b1 b( i CString strUID = _T("");
+ _. D- D! U/ U0 I8 \' @7 D9 O
+ c+ {0 j% g% K6 d, V 4 |8 i6 b* v: _
. R0 b+ Z, W, x' ~* V
RegCreateKeyEx(HKEY_CURRENT_USER,
7 B% k3 ~& v( K; r( Q7 I strMid,
, J& G6 r' U$ N$ g& W# L 0,
/ |( {- W; q4 x NULL, m5 [* @0 e% K) \9 N: n" b/ M
REG_OPTION_NON_VOLATILE, 1 K4 W. J7 A3 R9 O& D" Q
KEY_ALL_ACCESS,
& Q" U5 R" y/ L( N! s* O- h NULL,
d! }5 z& K3 D z& k &hKey, 5 k. h+ [$ o7 M* F( [" z
&nLabel );//获取数据源键值句柄" L. T! |+ @4 x- e" d( p
9 k, C; m0 v2 G( M. n9 M* o
RegSetValueEx(hKey,
8 f& y P/ t; L, ? strDSName,
& `6 b- W; ?0 U6 U% [& B0 }2 L 0,
- x! M: l/ f# a REG_SZ,
: G5 Y0 J) K+ g1 l (const unsigned char *)((LPCTSTR)strMdb),6 g0 C9 o* W8 D1 e
strlen((LPCTSTR)strMdb)+1);///设置数据源类型
7 j7 e3 B$ _+ a0 O$ l2 J6 }; v2 s" G
RegCreateKeyEx(HKEY_CURRENT_USER,
: {8 l5 T$ r5 S7 }1 B6 G# _4 o0 ? strDataSource,# `3 L+ I; T7 W
0,
, i, w) t8 W& _- }* ` NULL, ) ?: a1 P3 e6 A' }
REG_OPTION_NON_VOLATILE,
; k8 d$ O& O4 J KEY_ALL_ACCESS,
1 U) |2 w2 z3 Z+ B+ [; }9 `, B NULL,
( l& u' c) q5 T: K6 ^3 b &hKey, 6 v0 y4 r- o& {5 W/ ~5 f1 A
&nLabel );//创建数据源子键
) D4 O9 u) `8 r+ c* [' |* f* X3 T: c! l% d C
RegSetValueEx(hKey,
+ F5 }# m, n p" X- {8 c% } _T("DBQ"),/ q! m# e! _) I; u
0,
! [! o! C" F6 w6 o& u REG_SZ,
0 p2 m* n. p5 U* `' V( W9 P* l (const unsigned char *)((LPCTSTR)strDBPath),
( d3 I7 h U- O2 l! z- h strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径. ^- F& p/ j) n+ |( S0 h0 Z
`- t b4 @5 k/ O7 z
RegSetValueEx(hKey,# h+ Q0 V$ Z! N0 n
_T("Driver"),
4 D3 z3 L1 D6 j- T4 ` 0,
" @- E' t% T9 y9 F REG_SZ,0 |2 y! _# B$ s# n$ k
(const unsigned char *)((LPCTSTR)strDBDriver),
* _8 g4 W( E; {/ C! s9 g# ?1 {% M strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径" r0 N, {$ x6 M/ l
5 _' m) g9 u! ?5 v" s RegSetValueEx(hKey,4 }9 x6 C0 @7 L/ I5 m l" d+ @) x, u
_T("FIL"),. l2 g8 t% y6 v4 S
0,
& S% I$ K. R0 n$ g1 H2 Z. G. A REG_SZ,+ A9 n# V! `: K) n3 @$ o5 U
(const unsigned char *)((LPCTSTR)strFIL),5 m9 ]+ G3 j0 [' L R% G: [2 J
strlen((LPCTSTR)strFIL)+1);//表的类型
% E9 p3 [3 V8 z% ~2 v. k
( g# w- S( n* R' j v RegSetValueEx(hKey,3 T9 i- D: v& U
_T("UID"),( w4 J9 _& D& `
0,/ z' H2 N) V" F% X2 m
REG_SZ,
3 q) N# N7 n% q0 o% h7 n (const unsigned char *)((LPCTSTR)strUID),, p$ W8 S7 P3 A" w* }6 z1 M0 D; D
strlen((LPCTSTR)strUID)+1);//必须项
- g% P- {* T) R; O0 r, p2 y! E: s. I: q- {. J( k' n' E) W
* |: g4 v: e- {' V* o) q; y
DWORD DriverId = (DWORD)25;
2 f( F; i! }4 n9 X' Z RegSetValueEx(hKey,8 m5 c3 z C; }( G( d% s
_T("DriverId"),
1 T" l. l8 a: f/ u 0,
4 Y( L8 x" s4 {# [' @ REG_DWORD,
2 h1 s! `5 z' e% Z+ d (const BYTE *)(&DriverId),
$ X+ w* h/ g' j0 l3 w9 U. Q sizeof(DWORD));//必须项! _# c: c: u6 l! x+ z# S, V
P6 t' b# Q. i" [) ?5 j R* X; U
1 T# u6 d; M; _
DWORD SafeTrans = (DWORD)0;5 R4 i# k9 z2 Z9 k$ L9 \0 }
RegSetValueEx(hKey, t; g( X' s7 E8 v! \. P, U1 a
_T("SafeTransactions"),
$ p4 f- o: U/ T 0,
/ V6 {' w& O6 z" S2 A REG_DWORD,7 M7 Y1 N. L0 B
(const BYTE *)(&SafeTrans),
V3 a2 r4 ]8 d+ N9 n' u sizeof(DWORD));//可选项
4 ?8 K+ b4 V, j D3 N- g4 f. `}
& H7 K2 A" T( t9 x3 s$ x( D9 R
; C, B) I4 W# b. l5 l ' N/ I- X- E* J8 R# h0 L( k
3 N1 N4 g* Q6 W, ?9 E调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|