|
|
主要代码如下:
8 ]5 C- v5 N5 `$ z. f
6 C- D x4 J% d. Qvoid RegisterDBSource(CString strDSName, CString strDBPath)5 v* l' `8 a% k5 R' I& ]
{& H j. w# |) e/ U7 t$ q1 l
HKEY hKey;
* a" e4 j, L9 ~ DWORD nLabel; : O* t1 X3 b9 i" V! `7 m$ b* L) `
2 [7 X* i- Z3 e+ l! a CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
! c; H6 p8 V! j+ S. E! E CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
8 F" V& V+ o$ J0 Z3 V K- F
* C3 D6 M, N& t' V9 m( [% h, q if(strDSName.IsEmpty()) return;" j3 n+ p; k- g: ^0 K5 F" D: e/ l0 ]
if(strDBPath.IsEmpty()) return;
8 f: n' T z- {; t' \9 U! J6 c$ ?+ Y
CString strDataSource = strBaseKey + _T("\\") + strDSName;& R( L) D2 Z. C8 m
- o# a, r1 W& [5 B9 d
CString strMdb = _T("Microsoft Access Driver (*.mdb)");
3 Q+ `% D+ `# x! v' _ CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");+ a+ i/ i J6 I9 T* H
CString strFIL = _T("Ms Access;");5 t8 ^! m9 p3 t' R
CString strUID = _T("");, I- t5 H; Q* [& y
6 G' A8 G1 h3 R$ S * I8 ~! g' m' Q, n
7 _" e/ i9 ^8 p* B9 T
RegCreateKeyEx(HKEY_CURRENT_USER,
1 W1 N8 A6 ^9 U strMid,$ G, @' H. G; Q8 g9 P/ R
0, 4 x# K* F# m6 h. e
NULL,
, J. g! _! R8 e: ]' ?/ _. s REG_OPTION_NON_VOLATILE,
% V$ ^( u8 ~2 j0 k$ O/ {/ X KEY_ALL_ACCESS,+ s) A% C/ o* P) W/ m
NULL,0 A6 H2 L% |3 A J' O
&hKey,
- |. p4 W/ s' _) j# ~1 v, h- I9 L$ C/ e &nLabel );//获取数据源键值句柄% D$ m. y! Z3 g2 c' p& t0 }3 X
: j0 y. o6 n, J: {
RegSetValueEx(hKey,
- T1 v/ Z; M- S; o } strDSName,
% e8 L: `4 V: {; B% g! [5 y 0,
% y: s6 t1 ] Z/ g/ a1 w REG_SZ,
5 r- B) z5 B7 | l' o0 c0 h$ j3 p* U (const unsigned char *)((LPCTSTR)strMdb),+ u6 `0 k! v% E1 c8 q: z' ~ f
strlen((LPCTSTR)strMdb)+1);///设置数据源类型
; _. G1 Q. x8 j* }. P9 X% Q! z( o$ H# ~7 D# Q8 b, Q% h* w- P
RegCreateKeyEx(HKEY_CURRENT_USER,
- C2 W/ g! F$ `# y- V0 _ strDataSource,
y$ K7 W- ?/ s+ y8 R# |( {$ } 0,
) a9 S4 W6 j, a3 M2 J NULL,
* I" z1 \% \0 s0 @# y# {1 r; B6 v REG_OPTION_NON_VOLATILE, # {2 D4 x) _2 a6 U
KEY_ALL_ACCESS,
' H) y( A6 n8 j3 X NULL,
' x, _6 p: ^" P8 S9 A+ a &hKey,
4 `- t# `( \$ H/ A/ t( i1 ^, c &nLabel );//创建数据源子键8 [, K! U& `3 z# \0 Q+ e7 z
8 M6 Q! J3 F. ~- W \
RegSetValueEx(hKey,* Q, O3 n4 e/ l; c, z8 S k
_T("DBQ"),. U/ _' Y/ \; b8 ^" d0 v3 Y1 B! q
0,
2 R9 _: W4 [( c) ^ REG_SZ,4 s7 u+ b `- |- ~) ~
(const unsigned char *)((LPCTSTR)strDBPath),
# {% J0 H- b. S strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径9 E' I9 G( Z6 Q4 w2 f5 z4 _3 @% a# _
$ ` Y+ {: A+ X% _, u RegSetValueEx(hKey,& p7 G+ t- q3 _% h1 f8 H' E9 R9 g
_T("Driver"),( y+ y' F% _" D/ H) o8 Z
0,
; e. C$ s, B/ M% N6 A REG_SZ,
" y% W7 l- N9 q (const unsigned char *)((LPCTSTR)strDBDriver),
" b( p0 {4 z6 ] Z/ s3 _: @1 R strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
1 @$ i! r( i) q
5 x0 q1 }# I% X' h7 E5 \" |. x RegSetValueEx(hKey,
3 h, u5 @: {: ^8 u' H _T("FIL"),! T; Y2 Z: s# ^: S& A0 y% }6 p
0," P. s( g0 |* L. k& Z
REG_SZ,! r5 e1 p; Q _) L
(const unsigned char *)((LPCTSTR)strFIL),0 l2 [7 {! }& Q* U" i0 v8 {
strlen((LPCTSTR)strFIL)+1);//表的类型( p1 B2 ^$ w% i1 q6 m- i" r9 q4 d
7 P( y0 }1 ^5 p: @ RegSetValueEx(hKey,
: D; s0 Q/ H( w _T("UID"),
# Z& u: D. J3 e 0,, u0 |5 ^8 K1 f" f/ T6 j
REG_SZ,
: C: I2 m# q B (const unsigned char *)((LPCTSTR)strUID),
- _) Y/ ^+ z0 H' U: F strlen((LPCTSTR)strUID)+1);//必须项/ u3 d: ^: g, d4 b0 x* b9 ]
+ i* H3 ^# n, D* @4 L
/ ^8 E6 Y8 n' Q$ z( G) O; p& V DWORD DriverId = (DWORD)25;1 f( n: K0 H1 r4 w; j* v/ }
RegSetValueEx(hKey,
' p! E) ]% E/ X2 W _T("DriverId"),9 @1 ]" Y; V0 \- o& y! Y
0,
% R8 t8 Y K) d0 z# l) E1 k REG_DWORD,6 k8 ~! O" Z, K2 n5 e! M4 l8 z
(const BYTE *)(&DriverId),5 }6 l: i* T" G7 H1 G) T
sizeof(DWORD));//必须项
/ |: U: V( U$ J4 L u- ?5 X# e
( o4 L w+ ^7 [, l6 M$ L2 s5 i% s
$ N6 n. S: w* X' J) P1 O DWORD SafeTrans = (DWORD)0;4 y$ h- d& K% R( o. v
RegSetValueEx(hKey,* ~5 M- z- N7 L2 Q5 n' {( i
_T("SafeTransactions"),
% @( }! |4 r6 b+ P 0,
- U$ e% W c1 f! K REG_DWORD,* t0 w, @% |' g7 @/ `
(const BYTE *)(&SafeTrans),
( }/ U& S% C7 a# t& A1 ^ sizeof(DWORD));//可选项: T& R& T. A9 D$ I S5 m
}
8 `- k6 q- ]) ?) n6 M7 }# t
) C; q& \. ^! C
# q- {3 @# D: \, K% m: S1 B; h I8 y1 A. g' \& i
调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|