|
|
主要代码如下:
3 Q" m. C8 U* }+ E! w+ l S, ]- q/ c) z. z0 `2 N
void RegisterDBSource(CString strDSName, CString strDBPath)* U* B/ M& M9 U% f2 b @9 w
{
. w7 y, h1 d* E: t P, m HKEY hKey;1 N. r9 ]( V0 P/ ]8 t3 r
DWORD nLabel; $ C: X# j, V, \9 S. _* [) {
" k+ @1 q" i& g) Q CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");9 i5 j. h+ G1 P' ]4 e/ Y
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
! n- D4 c7 p2 w3 x8 d( x+ K. x- I0 E' ^3 p3 y5 ^
if(strDSName.IsEmpty()) return;
% T# T6 n2 {- F: O% O8 i& b" X- E if(strDBPath.IsEmpty()) return;
. C! s( q" m7 F1 e& h
$ O# N7 b9 e$ q9 J$ l) K( Q* T3 P CString strDataSource = strBaseKey + _T("\\") + strDSName;* v' m' k& x( w6 F8 |, E& E
. v$ v# b3 ?0 s# f f" g o CString strMdb = _T("Microsoft Access Driver (*.mdb)");& K) n+ M' `4 _$ H6 e
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
# l @0 q5 y; e5 ?4 F" D- D CString strFIL = _T("Ms Access;");
# h$ M1 P6 a# J3 w1 W CString strUID = _T("");
i$ s( @: @) y8 C( |# P
% O, O3 J9 q9 e! `
0 Z) }; z/ A' a6 P8 b% v
. E+ t' u% N+ l1 X: I RegCreateKeyEx(HKEY_CURRENT_USER,
1 E k" s# m6 A! P strMid,
A* y0 e& ?; u# ^& {- U) J 0,
: `- E% O B0 _" l NULL, : G! c! f% q6 a* n$ h) c
REG_OPTION_NON_VOLATILE, 6 ?0 @; B" y2 V; ]* u5 q
KEY_ALL_ACCESS,7 _. C; Q5 |" j4 h7 O) g3 [( B
NULL,
9 x8 [" Y ~ k &hKey,
0 h- z5 M% X2 Q &nLabel );//获取数据源键值句柄
$ A/ W) p$ [% v3 W9 g* u$ s* T
; N2 ]# t# k: Y7 p( m) f% A RegSetValueEx(hKey," A5 f3 N; J* r( _9 B! k% |9 |( t: m
strDSName,' `1 c$ d& ~' O+ w, ^8 i6 @& C. @
0,
) \* A0 L, |4 M8 s( u REG_SZ,4 H2 O) I8 v7 N
(const unsigned char *)((LPCTSTR)strMdb),4 ^# K2 |# Y; p
strlen((LPCTSTR)strMdb)+1);///设置数据源类型- b0 W* W" @% P4 K- E; G
. W% n0 K4 }7 ^* _7 l0 O4 ?) b) y+ I, U. v
RegCreateKeyEx(HKEY_CURRENT_USER,+ V/ w7 \. J( M8 b( G$ V) ^+ Y
strDataSource,
# G2 H& U9 t9 }9 C2 o! p 0,
* y% q8 p5 X$ Y2 V$ F( K4 S3 q" J8 j0 p NULL,
5 z Z9 x3 E9 o6 w REG_OPTION_NON_VOLATILE,
& q8 ~+ _# E' {/ Q" p' O) a KEY_ALL_ACCESS,! z W( I k6 [; a6 I
NULL,: X* ?9 Q0 p$ A- Q7 c' a, S
&hKey,
) I7 Q* D+ P* g$ f8 f8 @; \ &nLabel );//创建数据源子键; Q2 h; S p: D
- R0 z- M/ n. r. S; [8 Q1 _ RegSetValueEx(hKey,* ~+ r% s* X3 D+ O0 z/ ?7 P. }
_T("DBQ"), r7 G0 T2 H8 b0 K! j
0,
! T- ~/ k& F( ~& k2 a8 B$ B REG_SZ,# e2 m, {4 V: k) B
(const unsigned char *)((LPCTSTR)strDBPath),
2 n0 Y: a: _5 G" Q6 d+ ] strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
4 \; G6 ~: V/ S+ ]2 q# ]: @; N- m* O; v1 l4 l g; I5 y# h0 \1 u
RegSetValueEx(hKey,2 k9 O; W2 z2 c _: R) j4 B
_T("Driver"),8 H0 e. V3 ]" _, Y) S
0,
+ b8 r4 @: U' c" g+ G, @0 V# Y REG_SZ,
6 D# i8 @* X0 l (const unsigned char *)((LPCTSTR)strDBDriver),. Q n* P/ `! y7 R- A8 L3 M" w
strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径1 X, j. H. i9 F2 b- m- b% p C
; x& x9 }; c* f& d: Q2 d RegSetValueEx(hKey,
5 D; m0 V7 x% G _T("FIL"),: X+ [8 j# d3 P% B
0,% S- i) ^+ c: v3 d; K
REG_SZ,
; r; H- P2 V+ R2 g4 y- a (const unsigned char *)((LPCTSTR)strFIL),
# V2 w9 C, b+ [ strlen((LPCTSTR)strFIL)+1);//表的类型
) Z9 g3 w9 B+ }% M
. ], R# Z, E1 O3 g4 J$ u RegSetValueEx(hKey,0 x) p" f8 ?1 i& z! e3 j5 C
_T("UID"),
6 D0 A. R* f/ _& O' n! S4 { 0,
( d/ `+ B9 S+ X* E8 [1 i9 e# P; U REG_SZ," W9 z# a/ J1 i7 Z
(const unsigned char *)((LPCTSTR)strUID),
w% E" F% @' [; P5 p+ l/ A strlen((LPCTSTR)strUID)+1);//必须项
1 g Z% Q2 ]% }4 B% B3 j+ X0 F
9 {. {& @3 p8 q* \5 M
! E, m% Q; V1 [5 } @ DWORD DriverId = (DWORD)25;
2 _8 r0 w+ n+ G3 Q6 m7 C" M RegSetValueEx(hKey,7 b6 i7 q6 H/ S4 ?) z$ E) k% A
_T("DriverId"),
6 r# z1 u8 h6 y, _8 b* W2 N' ~ 0,5 U* Z+ \+ m5 H
REG_DWORD,' r" i6 S+ b' C1 P }
(const BYTE *)(&DriverId),
& k# ~4 g$ B& z& N5 D sizeof(DWORD));//必须项
; g ]5 H" ~3 [3 V
: O2 v1 j; [6 [; Y* v4 H% k
5 b! [8 T# l. \. c! A0 O DWORD SafeTrans = (DWORD)0;' {- M$ v9 @) |& X( |
RegSetValueEx(hKey,9 ?' v) f6 e" x% e; F5 y
_T("SafeTransactions"),3 U j7 \0 E1 J! `. K D: U
0,/ P, ?! ]9 B* A2 i3 {
REG_DWORD,! R: E. [1 Z7 H
(const BYTE *)(&SafeTrans),
0 h0 h6 i' E7 P+ {; V$ {% v1 w sizeof(DWORD));//可选项
2 ^# z5 m' f- C. u- x}! b; Q2 L; O2 c; _* U
& P2 x b1 m o1 i( S4 w% v 6 L3 i+ z, M. b' T
3 W7 e! Y% C, B- W! v; Y调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|