找回密码
 注册
搜索
查看: 4930|回复: 0

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
3 v% l$ w% N- _3 C' @9 U
* ~# O; m' Y+ j4 D( E) q, avoid RegisterDBSource(CString strDSName, CString strDBPath)
- B7 u) A4 F% {9 u9 C6 f$ l- i{+ }) |# b+ z: d- }0 Y
HKEY hKey;6 t+ j  }1 ^0 s! [
   DWORD nLabel; , s, M/ l" @" u# x- K  I& ?" E9 h& w
7 a* Y0 ]0 `8 n  D2 m& P, A
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
+ t4 J% A( K5 c/ {3 v, [% q CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;1 ~/ s: D7 e" y% [  {& O# T

- Q0 u3 ]3 Q, Y' \) u. { if(strDSName.IsEmpty()) return;* u2 Q7 b  O0 C# P& M# x3 ~9 U8 Z
if(strDBPath.IsEmpty()) return;
) i. V" S. |9 t: z
8 A. n$ I1 Q0 g, |3 A CString strDataSource = strBaseKey + _T("\\") + strDSName;
8 `9 G' ^' p+ Y# Z, f9 |& k4 v, k
% e; w4 h; Y! [ CString strMdb = _T("Microsoft Access Driver (*.mdb)");( y9 }8 {- j' f9 R7 F* r4 ~* l; q! n
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");& l  \7 }$ a$ L# L! i  W4 S) `
CString strFIL = _T("Ms Access;");
3 E6 d6 b$ m% \" x2 k, f, c% x; {9 _ CString strUID = _T("");
) B8 y0 p; Q- _8 ^' I5 W; B* z
0 \6 `4 ?8 R# R$ z5 y5 L
7 Q- @5 j, k+ [! o
) v, B6 {' c' U- [) [ RegCreateKeyEx(HKEY_CURRENT_USER,
4 D9 d1 a6 T' s7 o' e- {1 h              strMid,) H; ]( S8 Y! H+ L" X8 G9 z* O
       0,
6 f' _2 O$ E+ A$ `+ k3 e; V& m     NULL,
% Y( _- G/ {. m4 N6 F) Z     REG_OPTION_NON_VOLATILE,
* \- o7 ?) q) M8 v3 t, Z     KEY_ALL_ACCESS,) @) h: M" ^* p4 `, m5 m1 Y6 P
    NULL,
