|
|
主要代码如下:
( S4 R: Q0 t0 G' y
; x% ^ _& s+ f* v( Hvoid RegisterDBSource(CString strDSName, CString strDBPath)4 D+ S, U1 ]4 a3 g% x F$ y
{: B$ J% U4 P4 S" s; M9 n4 c u
HKEY hKey;; Z0 f3 g0 a5 f! I: v
DWORD nLabel; / M% ]8 D$ {7 ?0 H
6 f- E( m- y3 n- ?5 U& v) { CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
4 K9 F+ F, D% t; w; W, l CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
8 _- T A6 U$ c# }8 A) s
/ F) j% Y D D* c5 q* P if(strDSName.IsEmpty()) return;# E( W' z6 t+ p0 l7 c$ J
if(strDBPath.IsEmpty()) return;
h8 N* |0 c, G* M- Y7 q2 Z
6 A9 K; I Y* v6 [# S CString strDataSource = strBaseKey + _T("\\") + strDSName;* O) @0 v: @; ? `+ e
' Y5 y( f f6 X& p% H* U$ _ CString strMdb = _T("Microsoft Access Driver (*.mdb)");
2 J& B( j B3 Z1 Z CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
. q# G0 r" C* _. g1 l, C CString strFIL = _T("Ms Access;");
8 e+ t# T( f9 ~" T6 g- ^) ~ CString strUID = _T("");
# g% d1 S# _% `5 U" H8 M7 ]$ [2 B3 ?* x# ?2 |
/ l B1 H, M; A$ _9 y( D
% e- O( {5 C) Q. F$ }( a& l RegCreateKeyEx(HKEY_CURRENT_USER,
3 r2 a/ ]( \$ `+ ]2 ^ strMid,
9 {* r6 _0 e7 o8 n9 M R) s( ] 0,
5 h3 s# V! M3 m( ` b4 R _) o# c NULL, 0 k1 \) i; G9 `* F2 @
REG_OPTION_NON_VOLATILE,
: K/ i" Q! v( a0 n B( d2 N& I/ I KEY_ALL_ACCESS,
, M2 \( K0 C! D: D7 v" a, a: R7 _ NULL,
& w, }9 ~0 A$ d0 Z) b" i3 z# p3 I/ ] &hKey,
9 H+ j# n/ a$ Y, @ &nLabel );//获取数据源键值句柄
2 g; Y; {" j; l+ B4 |7 K# @* J' J" Y! _! \, p6 x3 Z3 }, M; H5 x( {
RegSetValueEx(hKey,
( o6 e1 L* f( D7 q4 } strDSName,
) _* T+ q- |+ j" ]1 r! X 0,9 ~' C% l# R3 @( C4 _; l( |: a- D& c6 g
REG_SZ,8 `) [; s9 m& B* W: Z. h
(const unsigned char *)((LPCTSTR)strMdb),2 x6 ?0 I) S2 R' _8 U0 o! }0 z
strlen((LPCTSTR)strMdb)+1);///设置数据源类型, o" f$ x) s6 G4 M6 z
- Q( q9 _! g6 _: R% W
RegCreateKeyEx(HKEY_CURRENT_USER,
0 O% e, V% H' J I6 ]9 j strDataSource,& A6 J( K/ q+ ?
0,
0 J# a/ n( P% ^8 M/ ~4 Q NULL, 1 S+ B: m0 c' {3 w8 x3 b7 _
REG_OPTION_NON_VOLATILE,
: J! D1 O1 ~0 c+ }, c1 `) V KEY_ALL_ACCESS,; ~1 d* H `1 H# }1 x Z9 P. v; C
NULL,9 W3 N! K6 Q/ l, s# ?2 \1 B
&hKey,
% h1 F/ A+ T2 i5 `% k# n &nLabel );//创建数据源子键
8 o) s. x& A$ U( |
3 f7 M+ b" A1 b! A RegSetValueEx(hKey,
! s& G' |( I: c2 d K7 K' a _T("DBQ"),: w* h. N( |! ^, U3 X) P7 C
0,
, ?: d7 o* E, E: l REG_SZ,( A% ^& ~8 b; n$ b( U
(const unsigned char *)((LPCTSTR)strDBPath),( d" v8 f# i7 t* l* ~
strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径' E) U8 p( i9 B3 w
9 m% q/ K7 i3 ~5 T# O RegSetValueEx(hKey,
! n3 J2 R. ?0 ^1 e _T("Driver"),
8 E X W/ [) F+ S 0,9 X- [8 a& c; A5 \, j' H0 F' f! f l
REG_SZ,
! ?* W9 }7 B# c# Z/ z- C3 a (const unsigned char *)((LPCTSTR)strDBDriver),
b0 A8 a6 A& d strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
- S7 n0 U! q4 l5 L+ Z$ m' V2 u% L
RegSetValueEx(hKey,
' ]/ u3 u, `; n1 {. H6 \% }* @ O+ N _T("FIL"),# W- e: p4 y# s( [9 H
0,
) l g" ^" f. w. y REG_SZ,
( |: L# Q! O% I (const unsigned char *)((LPCTSTR)strFIL),
* ^3 }0 l2 }5 f8 j( P strlen((LPCTSTR)strFIL)+1);//表的类型
5 X5 T' F4 J' |# u K& V/ n+ w
1 _" x2 S+ v! e- O8 s RegSetValueEx(hKey,/ x) ~: m$ w$ j9 j8 \/ q( {
_T("UID"),
$ o( Y8 k% b% t& H5 c+ H" d 0,3 ^# |' i, d& M: p" v' [
REG_SZ,
4 U. M0 z) j: U6 ?& R (const unsigned char *)((LPCTSTR)strUID),
9 k0 T, K. h2 t strlen((LPCTSTR)strUID)+1);//必须项
/ k+ N* ]& ]$ T: i* A# q+ \4 F0 m; z- ~( O4 c
; ] {% \' x. C3 c3 g DWORD DriverId = (DWORD)25;
( q9 S9 I; t( a" a6 }1 [- x& W& b9 U RegSetValueEx(hKey,
" Q/ v5 k% j: ?) d0 p _T("DriverId"),# U& Y+ X e. D
0,! i8 V3 i( ^4 D/ x
REG_DWORD,
# y! `+ f% \; p$ t( N3 M/ ]' x( s p (const BYTE *)(&DriverId),# D1 O' ^1 q% i1 `- I/ L
sizeof(DWORD));//必须项
2 b- A! U2 w$ Q: W 1 g! V4 t `) P; U$ M! R% p
. x' G, J. R. Z DWORD SafeTrans = (DWORD)0;
+ }8 E" ~9 E, X6 H, Z, k RegSetValueEx(hKey,
2 F% X+ n, U8 t _T("SafeTransactions"),
" s) ^6 E( K/ A 0,! @$ c; M( P- o, P- P3 V$ |0 M
REG_DWORD,3 k+ J6 P c K" [4 R
(const BYTE *)(&SafeTrans),
$ l/ G* @- m' @0 e& f7 T sizeof(DWORD));//可选项: V5 A$ T* k% T, M2 M7 M
}+ z" q. S% ^- `6 I0 ~/ J" B
! B" v% z3 k6 ~( |- M# P
1 I9 S/ G( t" |. D! j6 }2 ?( L. W) b- u, a' X9 [* w- A9 P
调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|