|
|
主要代码如下:
/ @* U# J5 y' N6 N
# K' ?- e* Q+ n7 J; r& Tvoid RegisterDBSource(CString strDSName, CString strDBPath)
- E! s$ o$ A5 W. W; f2 x{
5 @- R4 Q8 L$ i5 q9 { HKEY hKey;6 T; C( x: Y m2 J2 t
DWORD nLabel;
5 P+ e( ]' @* h- Y1 {5 i( j5 D& q% o& u" H, I
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
) o: L: i. [# O0 v; J! `3 s) ] CString strMid = strBaseKey + _T("\\ODBC Data Sources") ; ~+ m- e( f3 \
6 g7 H0 W* ]7 \
if(strDSName.IsEmpty()) return;- r6 a3 U- ^$ g
if(strDBPath.IsEmpty()) return;
1 ]* T. \: X' P5 Z5 A0 z9 f3 h
; E: }& s4 z( G7 B* ?+ _ CString strDataSource = strBaseKey + _T("\\") + strDSName;
/ L% ]. _, D% @1 ~
* x/ g! x, F4 X Y6 |5 E CString strMdb = _T("Microsoft Access Driver (*.mdb)");
' d+ @0 X* v$ ^4 W2 b CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");$ ^: M2 B* s9 j; s4 z: @: b, X! b' z
CString strFIL = _T("Ms Access;");
) f0 L) ~% Q- _5 u5 H& W( } CString strUID = _T("");
8 w$ w% m' ?2 v3 a1 r$ x+ t+ x5 P" {7 k0 ^6 h! |! ?
4 i* g4 _, s9 Y8 M P
2 [& Y) X0 K) \' C RegCreateKeyEx(HKEY_CURRENT_USER, ^% C1 T" B% _: }7 W+ W7 W6 J( a
strMid,; V" i9 _; ]- ^" n5 e0 H
0,
3 h- t9 n- d; p NULL,
" a6 ~7 X1 h- ^/ J u REG_OPTION_NON_VOLATILE,
$ E$ [8 n& i+ A6 |5 \' `5 r KEY_ALL_ACCESS,
, k; t3 A+ c7 C! { NULL,0 ]0 O& \8 F5 e0 k3 {
&hKey,
6 }6 z0 q8 L/ ?2 \ &nLabel );//获取数据源键值句柄& p6 \! G$ [4 i* a3 j$ N+ t
. o7 d2 ^% u; e# X) c RegSetValueEx(hKey,
0 p8 e0 _* M" W$ a* A, x strDSName," g/ R6 p7 \! ?: b5 p
0,
& P) u! {+ ]0 g$ H- F* ^: v* ~2 q REG_SZ,
7 f, h# }7 O8 Y9 A8 r (const unsigned char *)((LPCTSTR)strMdb),3 q. `8 J+ }( T! X- N# Q- ?2 U$ a% Z
strlen((LPCTSTR)strMdb)+1);///设置数据源类型7 G) p9 `/ y3 T, S! T
2 a8 |, I6 ^- d RegCreateKeyEx(HKEY_CURRENT_USER,
# q' ~! E% q: g2 @% J: u1 b strDataSource,/ u& ?9 i( R6 N
0, 9 w3 x# u- q; \0 q @
NULL,
8 f$ y7 {. i; i$ y2 K; ` s REG_OPTION_NON_VOLATILE, - J$ o$ T. w$ u9 e. g4 f: |! A9 d
KEY_ALL_ACCESS,& W0 H2 b0 n$ R" x( A
NULL,' w% h; T6 J' P2 f; S/ E
&hKey, % |* m% }" x, @% ]$ ~; [
&nLabel );//创建数据源子键
5 o0 b1 g/ e2 j4 z, Q8 G' n& ?, r# s2 z) ~+ J9 ^1 h; T( X8 s- S2 ?
RegSetValueEx(hKey,# p* ^& X* `8 z
_T("DBQ"),$ z' H5 ]8 A4 R; v9 c
0,% o* [) B1 S6 z5 m; V3 ~
REG_SZ,0 C/ D6 h' U, i; _- T7 Z
(const unsigned char *)((LPCTSTR)strDBPath),
9 J# e- E; O$ I# H' x- c {1 ^6 X' j strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径3 _( U/ k: e" |; V" e
; c. { R; C" ~; W: i; f+ v) Y RegSetValueEx(hKey,+ L& V g; k4 v
_T("Driver"),
% q+ X7 b( ~6 _4 C 0,; d% |( _' g' v9 K2 H
REG_SZ,
/ h# Z, I) i: B5 [; K0 \* D% s! A (const unsigned char *)((LPCTSTR)strDBDriver),& C Y' W* `& j3 a, @
strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径* d1 I& f$ d. }3 h5 K; [
* Q6 b; r3 H P; T RegSetValueEx(hKey,0 f" S& M2 j) c4 Q! s- o/ w/ N) N
_T("FIL"),
6 s7 W$ }' _' t' _( { 0,
( B5 ?# A$ ~. J3 m$ p: k, b/ H REG_SZ,
8 g& r& }4 ]. ?3 ? (const unsigned char *)((LPCTSTR)strFIL),2 k1 ~5 `$ W: w$ X& v9 K: W* p
strlen((LPCTSTR)strFIL)+1);//表的类型
0 @" Q. k7 X/ M9 G6 K9 T9 f9 m0 Y5 F) p, h% F9 ~; C5 f& O: `
RegSetValueEx(hKey,
8 r0 h% B5 D* T6 Q3 H _T("UID"),& ]# D$ \ A1 T2 `5 T1 N( @* ~
0,
- {8 E& h# t, H8 @" W REG_SZ,$ \$ T; J0 G7 t8 g2 b3 q
(const unsigned char *)((LPCTSTR)strUID),! r0 Q( P* G- j. w1 [" P
strlen((LPCTSTR)strUID)+1);//必须项
* |: m8 ~5 x+ q# D/ r' F7 U, t2 i5 _4 m4 D/ s
' h$ _% n9 E4 f! e
DWORD DriverId = (DWORD)25;, c0 W% T4 u( V9 x J2 G0 }) H9 @
RegSetValueEx(hKey,
0 P$ Q( P) \4 c+ E& i. r _T("DriverId"),
; R5 c1 |: [! ?& } 0,
+ h( U5 b& m) L) s+ q* q2 ~( V REG_DWORD,& N' W' K7 x2 g m& e5 H
(const BYTE *)(&DriverId),% Z( Y3 R1 D% P+ L0 s
sizeof(DWORD));//必须项" d9 W2 N- K5 {5 x" E, z' M. c8 ]
5 u) s+ m* s9 |. N: d
/ }7 _& u" { x l DWORD SafeTrans = (DWORD)0;
5 _* h% ?% `$ `6 T( N. Y RegSetValueEx(hKey,9 m5 H- S) {* l. U
_T("SafeTransactions"),( ]$ {& X; p) V2 ~: L9 }
0,9 g: `" X% {) N6 v& `
REG_DWORD,: ^# [- H' a9 X# [- J
(const BYTE *)(&SafeTrans),/ Z6 h; A! i; ?) B: I8 H
sizeof(DWORD));//可选项- Q% q6 Z! F! h* o! |
}
9 X4 {( g* y; C8 E
: v! q0 c: K& q& i; L: b( g3 d
( l2 w& P4 r5 `/ N+ ~0 G* {8 k6 e' w0 n
调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|