|
|
主要代码如下:
, e( j o% ~5 p9 y8 j
. I7 p# {- G2 v; n) m% U4 m5 @2 Svoid RegisterDBSource(CString strDSName, CString strDBPath)
7 u; y1 P* z+ P" y# Y* w5 o{
' e4 c& C/ t" e/ u HKEY hKey;
+ d) T8 c1 V6 i: k, M& V DWORD nLabel;
0 y" N( x8 `8 t9 ]1 O; ]
3 g+ @9 k2 m6 ^% m CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
6 C1 f9 f+ b. A# }) a7 A3 f1 f CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
3 n: k6 c' @9 d# v; l) ]
2 t% H/ u: |) M& P/ u8 g% `2 c if(strDSName.IsEmpty()) return;9 Z4 n ^- V; Z1 `& s. n4 v
if(strDBPath.IsEmpty()) return;
/ D: n5 }! b/ t6 c6 G2 b* U6 {; m% D; P3 ~
CString strDataSource = strBaseKey + _T("\\") + strDSName;
" I' I2 G2 i7 o) q9 r8 Z7 u# w# e. M: ]0 E1 D$ F3 \8 i
CString strMdb = _T("Microsoft Access Driver (*.mdb)");
$ ?& z) `) s( M/ b" G CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
, L7 D, N. ~4 X3 U7 J" q CString strFIL = _T("Ms Access;");( V" D$ o# F+ `- @' e: T
CString strUID = _T("");. Q; k U: I9 H+ q" d
; M: o- |/ e/ Z! h
) u( g7 H V! T' q* Y
1 s: C* k8 L3 G+ [: H# j
RegCreateKeyEx(HKEY_CURRENT_USER,
3 r6 r1 A0 O; W# i. L strMid,% k& K. W# S$ W
0,
7 e3 \; F' e1 s# T! C% I NULL, 0 e, a* [- \7 X
REG_OPTION_NON_VOLATILE, ) p1 \( r. m) V1 @9 K
KEY_ALL_ACCESS,
3 w+ \5 Y" } E* M$ t NULL,; a/ |+ X8 O# y
&hKey,
; `& V9 | N/ D) V0 N) z, Y &nLabel );//获取数据源键值句柄
t" `0 a! E, E/ J& y+ O. E
2 {: s8 d1 L# m$ v' ^ RegSetValueEx(hKey,
v/ {2 t7 Q, B2 \& |8 Q strDSName,
1 e2 {+ h, j3 |" r 0,
0 z' S- z M6 ~. G. q, H REG_SZ,4 r3 V. P/ ~9 s3 S
(const unsigned char *)((LPCTSTR)strMdb),
3 y) `8 T7 P, g) _ strlen((LPCTSTR)strMdb)+1);///设置数据源类型
: C. q1 V; D; X, @: ?0 _* A
! W+ D( M6 }, ^ RegCreateKeyEx(HKEY_CURRENT_USER,: L% ~4 D* s. h) z( l5 w& z i
strDataSource,
. B% [. a/ H7 _ @- T 0,
/ T( b! k4 K# f, D2 f j NULL, ' d* X. e4 a6 I+ j0 i( c2 V6 o
REG_OPTION_NON_VOLATILE,
+ W; s* y# v; M7 {9 r KEY_ALL_ACCESS,) d4 u* h0 h6 z0 I7 F% u- y
NULL,
. |8 Y+ \) {& B7 e4 K &hKey, |: k5 T, G; i' e- |# p
&nLabel );//创建数据源子键9 o& y+ v6 s& ~- p
. T* Y0 Z1 e/ A
RegSetValueEx(hKey,
/ D: i; V2 [! g* K- k _T("DBQ"),- X) p7 d+ j- r
0,
: p9 ~' r' b# x9 \' ~) D0 O REG_SZ,3 F. B7 N1 y! P: f' e# b9 e' |( m
(const unsigned char *)((LPCTSTR)strDBPath),( }. {' [$ f# s6 N
strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径7 @% [- y9 a2 i% i7 J C5 i4 f
9 u' C" |1 x8 P0 E# i RegSetValueEx(hKey,
" `$ n$ F/ i' K9 r, t _T("Driver"),
& A: V! k8 [$ t" K2 \( ~* s3 U 0,- L- r0 `; t- [
REG_SZ,9 n/ @' P1 i3 v; s. u* _4 ?
(const unsigned char *)((LPCTSTR)strDBDriver),- s9 M+ D0 ^1 x" x" \
strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
' G8 p' w: z( q( R- r
0 V9 Z; ?' G: c RegSetValueEx(hKey,$ }% T" U/ B0 t! x
_T("FIL"),! p4 g& j/ ^# C2 A' |2 C7 c
0,, W+ T& b; Q. g
REG_SZ,/ y+ t8 J, S+ r
(const unsigned char *)((LPCTSTR)strFIL),
( t( t5 ?1 A5 y# E7 X: j strlen((LPCTSTR)strFIL)+1);//表的类型: k- ~: W- L% E" F4 r
! \2 f8 f ~" A; ~4 V RegSetValueEx(hKey,& ~) w1 C& n4 F
_T("UID"),
7 g+ x# S5 X1 y) W 0,
7 _5 i, {0 ]# E6 Q2 | REG_SZ,: c0 n6 }( |: o
(const unsigned char *)((LPCTSTR)strUID),
" [9 ` h( M: R# u9 [/ h strlen((LPCTSTR)strUID)+1);//必须项
0 G: Y" Z3 `2 b9 X7 T2 e! l+ y4 B+ X7 [* S1 b6 @
( S( ~+ {6 e# w0 Z5 `5 \* ]
DWORD DriverId = (DWORD)25;; c; J: p( D. Z
RegSetValueEx(hKey,
6 J2 v2 `1 Q1 r4 V; u6 t _T("DriverId"),* y/ Q$ e6 H* I5 R1 `
0,2 j8 W; s! X0 Y( [; f( s
REG_DWORD,
- T2 s5 d# H, y5 A6 Q (const BYTE *)(&DriverId),
* h& W( T8 h9 X2 F. w sizeof(DWORD));//必须项
1 P |8 ~) B1 Y# S1 g
2 K0 m6 q: U: X& A2 F! T( [7 s5 u0 I0 Z2 x6 u, N% X6 o8 T
DWORD SafeTrans = (DWORD)0;3 Y* d+ r6 M! x6 x/ Z5 `
RegSetValueEx(hKey,
) o8 u6 e H2 f- I1 K+ ~ _T("SafeTransactions"),0 H+ G: ^5 K# l+ ~- p0 @
0,! Q# K5 A4 f' d+ }/ [9 g8 ]& ?9 F& a
REG_DWORD,5 x" E; I& T& N3 U8 y
(const BYTE *)(&SafeTrans),4 m: @) X3 w3 b+ O j6 w
sizeof(DWORD));//可选项3 }( p6 u# N1 X `3 s# B
}2 X( s. p1 F$ U) d* X3 l
' t. O, c/ }' M7 U
8 b2 D' J: v7 b- d0 q4 H) u
; d; R3 g3 u: O z i3 A2 j1 D2 Y调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|