|
|
主要代码如下:' T/ }. G0 R: U2 w; H/ |0 z
# g2 _/ J* Y0 P+ U) K4 qvoid RegisterDBSource(CString strDSName, CString strDBPath); o5 W4 X# r6 j0 E' p
{5 [8 L& f0 r) @# a4 [# w; A
HKEY hKey;/ v7 r1 _& C, [# l# T) x
DWORD nLabel; 7 z+ w+ D6 d- l* o8 z* s( T0 J
5 A1 B! C( B: n& Z. I" Y, ?+ W CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");4 i A2 g& m4 B% W* d7 [- H
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;! e0 M1 B0 u" _7 D
! W+ [* I1 ?. X p, E, G
if(strDSName.IsEmpty()) return;
+ J/ J; E7 ` z" K, n D( G' o if(strDBPath.IsEmpty()) return;4 c! ], C, {" t ~7 G& D
1 c7 i1 Y+ z! b H CString strDataSource = strBaseKey + _T("\\") + strDSName;& u/ Q$ f) h7 L I4 y$ s1 u( Y
7 j. d* t/ ~9 K CString strMdb = _T("Microsoft Access Driver (*.mdb)");
5 q# C. i4 C1 E8 J5 r CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
3 }; i; U" p% D" ~ CString strFIL = _T("Ms Access;");
9 d9 v$ x9 m3 k1 w! N CString strUID = _T("");: C% L: H- r0 j" B- p" h4 y' A
+ G9 Z. W* F, u
* S( x& W9 S$ S
; d3 |, N9 f1 Z1 F2 w' V/ G% M RegCreateKeyEx(HKEY_CURRENT_USER,, E, m* o0 @/ O9 e" C+ w0 g
strMid,# O+ R' i8 S7 o4 Q7 a& D9 F' P2 B
0, # U6 O$ K! ]/ ^" d) Y. `% J1 E. p
NULL, $ I1 j0 |3 R' N& E" e9 C% v$ _) V
REG_OPTION_NON_VOLATILE, / J; Q% L* g8 K% M# r) `9 k6 @0 V
KEY_ALL_ACCESS,
$ i7 l% ?0 o- F; t8 i2 h+ Y% Q NULL,
# y$ I4 T7 u4 v% t5 T- L, |( } &hKey,
# C4 u. O3 t7 Z2 x- r &nLabel );//获取数据源键值句柄3 w" P0 h# h' ^2 x5 q* t
& p# E3 s, M- G4 o; ^ RegSetValueEx(hKey,
b9 I+ w7 I t strDSName,1 P7 D, u/ D+ Y! s0 L9 `
0,
' m _* p( [$ n- q( E% A REG_SZ,
& V! n k7 |6 |# A% x (const unsigned char *)((LPCTSTR)strMdb),! X# t9 p- V* c, @7 C/ ^
strlen((LPCTSTR)strMdb)+1);///设置数据源类型- a% N- v+ ]. w1 B+ f; a: ?
4 @" X0 l$ D/ s, X/ x8 L RegCreateKeyEx(HKEY_CURRENT_USER,
" K* R" V E( Z9 w5 T strDataSource,4 R4 ^$ Z. s0 Y" `3 O$ T* q
0, ; C. `! t F( G5 j- [; ^
NULL, 7 Z4 s" D G5 _. s0 t3 o# {
REG_OPTION_NON_VOLATILE, : a% G8 F4 T/ o( ~ L
KEY_ALL_ACCESS,
- u5 b5 U. t& X' `+ a NULL,
4 ]' D) x0 d1 ^; W% U4 l6 }! ^, p$ f &hKey,
! |- J, X1 Z* j5 |; ?' e &nLabel );//创建数据源子键
4 X% x- |) @, f+ ?0 L0 s4 H! _' ~6 d
RegSetValueEx(hKey,5 I: \" \8 c: \0 |4 T# D
_T("DBQ"),1 C% ]. A, z* q* y. i
0,( B% Y3 i, N7 _! @$ Q
REG_SZ,
8 B% T: C, A- M* X( \% Y5 o: E/ c (const unsigned char *)((LPCTSTR)strDBPath),
9 R9 r W, k) A4 o' h6 p strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径9 O0 C, g. N7 Z. e
, F1 a v0 q, D+ t% A6 Z RegSetValueEx(hKey,
# e& x) _( H* V v9 C1 Z: x _T("Driver"),& Z2 Q6 }1 T3 e4 `6 T7 ?3 v
0,6 N8 Z3 F7 x0 {2 Z5 C$ l
REG_SZ,
+ S H/ w @& a1 ? (const unsigned char *)((LPCTSTR)strDBDriver),
1 r) [6 J2 D v0 v2 Q4 K strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
8 L2 Y( ]# d- I! {* s! p0 j2 ]( v6 X: n* f& i+ o
RegSetValueEx(hKey,0 K% M5 h+ B6 p+ J+ `
_T("FIL"),
! m/ t& o! ^9 H! t$ H3 B0 v) J' l) @ 0,( v- [1 K" t# s& f# m6 ~- n0 R" P7 k
REG_SZ,
5 I4 a' @/ D) v: N/ \9 ` (const unsigned char *)((LPCTSTR)strFIL),
: B/ U v: K4 M# d0 @) o. f strlen((LPCTSTR)strFIL)+1);//表的类型
3 s4 Z# M O2 |! ~7 Y0 a+ ^2 Q
5 t3 h& ?0 C8 Z9 f) ^ RegSetValueEx(hKey,
$ U2 Q0 Y& [' ] _T("UID"),
) X: X: x5 ^$ M6 A 0,
: ^. ?' l% P6 [# M; ~3 ?! ?5 n- x" D REG_SZ,( T' e: A& z$ `
(const unsigned char *)((LPCTSTR)strUID),
# n8 B+ U6 i. ]# s2 s# \7 A strlen((LPCTSTR)strUID)+1);//必须项
( a0 s( S6 A" n$ Z) \! y3 M9 Z2 z: t* y& K0 J# S! e
+ |% M& l4 _) v3 w. [9 x
DWORD DriverId = (DWORD)25;0 e; M8 {' s1 m8 K2 W0 c
RegSetValueEx(hKey,
9 F% x, P, H8 G {( v4 k7 W) U _T("DriverId"),& ?3 X: N; }' {2 Z; u; _# F
0,; }- P% E9 I1 p
REG_DWORD,
( [: X- _ G* _( I (const BYTE *)(&DriverId),/ @, f! V# k5 Q$ d
sizeof(DWORD));//必须项) u! T) U/ n; y# e9 n
2 t+ b% I& G/ B& Z2 [
8 \% @7 R% f7 o
DWORD SafeTrans = (DWORD)0;
; T3 F& l, w v0 s5 ~ ^ RegSetValueEx(hKey," A; b( d& F) v6 W2 ~% B4 o" @
_T("SafeTransactions"),
\+ Q0 P! c! X" t; O# |4 k2 N 0, P. U& O& d3 ~( o( a
REG_DWORD,
% e# @# ^! e" K6 w- x (const BYTE *)(&SafeTrans),: s7 F0 }) G* }: I
sizeof(DWORD));//可选项
# |) e% u; ~1 z/ M T J}( h) `6 b1 E. m
+ a3 d( Y5 r- x7 G* k% ? " P, w3 S/ F) Q* Y+ e" g' ?8 I
+ R9 s) f, F3 i2 t q+ I
调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|