|
|
主要代码如下:7 S( h. J0 z; |& y3 p
, T% {8 ?+ Q6 Wvoid RegisterDBSource(CString strDSName, CString strDBPath)
9 I5 F; d. ]$ C# c2 L2 N6 [; d* }, _! _! I{
5 q9 y7 p; y1 p9 X HKEY hKey;
/ [& M) `+ b! X; l: u DWORD nLabel;
N9 _! o8 i# k q/ K! B3 V8 y4 a' q( g0 G: z0 [/ L
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");* x0 Y7 U' d. ?% I
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;; a4 T! u k8 f# Y% F
. F8 j2 I) B* n: u if(strDSName.IsEmpty()) return;
; T: o8 L4 Z# r+ U8 [4 T if(strDBPath.IsEmpty()) return;
+ @8 @1 z3 ?6 T- k3 l$ m) d( d; N0 H5 _
CString strDataSource = strBaseKey + _T("\\") + strDSName;
4 b1 x! m9 ?/ M7 A* S2 e3 F8 ], m9 Z# \
CString strMdb = _T("Microsoft Access Driver (*.mdb)");, y# D G( a9 b/ A' n( t7 x2 ~
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");( w6 W; }+ u" y! n( O: H2 q
CString strFIL = _T("Ms Access;");: K( F$ l8 t6 k4 D
CString strUID = _T("");& c$ X8 w7 [/ g/ G! r
* y9 R! M! h0 z, h- F# F
! c; L |7 c1 e, V+ N! S: b. l! X; E ?( |* y
RegCreateKeyEx(HKEY_CURRENT_USER,
: ?0 ~! d5 M( e* ?# z strMid,9 z7 v/ n3 }" X& H1 P
0, 1 O+ D: x3 Y4 K0 J4 ^
NULL, ( O2 n" p5 M' S. M
REG_OPTION_NON_VOLATILE, 0 g) I; I9 d! K5 A& `2 r6 W
KEY_ALL_ACCESS,( f9 u6 Q) [, ]' @1 z
NULL,
7 V) A: \4 @' X2 z5 a7 q7 E &hKey, 6 H) S% s, e6 b' D" ?9 u
&nLabel );//获取数据源键值句柄
' _' w4 r& C1 Z. e9 x) r
* I6 s g' N' V. c& S* a1 ? RegSetValueEx(hKey,. r3 \# S _+ h6 X7 X( \# `6 T
strDSName,0 T% e( m- A& e* J7 v5 Z
0,
! G' f, i1 G4 r$ n! \/ t6 P REG_SZ,
9 b, ~( f8 `/ _- U- _ (const unsigned char *)((LPCTSTR)strMdb),
! M" y0 q9 ^$ m" g& ?7 p' ` strlen((LPCTSTR)strMdb)+1);///设置数据源类型2 _$ o3 ^" S' |$ p
2 s& K. ]* f: z
RegCreateKeyEx(HKEY_CURRENT_USER,
7 Z* n" z5 L& o& }" [+ o7 k strDataSource,) n2 c- Y* C+ [
0,
- `8 y# z( z a NULL,
+ W; z( L1 L( W0 x6 h! m REG_OPTION_NON_VOLATILE, 6 @/ u$ n: t- r: O' }
KEY_ALL_ACCESS,
8 b% d) l6 A( T: h7 | W& ] NULL,
/ |, }1 s _( G1 a1 P &hKey,
; y$ @% E' o! F8 o1 U4 u; O &nLabel );//创建数据源子键
; F: p4 _/ V# h* Y
2 W0 F K; ^7 X- t0 U% y RegSetValueEx(hKey,
6 k' c/ Z5 Y& k3 Q; d8 u% [( k _T("DBQ"),; g. }* B6 S' [- h. g4 }
0,! _* K8 k8 X& Y e9 @# C
REG_SZ,
: c7 \; V# @+ M1 b) C# @ {2 | (const unsigned char *)((LPCTSTR)strDBPath),
+ N! y& h I+ M! N1 W+ V8 _ strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径" A+ @3 ~ p7 ~ w9 [, B
$ L: `. Z* N& }" {( R3 O" r0 h3 K RegSetValueEx(hKey,
7 k! S* @5 \4 i& G _T("Driver"),
' |' L5 H3 Y% |* t) M 0,
7 K# j9 O2 X, e0 e4 S# k REG_SZ,
+ [. z* {! }" H7 f5 o* ^; \3 G v (const unsigned char *)((LPCTSTR)strDBDriver),+ c6 X' r6 C7 a: n
strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径# R; h) i2 e( A- T5 g' S6 k
- s( \- I9 W/ S* W# f8 Q; d; u( J3 j RegSetValueEx(hKey,
) G! L' R) p* w& T _T("FIL"), D V" g+ t0 y4 K" B
0,
. ]" R( g, C r' r: f2 G& Z/ T REG_SZ,+ H- s. |! `; d4 L& c# f6 _# I% o* } A
(const unsigned char *)((LPCTSTR)strFIL),
9 Q0 G3 C m$ h" y- e strlen((LPCTSTR)strFIL)+1);//表的类型
$ i+ Q5 ? B: W' f b6 y; K" Z2 K: U g0 Y
RegSetValueEx(hKey,7 v. Y' U* Q. o& Q3 m {
_T("UID"),
+ {+ d, ^1 `& ]% O1 a% r6 L 0,' D% S0 \8 n& p6 W/ ^5 ~
REG_SZ,
9 m. W0 X6 \# Y! w+ D (const unsigned char *)((LPCTSTR)strUID),
5 w: P2 G# ^6 Y7 w strlen((LPCTSTR)strUID)+1);//必须项
0 G% w- h9 u9 q- s
; O7 I, H* O8 a& o2 A2 s% d1 l; j9 E6 j
DWORD DriverId = (DWORD)25;
6 @5 M' l) c5 b, k- {1 R- z RegSetValueEx(hKey,/ l a% _! d; l8 r8 N% V& X% b$ X3 H6 d
_T("DriverId"),
2 y5 V$ I5 g1 {0 R2 k6 U 0,5 u+ H/ j% v4 x! `- T
REG_DWORD,- g, [- u& O; b* n
(const BYTE *)(&DriverId),2 C! n5 s( L/ W6 C! S
sizeof(DWORD));//必须项
6 ]% W; b/ B7 U1 [ $ \" D/ B% z: Q* y& n7 H9 n' U) }
. _( {: P! I5 ?( }
DWORD SafeTrans = (DWORD)0;: ?" S+ N% a& f6 P
RegSetValueEx(hKey,
9 Y z: K( K* G& c5 F! V! f1 a# m& ?& ] _T("SafeTransactions"),2 o5 ?3 H6 Y4 @1 M) Q+ j8 Q
0,3 \, H+ w& o- o' @& g1 q' V
REG_DWORD,' N+ R9 R% Q" v$ u# a _8 l
(const BYTE *)(&SafeTrans),9 [1 s& b/ L- n4 U( n6 L, _
sizeof(DWORD));//可选项8 p# `. o7 ]! B* o( _
}7 u, Q4 w: o7 m0 k5 v
: ~9 t5 t6 D0 [5 L1 X# F. \4 |
- l2 _: V% b" m! H9 k6 \( Q' [& `+ @' ]& _1 Q4 y& b. _
调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|