|
|
主要代码如下:) y7 }' D2 I3 _! F: @; v
9 a( S' \0 {" Y p" }void RegisterDBSource(CString strDSName, CString strDBPath) \' b! m% w0 ^3 ^/ s/ i, ]* b
{
& x& o) g' c3 u9 B9 B; W# p HKEY hKey;) J$ X( X3 O/ u, q4 C& K
DWORD nLabel;
! \4 e0 g% l! M% x& ~ q# ?) k0 v. j+ |4 S5 T
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");; d6 h8 W7 [+ B0 J0 r
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;$ b3 R6 t( [8 j
7 ?) `! F- L8 C8 o) s if(strDSName.IsEmpty()) return;0 F% c8 ]) B8 J
if(strDBPath.IsEmpty()) return;5 Q9 H+ P' a0 H
- z4 {! b7 R2 Y, }$ L! j- H3 ` CString strDataSource = strBaseKey + _T("\\") + strDSName;; V% H4 v ` Z; T
8 x, f: d5 \" g W( s CString strMdb = _T("Microsoft Access Driver (*.mdb)");7 h0 W9 h* p) K7 l% ]% @! d7 x
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");# o" q' ]( A3 S4 O
CString strFIL = _T("Ms Access;");
! s% t- Q5 t3 X! |( V ]8 }2 y' B CString strUID = _T("");
6 U; E! `1 m: x- ?4 z- {: l
9 q+ w7 c- Z3 y6 @- C# x / ]* Q5 p& `" D
! o+ ?4 v8 B$ h1 g
RegCreateKeyEx(HKEY_CURRENT_USER,
: F% z4 S8 v3 _ strMid,1 W3 k! x0 p+ y0 G% G
0,
# p0 s& } ?5 w c( A) \ NULL,
+ B" r/ Z! ~: L3 ]: I0 @; o/ ?) Z REG_OPTION_NON_VOLATILE, / _# f2 M% d- d9 A) U
KEY_ALL_ACCESS,9 i7 K& u d! E
NULL,
& G/ E& Y; [# V5 f" J# U* U+ V( q* D &hKey, : E9 U# r; i" x
&nLabel );//获取数据源键值句柄- ?7 Y3 T- W- ]5 [& {
# l# z$ p: f, T/ g
RegSetValueEx(hKey,$ _8 f2 O6 \4 p+ e, P
strDSName,
8 z/ b' G' v8 S9 u1 h4 o4 O9 L/ S/ n( y 0,) N! l7 V7 z7 y. s
REG_SZ,# o8 p0 q. K2 |. L& i: ?/ u9 v
(const unsigned char *)((LPCTSTR)strMdb),
9 J% y. k( J1 _ strlen((LPCTSTR)strMdb)+1);///设置数据源类型* j+ O) S9 m4 q$ J' A2 ~* B
; l/ Q I$ }5 Q8 r RegCreateKeyEx(HKEY_CURRENT_USER,. A- w6 J8 l6 u4 ~. M% D
strDataSource,8 s) ?5 B3 ]! y, `, {- {
0,
1 o+ O i/ c8 o; A5 s NULL,
# U6 j" k8 W* ` REG_OPTION_NON_VOLATILE,
5 A6 R: |% h$ U; t% L) v8 g# A5 w KEY_ALL_ACCESS,9 J8 J! N. z8 H
NULL,
! r( n5 ]: U% d/ k" S* q) w &hKey, 4 Y/ D. l3 D0 E6 D3 ]3 |, o. o% J
&nLabel );//创建数据源子键
+ I( d8 x6 l% ~% f) A! k! L G! u# K2 l6 u' U7 q4 Q1 g; i
RegSetValueEx(hKey,6 {: Y* w7 W5 _( x* g
_T("DBQ"),
% X5 ]) W2 Z8 t5 j; ~# J 0, Y7 I7 E' b: \8 M9 L- M
REG_SZ,. p, B/ F: N3 W3 K) y5 t
(const unsigned char *)((LPCTSTR)strDBPath),
1 G3 V) q; j& i; P+ U" h# ?7 A strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径' v5 j8 j; n0 O# R6 \" Z
2 f1 k: M$ n% |3 Y4 E2 B5 d
RegSetValueEx(hKey,8 k3 U- ]% b. s- ^7 B7 Z1 B3 g
_T("Driver"),4 ~7 m( e5 X( P) V
0,
! t* @9 P- y! Q0 v+ ~9 X REG_SZ,$ ~7 [9 c* Q. f% i) [0 J2 R+ m. A* q9 n8 r
(const unsigned char *)((LPCTSTR)strDBDriver),5 Y( b6 C; j7 y. c) k
strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径( n' u/ ?; Z7 B
6 t+ }7 k. d; [3 L+ y" U. ?$ C T
RegSetValueEx(hKey,! m* p4 X& u/ X1 U
_T("FIL"),
, F! R+ M5 _* C) { 0,. d. ]1 y9 X5 \! o0 m9 m0 S
REG_SZ,% l2 m- Y! R! \. }$ G2 v' K8 l
(const unsigned char *)((LPCTSTR)strFIL),- v$ |6 O$ C+ G3 m! t, J2 x
strlen((LPCTSTR)strFIL)+1);//表的类型; g& P& g) J5 R7 s
# ]3 r5 B5 k z! k/ e- @& o5 L RegSetValueEx(hKey,
* x) \8 t# [3 c. `' h; e& l/ ] _T("UID"), |- S7 @) E2 S/ m& Q) z' i; x
0,
6 z" F8 R* F' s0 W1 M H" G REG_SZ,) v" ^, R# k, F" x
(const unsigned char *)((LPCTSTR)strUID),; ^- { O& Y5 b" A2 V
strlen((LPCTSTR)strUID)+1);//必须项
1 `% Y/ Q" }- q
& P6 z6 [' ^! Z3 U1 f' }
3 g4 c9 m0 r( Q DWORD DriverId = (DWORD)25;
1 U& `" f- \7 T* R1 y RegSetValueEx(hKey,+ l, g$ n. M. O4 g
_T("DriverId"),
) U( s0 T( n7 f% h/ k g' G 0,
. r4 ^$ \5 x/ o" E, n REG_DWORD,% {9 U, C4 g4 G: s. Z: n
(const BYTE *)(&DriverId),
% a6 ` ?- b0 K+ j) O- K sizeof(DWORD));//必须项! h+ J" H4 N- \+ c* U4 |
, W5 @( C- L" p( U$ O/ M
/ ?3 Y% D# J; D. U( Q1 x8 ^* ? DWORD SafeTrans = (DWORD)0;
( ^ g: N; k7 k# S0 t9 } RegSetValueEx(hKey,
: y/ k0 j. y% n1 n- x g4 c _T("SafeTransactions"),
) k Z3 U2 L" l3 n; R 0,2 f( B; Y" n: w' D
REG_DWORD,
+ D& D1 X. l0 ^6 r/ ]2 X4 U* { (const BYTE *)(&SafeTrans),
% Z; M9 n/ o- C. A9 G' W sizeof(DWORD));//可选项; [; m9 K2 K0 s* D4 d) h
}$ E5 P1 W# H. ~3 O- G+ c3 A
) O- F4 t& ?. ? C3 B
/ L j: n# s7 I9 M( n
( c& o* Z" }& f, D; n- e调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|