|
|
主要代码如下:; G! D7 B2 C, Z% _4 x( [( w
7 w2 [# r0 U8 a- U; _! mvoid RegisterDBSource(CString strDSName, CString strDBPath)
: \% ~9 N/ N* _{4 V2 W. [9 T( { N
HKEY hKey;
# a& F* t2 U; e" M$ `9 T+ o' S DWORD nLabel;
2 C" Z9 T8 k( J1 ?- X
2 W; R) S. X$ P CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");8 \6 g$ I* o' ]
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;4 U/ p' E+ G4 d
$ c5 T7 ^3 y3 Y' H% `6 T- ~ if(strDSName.IsEmpty()) return;
( ~( c5 x/ {; P0 V# L7 F9 o6 g; s if(strDBPath.IsEmpty()) return;6 j6 K! a9 N6 R* E- O6 d. q0 [2 ^; R+ ~
9 d: G0 o9 C; ^( X$ j/ m; \- J CString strDataSource = strBaseKey + _T("\\") + strDSName;* p |( ~3 x* W8 P; o, ?3 S
1 h, F, M9 ?$ ^' _$ W+ { CString strMdb = _T("Microsoft Access Driver (*.mdb)");. S( g6 |5 V' Q# E& I
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
. h, Q3 K* k4 s/ B# H CString strFIL = _T("Ms Access;");
7 D! m9 Y. N p. F CString strUID = _T("");
( t8 [0 G* [7 H
( y1 x3 @$ p+ O1 ^2 K# ~
" C3 Y/ q) M" W, e: ]" |( w5 U ?$ y( u
RegCreateKeyEx(HKEY_CURRENT_USER,
: g9 ^* J+ M2 ~! P' L; g7 i7 Y* g% U strMid,
. o: B% \) }3 E! A, ]! I; Z 0,
. R, ~! p3 d$ x# T NULL,
! b, s) T9 H$ M! L REG_OPTION_NON_VOLATILE,
5 Q. ]2 ?9 E* S. ]/ V9 L( t" _ KEY_ALL_ACCESS,$ A" Z: ?# u4 A4 W8 l
NULL,2 l* H" P; O; F5 O$ J& t
&hKey, 3 l% Y) O+ T" [% v7 c. A4 _; N
&nLabel );//获取数据源键值句柄
# ?8 t' c; u' z9 O3 g8 f2 L. I2 Q: j: w$ W) Q
RegSetValueEx(hKey,
2 ], W; ?! S+ z+ E8 D strDSName, [4 c* Y: Z' S/ u, t) y
0,
" i; _1 {: o! D# l$ x REG_SZ,
1 w+ B ^, T8 f f* f/ p t (const unsigned char *)((LPCTSTR)strMdb),
1 S% G9 a ?1 n9 e6 I! M) M8 T/ N) j- ] strlen((LPCTSTR)strMdb)+1);///设置数据源类型
T( B- }0 a1 q5 ~. p" i% [: P3 Z! j5 Y$ t. J' V/ b
RegCreateKeyEx(HKEY_CURRENT_USER,
" u* X8 _) I* `& \0 |( @7 r strDataSource,
) ]4 _. h( {6 O& @- X 0,
" i/ _/ N1 F- J6 x! R( ]) V5 u NULL, ! h- v5 K$ S% [! K
REG_OPTION_NON_VOLATILE, * O- v" f9 |& N+ B- R- D! B2 P- }' I
KEY_ALL_ACCESS,2 c. F' r4 x& O# ~. i7 V; y- W3 y
NULL,8 _, c3 u; r0 E+ d& e
&hKey, ' O C# B$ c; B! N+ n+ ~
&nLabel );//创建数据源子键+ F$ k8 Q. U+ z# h
. o. q, a: S, t' W: D8 E
RegSetValueEx(hKey,& j8 z, W3 K8 {6 R- ?8 l
_T("DBQ"),3 y+ }- s% ^8 ]. _
0,
% L8 x# l- P$ ?+ P7 Q8 u2 | REG_SZ,
! y5 D. d: B# F) ^ (const unsigned char *)((LPCTSTR)strDBPath),* X, A2 C2 l* D6 L
strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径4 m& F/ i G0 C5 e
5 V* X8 a( l4 H/ X* l+ _
RegSetValueEx(hKey,; t! d( X, P7 X0 h" u
_T("Driver"),
3 e5 L4 B) p9 E b6 \7 s3 e3 ? 0,! m) B: y8 {$ \) h( G1 a
REG_SZ,
, y1 V t0 B5 r. a7 J; p (const unsigned char *)((LPCTSTR)strDBDriver),
2 J0 B% D" a3 R8 c strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
1 P6 f- C" c) e4 R4 ` Y
0 q0 r1 f& A4 K( \. l RegSetValueEx(hKey,
! M9 }4 a8 k2 P. L4 I+ j _T("FIL"),- b5 \8 J- s2 W: }$ w
0,
1 V9 X' \5 N0 v8 v1 m5 c# T" r! Z REG_SZ,0 a( B* C* m. R# R/ l3 P+ [! N
(const unsigned char *)((LPCTSTR)strFIL),1 e/ P. I1 c) f# y
strlen((LPCTSTR)strFIL)+1);//表的类型
! K% F0 h1 V$ _: T. }) p" j0 w
2 C9 ?! g7 F# T RegSetValueEx(hKey,
% H+ x _' Q5 q) q. c _T("UID"),2 V% p# K/ d; r' E8 ]* t* H4 S! H
0,
* S. K8 n: Z4 I" }5 Z1 i REG_SZ,
) p+ ^; j+ v! M$ a2 }( ~4 e (const unsigned char *)((LPCTSTR)strUID),1 G* q: _9 [& N2 G/ D
strlen((LPCTSTR)strUID)+1);//必须项2 M5 Y( }4 |: {* I; l* J: R) X
& t, V' v6 j( k. P" ?; z$ A5 f1 H1 o' n
DWORD DriverId = (DWORD)25;
& W5 U$ `- H! f" z RegSetValueEx(hKey,- \) E# R9 `/ z% V) @. p% s
_T("DriverId"),# ^, f: k- e# \5 A2 Z
0,
2 j) W; k. v7 N% y REG_DWORD,
1 `0 V5 M0 _0 Z } (const BYTE *)(&DriverId),
" t' h0 I2 t5 Z& C/ Q sizeof(DWORD));//必须项8 t5 j, q' C$ [6 ^. R& I9 F
* M$ o4 ^1 o; z/ J( c9 N
0 V9 n, c0 N/ K4 W2 k. [ DWORD SafeTrans = (DWORD)0;3 b% m( l0 ]+ s% p, W
RegSetValueEx(hKey,5 G7 I6 g% \- Y1 v
_T("SafeTransactions"),7 A* M- n) }* m4 q6 ]: r
0,' [ ? `6 F9 a0 Z
REG_DWORD,
+ A7 m/ f! Y L (const BYTE *)(&SafeTrans), G+ |7 f- F! h# X% q
sizeof(DWORD));//可选项
" O- o5 V P+ a4 J! W}8 W# a) t! M, z8 P6 G
# F' D; \! A" V( W+ o
% M6 R5 R) z$ i& i- _
% ^, E% k' F& R# Y调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|