|
|
主要代码如下:
1 V1 u8 [4 G9 U8 b3 q+ K7 r' x2 ^& j3 ~
void RegisterDBSource(CString strDSName, CString strDBPath)
" v; G( w( H$ c( I* Z! c{
; L8 B8 I4 r' e( ?* D: @2 ~* E HKEY hKey;
9 f" H9 E% s3 h" r8 a DWORD nLabel; 0 l' f/ C! `. W' H$ l/ @2 A
$ Q4 ^' [& p1 k0 j: E, u
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");0 t# f. D8 r( f. X
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;8 \# Z( z( k, P( e- Z* p' }6 T. e
. S! A3 n$ r! P
if(strDSName.IsEmpty()) return;6 S# c' J& f. n2 `1 Q
if(strDBPath.IsEmpty()) return;5 T8 S2 i: S: k
2 a8 p$ U- Z- e P CString strDataSource = strBaseKey + _T("\\") + strDSName;: g4 h! K1 f* O: |1 s
% ^: M& V$ J$ c( S$ E4 E* @ CString strMdb = _T("Microsoft Access Driver (*.mdb)"); k6 I( ?7 _2 ?7 R, q$ H7 P* F4 U
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");0 ?9 s" {+ y) G0 ^! z
CString strFIL = _T("Ms Access;");
- `% }- [1 w4 x CString strUID = _T("");
2 q/ f# e/ Y9 N* |5 [5 n3 ?8 x3 x4 [
" X2 }3 M# `7 ?7 ^
: y" M4 _; N" p! m) | RegCreateKeyEx(HKEY_CURRENT_USER,
1 r' v/ J+ H& \0 x1 p& e strMid,
8 \# G; x" u/ y3 ^- D8 g 0,
; `$ {# J5 {! m s2 u$ Q NULL, $ [: G, d) M& `3 @
REG_OPTION_NON_VOLATILE,
+ ~: D9 g% m' C( K* Y3 u KEY_ALL_ACCESS,. Q) A1 V; ~( x5 B+ X
NULL,
, h" v' ~8 ]& i* B2 M! \ &hKey, * j* H1 b8 p; h8 l% H2 o" Q% m
&nLabel );//获取数据源键值句柄
/ f: ~% [8 [8 ]+ `2 H2 j
' V) W+ q6 R" x3 [: ]+ }" M RegSetValueEx(hKey,
7 Y! t) r+ I2 Q; B strDSName,
# s% g! ~; \" U 0,
5 K1 J; a. c. T- z0 q6 }) G REG_SZ,
( j5 m P& n3 W/ j" I* m% O (const unsigned char *)((LPCTSTR)strMdb),
4 m6 R6 X0 u. `8 r2 t2 Q strlen((LPCTSTR)strMdb)+1);///设置数据源类型2 O5 R* _' }- W; o
( J; d3 j7 P3 R" [: O
RegCreateKeyEx(HKEY_CURRENT_USER,0 X( E3 P3 y1 {
strDataSource,
% y6 L9 A$ T7 ~ 0,
- V4 U5 l, D9 n! s: v4 Y NULL,
$ Z0 t0 U" X- ^$ L3 o3 Z REG_OPTION_NON_VOLATILE,
7 E0 E# i1 y" R k S KEY_ALL_ACCESS,
m; h( h+ j. \$ S& i- ^, j: E8 M NULL,
% i4 M3 u! k; Z* S/ c &hKey,
. a3 i& Q: Z8 u: I &nLabel );//创建数据源子键
b x1 T* \" F+ \" c9 }! \
1 }+ N0 M5 _# [ RegSetValueEx(hKey,; c0 S/ I) i/ H* O2 g6 y+ W
_T("DBQ"),
# l5 W9 Y- p1 N- E 0,
9 q* K2 x% A* x2 I$ c; ^7 _ REG_SZ,
. V, A2 `7 C# m9 u4 [ (const unsigned char *)((LPCTSTR)strDBPath),
1 K6 @$ t) v: w* @/ o strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径4 Q. t1 O. n8 F% {; ?, g
+ ?8 i0 X- E- Y0 | d0 U RegSetValueEx(hKey,
& C+ [# H: {9 k% ~- S( O _T("Driver"),
/ v1 h. x( J: l) |& R 0,
+ ^1 N; E, C7 p2 n$ @; r6 H4 T REG_SZ,1 R$ }6 L6 J4 M/ y4 |
(const unsigned char *)((LPCTSTR)strDBDriver),
; w( M3 T) N2 r M" x% }( w strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
& h3 A6 x8 ]: v: T8 S- r7 `$ i. x6 x. v) f2 E- u$ C$ Z" e+ W$ g6 z
RegSetValueEx(hKey,8 `) C4 c; i5 W& h( T
_T("FIL"),1 r7 s9 C+ s3 r. e
0,
% y) o" ~ k" w9 x- w REG_SZ,
( W d* x$ Z% X8 d4 C7 s' L$ i (const unsigned char *)((LPCTSTR)strFIL),
$ u* L+ ?+ G9 M strlen((LPCTSTR)strFIL)+1);//表的类型& R( K f. c d# G1 F3 _$ S- |
, k( ~5 d/ C- n: Z' w: ]2 R; y
RegSetValueEx(hKey,. w/ R: D0 t" X. P
_T("UID"),
: \, g1 D$ x' h4 N! {) ]: X% T 0,: S% [% B; K5 ~! Y7 n: q& H3 @' d) ^
REG_SZ,! z5 r. n5 A1 j. f; `. |
(const unsigned char *)((LPCTSTR)strUID),
' d4 W7 w1 x- v3 n7 l# v1 i) M strlen((LPCTSTR)strUID)+1);//必须项2 ]8 D" q i2 {0 Y1 d. \
+ Y2 T( G8 b1 S. c8 r; |( d% g8 S( D( V1 F' B# k$ Y
DWORD DriverId = (DWORD)25;
% l) A. h/ s+ `! C" f5 @; S RegSetValueEx(hKey,
/ ^( @# K: I. G- E) V _T("DriverId"), u0 u5 ?: Y- j
0,
7 \( n0 a( t! k, B5 B1 n4 n REG_DWORD,
! w! S! t5 W5 Q- v/ K' b/ a9 J (const BYTE *)(&DriverId),
6 e0 f' y4 _ C" X; S# y sizeof(DWORD));//必须项
! c7 H6 \: S: E: G7 C" `2 e 1 K5 X2 l/ }9 c+ A
6 l( o# E0 ~2 W, V* ^, S1 U9 H. A DWORD SafeTrans = (DWORD)0;
1 \& e& ^+ K0 H a) a2 F RegSetValueEx(hKey,
5 L4 O/ a) R: u1 y9 |* R _T("SafeTransactions"),
( ^3 M" @0 s' X1 ?% K' ~1 {: s 0, W( b# p) W" `4 x* ?3 h
REG_DWORD,
D; [+ z% r7 p (const BYTE *)(&SafeTrans),
! E3 ^9 K* ?$ `& ] sizeof(DWORD));//可选项4 s, f0 @( h6 x" s0 @
}
r* G E. P# j4 Z4 z
" [0 Q! P z U0 B) }7 Y) @6 T' M. y ( N+ a- \' d: N% K; ?0 _
# P$ k$ [+ Y' n& i9 u+ [' e
调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|