|
|
主要代码如下:
, C# |' }" J& Y2 ?7 k2 X: w* c& ?/ c$ B% L/ h/ \% z
void RegisterDBSource(CString strDSName, CString strDBPath)+ o: X1 _5 { b7 V
{
8 w( b! K( z& Q+ H1 \( b HKEY hKey;
1 u4 I [. s+ u& t8 ?. v Z0 q DWORD nLabel;
" c B, W8 z/ M5 `1 r4 D) I' F) R( e8 `) M: T8 }6 a% c
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
# c% P* {+ q- G CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;2 g }. M/ A8 S; q1 X. q0 B
0 j+ V1 R9 K) i. A' q1 B
if(strDSName.IsEmpty()) return;
: o* P7 Q$ t3 x- F if(strDBPath.IsEmpty()) return;
% C, e: D% |" A
" J; Z W: B( g9 \! g CString strDataSource = strBaseKey + _T("\\") + strDSName;( N: c3 ?+ v% F3 r) P
2 d d" c# ~/ j( j! \) U2 ?' y
CString strMdb = _T("Microsoft Access Driver (*.mdb)");
0 E( D1 L5 Z3 j* D' { CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");2 j' z4 T" ~" S" N% n3 O
CString strFIL = _T("Ms Access;");# S8 t5 H. e+ W2 ?5 \' Y: a- K
CString strUID = _T("");7 t$ o5 N; i V
8 A9 W! A6 j6 \' h2 W! B / P5 z ]( Z U) T: I
8 ~9 R4 o9 y$ `7 a( p RegCreateKeyEx(HKEY_CURRENT_USER,0 {, l' z2 Y$ v( x6 g" z+ }
strMid,7 ?6 x% e8 p8 }; L O+ Z0 W
0, & c. A' ~8 |% |* `
NULL, ! ~% f4 V& d- a S: o+ d
REG_OPTION_NON_VOLATILE,
* E6 h8 {5 e6 ^5 M" r' \ KEY_ALL_ACCESS,& p7 ~- c" W, q9 t
NULL,* f3 T0 E( ^) i/ x+ f% z
&hKey,
) ^( e* |5 G n# P* x) T &nLabel );//获取数据源键值句柄/ O$ @% \$ L* o
) {; J8 F& h( n* ^ RegSetValueEx(hKey,( b6 r0 O: u# u$ y
strDSName,
# q$ M# g1 Y7 j8 [6 z 0,
4 s0 @) n. X- o' M6 V REG_SZ,* }" C% w- I1 n, g* \# {* u
(const unsigned char *)((LPCTSTR)strMdb),' d8 v/ L1 m% O( E
strlen((LPCTSTR)strMdb)+1);///设置数据源类型
- A- D) E( T* G) Z0 L% t+ d
7 I5 ^: A1 ]" l' Z- H1 r; Y RegCreateKeyEx(HKEY_CURRENT_USER,
$ z, [" C2 k. a V% o strDataSource,- c# P0 [. F6 v
0,
8 F5 [! V5 C0 |' y6 ?5 u NULL,
& ]6 E, `3 Q9 ~+ g* u REG_OPTION_NON_VOLATILE,
: u2 Z4 l. a1 a4 i, e KEY_ALL_ACCESS,
2 l% [) l. }& X; U7 i$ Q NULL,% \, u7 M7 |% D/ F( h5 D! w
&hKey,
& a& e. w" M" k/ Q$ O2 ?5 z g3 X3 m &nLabel );//创建数据源子键
- c1 w8 Z5 A$ R, k o+ y. C K) t
3 G$ M/ m$ m- x4 G RegSetValueEx(hKey,
4 N; M/ n! q6 @/ E8 \" U$ g _T("DBQ"),
7 b# e1 j e8 P/ m$ q 0,
+ k8 D$ m1 O( u4 i8 P REG_SZ,9 E4 |& E8 F$ k9 D+ g6 X3 [
(const unsigned char *)((LPCTSTR)strDBPath),
8 v7 ]6 g4 B- T9 P- p+ R8 o strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
# d6 ^0 l& i C, ^" {) c3 l& j: D- l
RegSetValueEx(hKey,
3 l2 W4 W( y! k/ w _T("Driver"),. G g- ^: w i
0,) V- }1 B, ^8 C, Y9 p2 Y- b4 Z5 W
REG_SZ,
0 p' h) h }- p# o3 y7 ` (const unsigned char *)((LPCTSTR)strDBDriver),
. e% X) u* v" t7 ^/ j strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径6 e! P' P0 R4 A, H% U% s2 E
( g! ` b8 z, p9 X8 T
RegSetValueEx(hKey,; Y1 a6 i/ m3 J7 g0 T. e
_T("FIL"),5 V. {) ?6 R" J2 V$ u1 p6 A& t
0,- i' ]" y& ^5 A
REG_SZ,
% X3 p1 y, V7 f1 v+ G8 o- Y/ a (const unsigned char *)((LPCTSTR)strFIL),
5 v3 \0 U- O" T- O strlen((LPCTSTR)strFIL)+1);//表的类型
3 v4 z$ F* Y7 p
: ^% Z' T' d% J8 v4 { RegSetValueEx(hKey,
# A/ {' f; W1 O& T6 z ] _T("UID"),. d' I' W+ U7 q! A) ~& U
0,! k) t \. s+ x$ k0 B: d6 K
REG_SZ,
+ H0 |1 X& h* w0 p8 Z `* q: [ (const unsigned char *)((LPCTSTR)strUID),) S- m: S$ P) a& T2 R
strlen((LPCTSTR)strUID)+1);//必须项
# B0 P- H4 H ?8 j% o5 Z0 S4 u! w0 ]. o7 E1 f* t
2 S/ _# k2 V! r- U' ~ DWORD DriverId = (DWORD)25;+ ^1 F! b# R0 d7 R! ]' H3 y
RegSetValueEx(hKey,
3 E, G, q# O9 l* f: z _T("DriverId"),
) c2 e1 `# _) ?" D 0,& _. N5 h5 C8 x: v+ z+ ^
REG_DWORD,$ f4 q/ p, Z+ w$ I9 L. A8 P# o
(const BYTE *)(&DriverId),
* s% s! P- d* A; A1 S9 p u! Q" u sizeof(DWORD));//必须项" N! N% z* E- ]# R0 }3 _5 g
! A7 R! P" e) c4 g% e! i/ y
. B) o$ u1 Y2 g0 P, f0 J- R9 O DWORD SafeTrans = (DWORD)0;
, A+ F# s, H) @- Y1 |, I2 x RegSetValueEx(hKey,
0 h7 B' Q4 N. |7 q4 v0 R _T("SafeTransactions"),
9 }. ]: O9 K2 K, X 0,
& a. K0 Z8 H7 P6 c4 a REG_DWORD,8 u0 A* R9 L% A8 K$ V
(const BYTE *)(&SafeTrans),/ ~* B7 [) }8 u+ L) j: w
sizeof(DWORD));//可选项% Z- H4 N* i6 U
}1 u% X6 q- |: Y: k5 ~' j3 B
3 \4 [4 n3 C" {% O
# u/ e; h' R" Q
1 O' b+ H- C. t9 ~6 o; b+ \调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|