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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
8 ]5 C- v5 N5 `$ z. f
6 C- D  x4 J% d. Qvoid RegisterDBSource(CString strDSName, CString strDBPath)5 v* l' `8 a% k5 R' I& ]
{& H  j. w# |) e/ U7 t$ q1 l
HKEY hKey;
* a" e4 j, L9 ~    DWORD nLabel; : O* t1 X3 b9 i" V! `7 m$ b* L) `

2 [7 X* i- Z3 e+ l! a CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
! c; H6 p8 V! j+ S. E! E CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
8 F" V& V+ o$ J0 Z3 V  K- F
* C3 D6 M, N& t' V9 m( [% h, q if(strDSName.IsEmpty()) return;" j3 n+ p; k- g: ^0 K5 F" D: e/ l0 ]
if(strDBPath.IsEmpty()) return;
8 f: n' T  z- {; t' \9 U! J6 c$ ?+ Y
CString strDataSource = strBaseKey + _T("\\") + strDSName;& R( L) D2 Z. C8 m
- o# a, r1 W& [5 B9 d
CString strMdb = _T("Microsoft Access Driver (*.mdb)");
3 Q+ `% D+ `# x! v' _ CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");+ a+ i/ i  J6 I9 T* H
CString strFIL = _T("Ms Access;");5 t8 ^! m9 p3 t' R
CString strUID = _T("");, I- t5 H; Q* [& y

6 G' A8 G1 h3 R$ S * I8 ~! g' m' Q, n
7 _" e/ i9 ^8 p* B9 T
RegCreateKeyEx(HKEY_CURRENT_USER,
1 W1 N8 A6 ^9 U              strMid,$ G, @' H. G; Q8 g9 P/ R
       0, 4 x# K* F# m6 h. e
    NULL,
, J. g! _! R8 e: ]' ?/ _. s     REG_OPTION_NON_VOLATILE,
% V$ ^( u8 ~2 j0 k$ O/ {/ X     KEY_ALL_ACCESS,+ s) A% C/ o* P) W/ m
    NULL,0 A6 H2 L% |3 A  J' O
    &hKey,
- |. p4 W/ s' _) j# ~1 v, h- I9 L$ C/ e     &nLabel );//获取数据源键值句柄% D$ m. y! Z3 g2 c' p& t0 }3 X
: j0 y. o6 n, J: {
RegSetValueEx(hKey,
- T1 v/ Z; M- S; o  }      strDSName,
% e8 L: `4 V: {; B% g! [5 y      0,
% y: s6 t1 ]  Z/ g/ a1 w      REG_SZ,
5 r- B) z5 B7 |  l' o0 c0 h$ j3 p* U      (const unsigned char *)((LPCTSTR)strMdb),+ u6 `0 k! v% E1 c8 q: z' ~  f
     strlen((LPCTSTR)strMdb)+1);///设置数据源类型
; _. G1 Q. x8 j* }. P9 X% Q! z( o$ H# ~7 D# Q8 b, Q% h* w- P
RegCreateKeyEx(HKEY_CURRENT_USER,
- C2 W/ g! F$ `# y- V0 _          strDataSource,
  y$ K7 W- ?/ s+ y8 R# |( {$ }    0,
) a9 S4 W6 j, a3 M2 J    NULL,
* I" z1 \% \0 s0 @# y# {1 r; B6 v    REG_OPTION_NON_VOLATILE, # {2 D4 x) _2 a6 U
   KEY_ALL_ACCESS,
' H) y( A6 n8 j3 X    NULL,
' x, _6 p: ^" P8 S9 A+ a    &hKey,
4 `- t# `( \$ H/ A/ t( i1 ^, c    &nLabel );//创建数据源子键8 [, K! U& `3 z# \0 Q+ e7 z
8 M6 Q! J3 F. ~- W  \
RegSetValueEx(hKey,* Q, O3 n4 e/ l; c, z8 S  k
     _T("DBQ"),. U/ _' Y/ \; b8 ^" d0 v3 Y1 B! q
     0,
2 R9 _: W4 [( c) ^      REG_SZ,4 s7 u+ b  `- |- ~) ~
     (const unsigned char *)((LPCTSTR)strDBPath),
# {% J0 H- b. S      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径9 E' I9 G( Z6 Q4 w2 f5 z4 _3 @% a# _

$ `  Y+ {: A+ X% _, u  RegSetValueEx(hKey,& p7 G+ t- q3 _% h1 f8 H' E9 R9 g
           _T("Driver"),( y+ y' F% _" D/ H) o8 Z
     0,
; e. C$ s, B/ M% N6 A      REG_SZ,
" y% W7 l- N9 q      (const unsigned char *)((LPCTSTR)strDBDriver),
" b( p0 {4 z6 ]  Z/ s3 _: @1 R      strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
1 @$ i! r( i) q
5 x0 q1 }# I% X' h7 E5 \" |. x RegSetValueEx(hKey,
3 h, u5 @: {: ^8 u' H      _T("FIL"),! T; Y2 Z: s# ^: S& A0 y% }6 p
     0," P. s( g0 |* L. k& Z
     REG_SZ,! r5 e1 p; Q  _) L
     (const unsigned char *)((LPCTSTR)strFIL),0 l2 [7 {! }& Q* U" i0 v8 {
     strlen((LPCTSTR)strFIL)+1);//表的类型( p1 B2 ^$ w% i1 q6 m- i" r9 q4 d

7 P( y0 }1 ^5 p: @ RegSetValueEx(hKey,
: D; s0 Q/ H( w      _T("UID"),
# Z& u: D. J3 e      0,, u0 |5 ^8 K1 f" f/ T6 j
     REG_SZ,
: C: I2 m# q  B      (const unsigned char *)((LPCTSTR)strUID),
- _) Y/ ^+ z0 H' U: F      strlen((LPCTSTR)strUID)+1);//必须项/ u3 d: ^: g, d4 b0 x* b9 ]
+ i* H3 ^# n, D* @4 L

/ ^8 E6 Y8 n' Q$ z( G) O; p& V DWORD DriverId = (DWORD)25;1 f( n: K0 H1 r4 w; j* v/ }
RegSetValueEx(hKey,
' p! E) ]% E/ X2 W     _T("DriverId"),9 @1 ]" Y; V0 \- o& y! Y
    0,
% R8 t8 Y  K) d0 z# l) E1 k     REG_DWORD,6 k8 ~! O" Z, K2 n5 e! M4 l8 z
    (const BYTE *)(&DriverId),5 }6 l: i* T" G7 H1 G) T
    sizeof(DWORD));//必须项
/ |: U: V( U$ J4 L  u- ?5 X# e
( o4 L  w+ ^7 [, l6 M$ L2 s5 i% s
$ N6 n. S: w* X' J) P1 O DWORD SafeTrans = (DWORD)0;4 y$ h- d& K% R( o. v
RegSetValueEx(hKey,* ~5 M- z- N7 L2 Q5 n' {( i
     _T("SafeTransactions"),
% @( }! |4 r6 b+ P      0,
- U$ e% W  c1 f! K      REG_DWORD,* t0 w, @% |' g7 @/ `
     (const BYTE *)(&SafeTrans),
( }/ U& S% C7 a# t& A1 ^      sizeof(DWORD));//可选项: T& R& T. A9 D$ I  S5 m
}
8 `- k6 q- ]) ?) n6 M7 }# t
) C; q& \. ^! C
# q- {3 @# D: \, K% m: S1 B; h  I8 y1 A. g' \& i
调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-15 04:51 , Processed in 0.018652 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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