|
主要代码如下:% X( R# s) m9 w" k& B4 L, F# u
. {; y5 ]! D* I
void RegisterDBSource(CString strDSName, CString strDBPath)
1 z6 F) @" C" m{
8 Q1 Y+ J& r$ t0 d" ?/ U HKEY hKey;
6 k$ J1 V9 v/ x) D" c: S v DWORD nLabel; & { k: j9 a2 U
2 H/ f) ?5 X: ^$ {
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
* C; |. T. v! K4 E s CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
g r, g6 u4 d- `" _: |+ _, P% |/ z8 D( f% N! ]0 M
if(strDSName.IsEmpty()) return;% M4 A, z& \- \4 B
if(strDBPath.IsEmpty()) return;7 ^; h: p0 _- t k4 d
' u8 X. G1 t$ P( [8 c
CString strDataSource = strBaseKey + _T("\\") + strDSName;
, ]6 n1 c8 v3 B) t5 T3 _: h) ^! S
; V: j3 I0 P7 K' g" X8 L: D CString strMdb = _T("Microsoft Access Driver (*.mdb)");
' q+ D7 z/ W& O( n3 l CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");1 K( M- R/ n& _3 o7 i* h
CString strFIL = _T("Ms Access;");
6 h6 v4 p y7 l& g5 a* M) S6 q) t CString strUID = _T("");7 L- e: k5 Y; z9 _; [) Q
9 b8 x' N7 y, q- r 7 G- x4 K l* s. c) Y! J
" \9 Z5 r- U+ P3 @ RegCreateKeyEx(HKEY_CURRENT_USER,- B" U( Z' f5 _0 _! U, ]1 `4 }
strMid, |3 K2 @7 n8 k% X4 R$ i
0,
& f2 [7 G' E5 L/ }) E NULL,
9 {3 G/ W" m& }2 z" Y( a REG_OPTION_NON_VOLATILE,
9 F, ^5 I( X" a) _ KEY_ALL_ACCESS," r- \5 a( T1 j$ [7 q
NULL,
7 a% b$ @; I, V! J( B. s &hKey, 9 P& h) j# i0 v& q
&nLabel );//获取数据源键值句柄$ H$ Y; W0 X6 e. A) i3 Y5 f, {
1 n0 O" u+ g% J! T# h- r) \ RegSetValueEx(hKey,
) y3 r$ ~0 O- K/ y! ^9 i4 a" u. N strDSName,9 X' J" W' h0 u5 ]3 f
0,
' {% b- f q! g6 b8 T# P REG_SZ,
, v" e5 N9 p1 e3 w0 m- u0 u Y (const unsigned char *)((LPCTSTR)strMdb),
) e0 h6 E4 U9 S strlen((LPCTSTR)strMdb)+1);///设置数据源类型
1 B/ n9 C. g% U4 O+ |4 k
3 A4 A2 _9 f: e* ~1 l9 @# v, i3 ^ RegCreateKeyEx(HKEY_CURRENT_USER,) f/ E, j; o3 Y
strDataSource,2 T! |& }3 j0 w; q: W4 I0 I
0, " R" t- b: n# Z. m5 ?4 p/ l2 T
NULL,
1 a) L' \6 W- V1 D REG_OPTION_NON_VOLATILE, & n% n, @# O8 E8 f
KEY_ALL_ACCESS,
: h8 X3 J, y6 Z NULL,
* L3 ~7 P* ~9 R &hKey, ' U5 R- w0 R) W7 t& {# f# M3 ]
&nLabel );//创建数据源子键, U- h% P: _' b/ `( T1 [5 D" z
' Q2 N* H& m% Q7 h8 g1 S" M
RegSetValueEx(hKey,
1 ?5 Q4 p; v; k; s2 X+ z1 y* } _T("DBQ"),6 d5 C/ U7 m+ N8 m. J
0, X, b3 @9 |! q" E. y1 [
REG_SZ,7 ~, z7 n9 Q8 I* K( ?3 |5 A9 |
(const unsigned char *)((LPCTSTR)strDBPath),
) C% I) q, _$ \8 {/ w, i strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
( F" g; H1 m; ]) S% J5 P* D2 J& b& p
RegSetValueEx(hKey,
3 D$ A# L _8 J# H( o; i! r _T("Driver"),
1 O% z0 q2 t( w7 z- v# M" F 0,. A5 s' O8 |0 E+ R
REG_SZ,
1 N: M; }, k: M+ _ (const unsigned char *)((LPCTSTR)strDBDriver),
) a+ f: w* Q- s% s. J/ X( [* x% h) D strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
: i, R1 Y9 U# w5 k" V
( p8 ?1 Q* D, K5 @* ~* ^ RegSetValueEx(hKey,1 `4 H# Y! c4 w7 M( a
_T("FIL"),5 B- i B" c. g7 {# A
0,
% v, R' x- @4 g# V REG_SZ,
0 f+ B, j; w* j' e: ]9 N* @ (const unsigned char *)((LPCTSTR)strFIL),
6 _% Z H1 @% u* c- z% h. \# @6 J strlen((LPCTSTR)strFIL)+1);//表的类型
" n5 K5 P: S: Y; r+ \$ \( x* t
% u- v- H$ f0 G RegSetValueEx(hKey,) X4 @& z' ~' b% L
_T("UID"),
# B2 M1 n( {. [9 f3 { 0,: n2 i; L. |: \
REG_SZ,
# ^: K8 `/ R) r- v2 {- E) [ (const unsigned char *)((LPCTSTR)strUID),
' c& U W3 z( C% ~ strlen((LPCTSTR)strUID)+1);//必须项
4 g" y. C3 {' @7 }, `3 r6 Z8 S5 H$ ?, O2 F. r; L
, I5 L, }: ~' X2 \% \1 G
DWORD DriverId = (DWORD)25;4 c; Y5 q7 p# E2 S0 |' J
RegSetValueEx(hKey,
/ i$ x+ s2 o/ X6 s: D _T("DriverId"),
( W4 a1 }9 L# }, Y 0,
* a/ ~* T2 F$ E( Q' ?6 }1 @ REG_DWORD,
, V4 \6 ~) s, U5 D+ {: A (const BYTE *)(&DriverId),! o' l$ r8 K3 Q2 J9 C! ~9 ]' x1 B
sizeof(DWORD));//必须项
2 }1 [2 Z+ r. q; s/ C 6 C8 b N0 x1 I# n3 f5 B; f
) B! z9 r5 B: ] r5 B
DWORD SafeTrans = (DWORD)0;
: w, u+ Q+ x% s6 M4 e- E# V RegSetValueEx(hKey,
/ @& y+ f; Q" ^' ^; q; ?# E _T("SafeTransactions"),
# o: x; K. c8 W1 n 0,
- S4 @5 J7 M, ]* E REG_DWORD,
3 `7 z/ J+ I P* @# Z (const BYTE *)(&SafeTrans),: G" d0 b/ N4 h
sizeof(DWORD));//可选项
& a+ d$ K' I# |}
|: X; r5 Q$ y8 C! u) g4 V9 k, c4 G7 @( `& j" P
3 ~* z; a5 ?' z7 A- p
$ t3 f4 L4 [3 V- O调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|