( T; i  |6 h. }& T; P% d+ X$ |     &hKey,
3 R* t' h2 j+ s* N( O" [/ |     &nLabel );//获取数据源键值句柄
( M% E  x& u' z5 u6 D
8 T* T+ ]  C) M/ I) x1 b RegSetValueEx(hKey,
" E) a6 B3 |7 q      strDSName,
1 d5 W. r. W, [( W: }      0,
. x9 {/ V' ]" V' _0 d* l      REG_SZ,/ ~* e9 P2 j, D! C
     (const unsigned char *)((LPCTSTR)strMdb),2 T2 A( Z; ^& H5 n
     strlen((LPCTSTR)strMdb)+1);///设置数据源类型
# Y- i# W* v: N8 j  g8 J! p
" ?( `; w& i$ R; F: V2 t RegCreateKeyEx(HKEY_CURRENT_USER,$ x3 z1 ~' I) J' `' C
         strDataSource,
9 t% k5 f$ E4 i* q, m: z    0,
( [! k$ c0 X% W    NULL,
5 l: L' R- d& ^4 W/ L7 H0 u; I1 J    REG_OPTION_NON_VOLATILE,
9 t+ l; x/ v5 _' n    KEY_ALL_ACCESS,- J) N# ~( n* E4 _9 Q7 \! ?/ o
   NULL,
- E( Q3 Z7 |' B! v6 L- w' z    &hKey,
/ g* `- u8 z- [9 k. l! R& l    &nLabel );//创建数据源子键! G* E/ f8 V1 h& e/ n! P6 k
1 b8 |2 |1 x/ a& b8 u
RegSetValueEx(hKey,
$ n0 w5 ~* J4 X6 D4 U  `6 R' L) `      _T("DBQ"),; e- w; |% f! F$ t- W
     0,
% d4 Y: U/ z+ a; S7 }/ [/ D/ @# G  m      REG_SZ,
4 q+ O/ o3 L3 l- y8 r! a      (const unsigned char *)((LPCTSTR)strDBPath),
, E* C5 E0 C$ C9 q2 M6 Y      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径1 M7 ~) K1 X* C: T# a$ Q6 n

3 b$ b: O, j" z( X1 ^  RegSetValueEx(hKey,
) {0 K6 E" Q4 j& K            _T("Driver"),
; V$ b$ X. M0 _* c( @( F      0,
9 B: J& W( q6 l7 N4 x4 W' U( K      REG_SZ,
- G% |& S0 f3 R5 L( F+ ^, \      (const unsigned char *)((LPCTSTR)strDBDriver),
, ^3 y3 g  q2 k6 i9 A* y      strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
) B( [* Z3 e, q+ ^! b
" H5 Y# w! K- n) A+ V4 f  M% l RegSetValueEx(hKey,6 k( ], M/ |1 U3 U
     _T("FIL"),
% v- a% v: X$ @0 ~+ n4 ~: f: j' A      0,) l# Y: X/ i  e  t
     REG_SZ,
# f$ F5 n+ y* e6 ]      (const unsigned char *)((LPCTSTR)strFIL),
  \( e9 n5 Y& g$ x. B% Y      strlen((LPCTSTR)strFIL)+1);//表的类型+ O" b. v0 i( Z" o
" Z4 Q5 H; M* k( J' k+ r' a# t
RegSetValueEx(hKey,* {( G/ C* v. F  y" y
     _T("UID"),1 ]2 E6 Y- E: Y: n! Q5 F
     0,  @& G# z3 A: }) G6 k
     REG_SZ,3 }& B! c" k9 ]# {5 D2 O
     (const unsigned char *)((LPCTSTR)strUID),/ @& i+ B, j) b
     strlen((LPCTSTR)strUID)+1);//必须项2 W6 }3 p- Z+ j% t& F
) z( s/ ~; N/ x

' s+ l  Y) g5 h0 b$ n DWORD DriverId = (DWORD)25;/ t. _2 z7 p# g7 K7 ?( O; K1 s
RegSetValueEx(hKey,
+ i: E) G% k$ Q" b$ b     _T("DriverId"),
9 f8 |+ ]+ t6 W7 }. g4 w  V     0,' A# n/ C! X* O! R
    REG_DWORD," s! b$ p0 t4 Y- j5 G1 s
    (const BYTE *)(&DriverId),
( l# a7 b  T% O4 o5 q: U* K. X     sizeof(DWORD));//必须项
# r  S! f! N% @' H7 f
/ S- [% s) ~6 D! d
4 B: T+ i+ Y6 I  z( m5 b  K6 F DWORD SafeTrans = (DWORD)0;( W( R% g' l- P( |& r. c
RegSetValueEx(hKey,
% D; j# C+ c8 b: Y      _T("SafeTransactions"),7 W* z* U7 z) h0 D
     0,
1 u" h7 F! O# ]/ N$ I      REG_DWORD,+ o3 h# p7 V/ ^8 U8 d$ U& `
     (const BYTE *)(&SafeTrans),1 p. Q( K* H) I$ B; s2 F
     sizeof(DWORD));//可选项. a3 c4 t, v0 u$ u; d6 l; |
}5 a7 \7 ^" ~0 a+ N) V$ H' \) N
2 N- c( V  _5 d5 Y3 t0 g3 }/ x' j
& Y: t, i. Z6 U0 u) c

: ~) @! T' z7 ^3 c# r6 e调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 09:01 , Processed in 0.018997 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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