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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:. [, }5 u/ s3 F5 }$ C9 U
* ?7 s% q1 ^+ U7 F* r; f
void RegisterDBSource(CString strDSName, CString strDBPath)) G+ P+ ^8 e  S( }
{
6 v. b! |3 F) b# r; R1 B/ K- V' r HKEY hKey;# O0 x5 g! T3 n, q
   DWORD nLabel;
) S9 {' T7 [$ Y, ?' ?
% K4 l  T5 \) p* B# n- E CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");! x' s8 Y$ X' f
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;% ~+ L6 \7 D) t" e5 M* d

3 q1 p  e, k! `5 e$ e if(strDSName.IsEmpty()) return;5 m* p( F) K5 f
if(strDBPath.IsEmpty()) return;
( a8 l$ ]4 K# ], Z% N  O; b& Q6 [- o) i7 r3 r1 z* D* A% m3 G' Y
CString strDataSource = strBaseKey + _T("\\") + strDSName;0 O1 I( v) s  M/ E; d7 ^! Y

) N* z; }  A: l; j" j- T8 S CString strMdb = _T("Microsoft Access Driver (*.mdb)");4 ?, I9 `8 n8 @
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
  Y1 d/ b3 s+ J CString strFIL = _T("Ms Access;");  V) d: b: _# r+ N. X/ X
CString strUID = _T("");3 B" r; }$ {8 b
2 S$ q; U3 F( y
5 N2 S1 O5 S1 R4 x
* R& x/ U. ^; p
RegCreateKeyEx(HKEY_CURRENT_USER,  p* h. i: K' x0 J! S' E
             strMid,
% O. y& ^% R7 J8 o; O        0,
; K' C# j) O3 ~) ?     NULL,
' \1 A3 u$ e9 O6 A; U     REG_OPTION_NON_VOLATILE,
4 x) T( X0 l  S, D' B& k4 @& e     KEY_ALL_ACCESS,! E/ f% c8 R; G% `1 h. D& s
    NULL,9 S" C2 I. l$ z  g
    &hKey,
! Q5 ~* R; Y$ G% L3 T/ S     &nLabel );//获取数据源键值句柄$ ]/ A& X- }& s7 n) s! g  g  J

) [4 k) `0 X$ K9 {8 g. L0 E" A* E RegSetValueEx(hKey,- o$ z, s* O: ~0 n  d) @  \6 {  D
     strDSName,0 L/ f1 n( w. {1 i6 \
     0,; ?2 w3 H$ A" v; U& Z" c1 r- y
     REG_SZ,/ w6 V! \, B5 }
     (const unsigned char *)((LPCTSTR)strMdb),
  l) C3 G* }5 [. L4 U* d; [      strlen((LPCTSTR)strMdb)+1);///设置数据源类型7 ]4 [" D# w" P2 X/ y4 y6 U) U# ^
* B: Z: N& k. R. {% X  Q
RegCreateKeyEx(HKEY_CURRENT_USER,; B% q: _0 ^+ L
         strDataSource,. A; {5 X. C8 d' S
   0, # j' R5 k" X  @* ?% t2 H
   NULL, * g) k% q, L& @7 Z. p2 q7 m
   REG_OPTION_NON_VOLATILE,
6 m( H% Q7 V/ k  U( `    KEY_ALL_ACCESS,0 v: y) a+ u: L+ c5 F# P" m8 N
   NULL,
9 j2 ^+ X9 Z( F    &hKey, ) ^  g$ l  I: f2 M* _
   &nLabel );//创建数据源子键; L% o1 W! z- d) x/ ~

2 M# G9 \" u  n2 g- F RegSetValueEx(hKey,
* ?" v6 R' X' D; {1 N      _T("DBQ"),
5 M. Z! l7 D" W3 {* [% A      0,
  E$ |5 O( }4 [      REG_SZ,
5 [) f+ O0 Q' {! ?  u2 \0 b      (const unsigned char *)((LPCTSTR)strDBPath),
/ D' x" y5 T8 \* f. T8 {      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径6 t% B' a' q  y4 b8 r$ @+ B% k* Y
- s6 k2 w' x" D
  RegSetValueEx(hKey,  q( S; q7 n) R4 Y& A
           _T("Driver"),
4 U" w1 P, n% s- D; q( e( F4 n2 G# |      0,4 }, O% P. Y1 E. d8 N
     REG_SZ,
; P. E8 `6 H0 l, e7 M      (const unsigned char *)((LPCTSTR)strDBDriver),2 Q7 p" @8 ?  R/ Q- R1 r# e( f
     strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
$ g$ W% H8 |- ^) A& \! F$ p
& A9 ?" i# W4 G" I$ I RegSetValueEx(hKey,
* u1 \* u$ x% m      _T("FIL"),
3 g) O  Q- k1 n" \6 |      0,
' z6 f) _7 [* u& }4 ?      REG_SZ,
* g# Y3 x( }! I2 J0 j- B4 M      (const unsigned char *)((LPCTSTR)strFIL),8 a9 _0 \) l$ Q3 j) u
     strlen((LPCTSTR)strFIL)+1);//表的类型! z! |5 o6 b! e$ C- {. _: [
& R1 H. k) y) j# g7 ^; C
RegSetValueEx(hKey,
+ m5 a  p* {" A+ e3 n# P      _T("UID"),
6 H7 k$ `; s# m2 J3 W) i: V7 q* q      0,
8 `) {" S6 S. a      REG_SZ,$ x* k* h2 }. H% `5 @
     (const unsigned char *)((LPCTSTR)strUID),
/ k: V6 |* ?6 j' R, E! G  @      strlen((LPCTSTR)strUID)+1);//必须项; N% @4 n- k5 O; _+ K: }  B

- f2 n5 G5 T: |; ]
& e7 [3 S) m* ]+ a, q* {- ~5 P DWORD DriverId = (DWORD)25;2 e7 f  G3 t, g
RegSetValueEx(hKey,& c5 J6 {/ C, C9 g9 m) R
    _T("DriverId"),; C1 ?- s( ?+ y
    0,
/ o; Q9 P2 K5 P, B     REG_DWORD,! i7 Z" W. y3 t3 W: |# H6 [4 Z
    (const BYTE *)(&DriverId),& T' ]1 e% S$ l7 Q5 Y" e% [+ i
    sizeof(DWORD));//必须项
5 A7 {% V5 s. r. @, B& A" B
9 p- a: E: G7 g  {  V0 M: n# h8 c$ l: ^  E$ }, C' u
DWORD SafeTrans = (DWORD)0;- M- l$ S( W* b8 `% ?
RegSetValueEx(hKey,* U" f: U( B; A' c
     _T("SafeTransactions"),# X" t- {. D/ t
     0,3 c5 l3 a& n) c
     REG_DWORD,
% }1 x4 v3 d: X/ T      (const BYTE *)(&SafeTrans),! o/ m+ t1 r, Z; {! a! ?1 F
     sizeof(DWORD));//可选项* P. n4 y$ ]5 `; w- s8 X- ~9 S4 T
}
5 a6 C) y7 v6 u% l# _$ {+ r/ N, s" W0 g6 ~& T- K4 [

9 Q* o) ?# O7 V. _5 S* l1 l9 P; h$ S6 u4 B
调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 07:06 , Processed in 0.034053 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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