|
主要代码如下:+ d6 w7 z# h. D% w3 y+ r
$ B: p' k0 W) m5 B; ?void RegisterDBSource(CString strDSName, CString strDBPath)
; `% h# X6 ^! `+ {9 Q{
- R; K$ b8 K$ n% ^; q u HKEY hKey;
/ H7 H, U, p1 N DWORD nLabel;
: y2 H( F+ p+ L6 |! O. f+ e( W- Y5 b# \2 X$ I
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");1 ^* e6 D# s' M" R* N
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
1 J. `. F0 f5 P# p( z- t" u. I, j' Z: ]
if(strDSName.IsEmpty()) return;- m2 \1 [% Y4 f, k( t
if(strDBPath.IsEmpty()) return;' j) h3 F) Y* r. k
' Y2 y4 p! \, D& {; s CString strDataSource = strBaseKey + _T("\\") + strDSName;8 L9 B, l/ ]0 y% z! ~! E
1 K: Z6 V& \' p$ J2 d, l2 H! i CString strMdb = _T("Microsoft Access Driver (*.mdb)");# Y: l5 U! X$ V9 F) V, Y7 t
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");) x0 s* R% o/ d9 M" w6 L
CString strFIL = _T("Ms Access;");" K3 D. ^5 A: `+ c" e% a0 }
CString strUID = _T("");
/ L0 ~2 z" f1 P8 `2 B: h% [4 y/ ]
; w4 V3 G# ^: g( o
N) M" o& ?$ g; s0 E0 L RegCreateKeyEx(HKEY_CURRENT_USER,1 m/ J, k- w1 W2 ` o
strMid,2 T" _# o8 g0 U; \5 c% Q
0, - B# q4 A. E* M, h! T, o, p
NULL,
) I3 v6 e: p# J* U6 ^ REG_OPTION_NON_VOLATILE,
# Z+ `0 O! p+ ~4 Z0 z" k9 D0 S2 k6 o KEY_ALL_ACCESS,0 y' C- v0 V) `; j; @8 D
NULL,* ]# o/ S( R6 e6 G7 L
&hKey,
% t' e3 D' g8 A0 m% L) M" q- f5 t1 W) B &nLabel );//获取数据源键值句柄1 g+ _) |& K' p$ W" o
& B; l' R( V; b; g- T: F/ n: `0 s: d* L
RegSetValueEx(hKey,( O, }( j9 L, L* N: Z8 Z$ b" u% W
strDSName,! x& p- z8 f: R* O9 y& v: e+ z
0,+ s, {- r" S* x" L: L
REG_SZ,7 ^' J0 M) P) `& T1 x+ {
(const unsigned char *)((LPCTSTR)strMdb),
4 i; e; o; P g7 g strlen((LPCTSTR)strMdb)+1);///设置数据源类型
( p* A! F: j+ L3 S y+ ?6 F/ i" k+ ~8 V3 {5 n. n
RegCreateKeyEx(HKEY_CURRENT_USER,
+ W7 ^5 ?& S1 R, x* w6 l9 E$ u strDataSource,- E3 c* n4 c5 k8 I7 }
0,
( j+ o& s7 Y) [" _, X NULL,
# |3 T0 K) o/ C# j REG_OPTION_NON_VOLATILE, ' P7 M/ z0 ^& r- Y# L0 V5 ~9 B
KEY_ALL_ACCESS,
! M! e& m9 z7 q, S NULL,/ B7 ]( P9 n$ P* {; @* I, z
&hKey, " ?9 R" J7 S, `6 Q# @ \# \
&nLabel );//创建数据源子键
$ i- ?1 m% c v9 _; w1 Z# @ Z. q. z: z4 {& g1 G7 Z# q: B
RegSetValueEx(hKey,: n; I- L$ N" d' k9 Y
_T("DBQ"),
: U( R) d8 ^* ~. t! M* ` 0,: u) u" J- K2 ^
REG_SZ,9 G3 J5 w, A+ k( A
(const unsigned char *)((LPCTSTR)strDBPath),( ~- y. B$ w9 @$ _+ L
strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径4 j: l! q' @- z; b" i" n
" n, L8 \) G. T _4 Z7 ?/ d RegSetValueEx(hKey,
& d3 p6 x& D0 S8 J ]2 v _T("Driver")," b+ @7 K$ \2 _; R
0,/ |* H' {4 g" m3 `8 F1 g
REG_SZ,
9 V) y: p' g% \, V (const unsigned char *)((LPCTSTR)strDBDriver),: P+ Q9 M& G5 Z( h* {8 {
strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
! c6 _' s7 H- H& w+ {8 f
% Z( q4 b2 ^( g. }+ g0 d9 C- F RegSetValueEx(hKey,
4 z; f. o$ E: T* b+ I# n5 x _T("FIL"),9 @) E! P3 P1 O! h
0,6 L; @, U9 T. l: k
REG_SZ,
# M/ M3 t/ c& h (const unsigned char *)((LPCTSTR)strFIL),$ |6 d* \" t/ D+ s
strlen((LPCTSTR)strFIL)+1);//表的类型3 [6 I9 Q0 Q7 ^) w6 l
' e, R7 Z3 F5 @- B% U# ]' ?: s' p
RegSetValueEx(hKey,- z9 |. o! a: ]
_T("UID"),
( H/ }$ l/ V: `9 a2 n0 \ 0,4 N+ N& N+ O* |$ p
REG_SZ,) P8 r" i1 e: d. d# l5 y
(const unsigned char *)((LPCTSTR)strUID),0 ^, v/ ^+ m- P- \! c
strlen((LPCTSTR)strUID)+1);//必须项6 ?! O" ?2 X% C0 h& _3 R
+ y# X4 G8 O7 F; j. G. l
( z2 z1 Q! N. B* p DWORD DriverId = (DWORD)25;6 B6 S/ t) x, c/ S- V1 f
RegSetValueEx(hKey,
" }. V+ Q6 |5 Y# f9 R _T("DriverId"),
4 U7 m' h8 n0 {7 ~" D 0,6 l' y+ y) Y5 |6 G( e2 @
REG_DWORD,4 l( \: e( W' q9 Z; J" \+ D
(const BYTE *)(&DriverId),+ Z) u0 k8 ?' F
sizeof(DWORD));//必须项: p7 p$ [, j: j! }2 R' e, R% P
7 T: t2 K/ g( i! h/ T! M0 ^! q9 [3 T) v9 D: L/ R f2 k
DWORD SafeTrans = (DWORD)0;6 ~! b! W# q% H# X/ ]
RegSetValueEx(hKey,% K; H2 t" D5 h G2 g
_T("SafeTransactions"), Q* v1 c b9 Z% O- @$ \, T
0,
! e% I# L5 y3 G. M) d: H REG_DWORD,
; K' P* ]* Z( W8 L' X, w (const BYTE *)(&SafeTrans),
# q/ s- d$ v- f$ F {& t sizeof(DWORD));//可选项
# k6 t: h: e r0 a}. L6 J0 n( n ?7 a# z9 h
% X; g: W% S0 v$ M9 f* S# G
( o# A1 z. g3 Y$ _! E
& i: F$ n8 p2 n; Z; @
调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|