找回密码
 注册
查看: 4995|回复: 0

[收藏]通过写入注册表添加ODBC数据源

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
, n& K* [% O9 s" h! @* e# \/ k) ^* V; U; ]
void RegisterDBSource(CString strDSName, CString strDBPath)+ w9 E( g% I8 L
{2 H! f6 O' V+ k; [
HKEY hKey;: t1 c% P8 B7 }
   DWORD nLabel;
( c) |( p: r; r- D. j$ G
" }4 O! Z% y1 ]& m7 s- a CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
2 L1 u5 ]' ]9 O* r; _- q& j' } CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;: H. @% W5 I2 }* z
& u0 D: u8 J. B3 l
if(strDSName.IsEmpty()) return;0 E( Q4 A; W$ }6 m* i
if(strDBPath.IsEmpty()) return;' }4 V" p  I- D
/ F/ ~( w7 @! q0 V8 k- J+ X  e! N
CString strDataSource = strBaseKey + _T("\\") + strDSName;
1 Y* j  T5 Y3 o( y1 C) i) r; u8 {! d* `! R
CString strMdb = _T("Microsoft Access Driver (*.mdb)");7 r* ]' K& [  r+ O* v& G
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");& l0 m6 r( z: Y( |! N! N' |$ x9 d
CString strFIL = _T("Ms Access;");
. R- |6 B1 b; [& f( Y9 {7 j0 s7 _ CString strUID = _T("");# A) T/ D9 V' K% ~
( p* E/ c1 {# q9 E/ p3 k" i6 ^
5 q" N+ s2 n( L2 F

. H3 i* B* d7 p# v, j. R RegCreateKeyEx(HKEY_CURRENT_USER,3 G* ^% Y) [; o" t2 B  I: Q
             strMid,1 c# I) o$ a& a0 M1 f, Z7 s
       0,
/ {5 g1 y- Y6 q% [9 Z# j3 G  V+ K     NULL,
, g) w* ]8 p4 V  _; d1 H     REG_OPTION_NON_VOLATILE, . J1 M; }  n4 G* `0 l' }
    KEY_ALL_ACCESS,
0 f/ ~9 Q7 _$ P0 w0 G     NULL,
2 g. T- C$ g9 ^4 V- b! t& y     &hKey, 8 h1 y3 U; O; P) Q' n8 n
    &nLabel );//获取数据源键值句柄
3 N: m, Q$ w& q6 e6 I: }
0 {! s/ Z3 E& e RegSetValueEx(hKey,  o4 U. A. `" P; W) }+ n4 h3 [
     strDSName,# Z/ ?) q2 }) w; W+ L9 U4 @
     0,+ x5 G- y: P6 k8 P
     REG_SZ,0 t* Q7 \0 v2 j( F6 W
     (const unsigned char *)((LPCTSTR)strMdb),% U6 f0 V3 v7 l5 \
     strlen((LPCTSTR)strMdb)+1);///设置数据源类型8 ]5 m6 D& H' h4 X

- e1 B5 e7 p' x0 l/ [- } RegCreateKeyEx(HKEY_CURRENT_USER,
0 F5 g0 v  P# ^2 [          strDataSource,1 o! x4 {$ m* w& ~; t
   0,
; a2 \  k* z/ `    NULL, 4 f6 \8 v. ^$ x1 J) S9 _: ^! @+ r
   REG_OPTION_NON_VOLATILE, + J1 A2 [9 ]) r, o0 `# i
   KEY_ALL_ACCESS,
* v  K& ^3 ]0 Q0 V    NULL,' X$ S# Q% @3 ]" a% @& g' u5 k
   &hKey,
& u6 E. D4 E7 R0 _9 ^% z0 O9 x    &nLabel );//创建数据源子键
$ g, K0 y9 G0 p5 `% C
  ]: r# W+ Q0 O7 k RegSetValueEx(hKey,% s; ~% b8 v; R+ D6 Z
     _T("DBQ"),
% M; \1 c$ s. E3 ?: M      0,
, P# s/ @: A0 |0 s# ~: L, x% d4 e' R      REG_SZ,, J( y# S( F: `7 H* F6 Z5 {
     (const unsigned char *)((LPCTSTR)strDBPath),+ B6 z$ k7 H7 q9 V/ W" R  ]
     strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
$ [2 Y$ ?; ?; e2 L
& P2 C/ f4 I: V/ R) V: [8 ]  RegSetValueEx(hKey,
* n& Q8 p) e  P/ u( v8 |$ g7 K            _T("Driver"),
+ B+ X+ m: R/ G1 Z      0,: t0 ~3 k. M: E) I+ N7 ~2 S6 F
     REG_SZ,
3 a. C  ?7 c" J0 ?. D      (const unsigned char *)((LPCTSTR)strDBDriver),, O% l" b5 f% F0 x& i2 R( ~2 y0 i
     strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径) h3 \( v, {! f1 u( S& m

5 ^2 p$ r0 `, x# p6 W! B; P RegSetValueEx(hKey,; h2 W- T- S- s/ O
     _T("FIL"),
( i% X4 ]/ P7 u; f! ]8 J! y. v      0,  v8 I/ \- E2 P1 m8 @
     REG_SZ,
9 D9 u" ^' e+ k3 Q7 e+ b: u      (const unsigned char *)((LPCTSTR)strFIL),
5 S, U8 }* s# s& E- w- P  B      strlen((LPCTSTR)strFIL)+1);//表的类型
- \- h% u2 N7 I$ y5 `5 S) W% o9 w8 i& y: _; \' ?% ^- n
RegSetValueEx(hKey,
; S+ O& X- T. ?      _T("UID"),
( d% k4 m' C" B2 R0 J      0,
6 E" {3 u5 m% Q      REG_SZ,
5 k. ^+ N& F  u4 Y( F      (const unsigned char *)((LPCTSTR)strUID),0 G# n4 ^3 `( p9 ^$ W; q7 C
     strlen((LPCTSTR)strUID)+1);//必须项
* ?! v% i0 p1 S; q8 G. g* Q9 w& J3 i( d
# J- m' `# q2 G2 G. w0 e
DWORD DriverId = (DWORD)25;
- ~  ~: J) u% g6 `0 ^ RegSetValueEx(hKey,
6 ], S, \1 E- i  N+ d. {     _T("DriverId"),
7 t2 E; F. I7 m) b     0,0 b7 U4 k' I9 @+ c2 ?- {9 T- A
    REG_DWORD,
! y& M5 W4 M1 U7 k( w     (const BYTE *)(&DriverId),
7 Q. w7 G0 Z- R' w# e* M     sizeof(DWORD));//必须项2 E/ P. A) Z1 m: O! X4 |" i0 c
/ y. J7 j* O6 X1 \0 _& l

/ s+ `3 k! f0 t/ L8 F DWORD SafeTrans = (DWORD)0;
) [0 B; ^- t8 c* v; ^& t: D& p! D RegSetValueEx(hKey,/ r' s% ~' g4 h8 O
     _T("SafeTransactions"),
# C. A" L( J2 I" d7 P5 m      0,. s6 @" E: `- D8 V5 J  n5 C
     REG_DWORD,
- ^1 y8 |' s! Z7 V      (const BYTE *)(&SafeTrans),
( @: O% Q8 g6 R; g      sizeof(DWORD));//可选项; L5 U! ~: E6 P" p( N) G  m
}
5 |" F- h7 B( B2 {* o# Y9 n
, G* l5 U' o) f% w1 q 4 p4 a2 c* G* X6 r% O" R
4 a4 N" F, l3 D3 p3 c
调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2026-10-2 05:02 , Processed in 0.016449 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表