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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
/ @* U# J5 y' N6 N
# K' ?- e* Q+ n7 J; r& Tvoid RegisterDBSource(CString strDSName, CString strDBPath)
- E! s$ o$ A5 W. W; f2 x{
5 @- R4 Q8 L$ i5 q9 { HKEY hKey;6 T; C( x: Y  m2 J2 t
   DWORD nLabel;
5 P+ e( ]' @* h- Y1 {5 i( j5 D& q% o& u" H, I
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
) o: L: i. [# O0 v; J! `3 s) ] CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;  ~+ m- e( f3 \
6 g7 H0 W* ]7 \
if(strDSName.IsEmpty()) return;- r6 a3 U- ^$ g
if(strDBPath.IsEmpty()) return;
1 ]* T. \: X' P5 Z5 A0 z9 f3 h
; E: }& s4 z( G7 B* ?+ _ CString strDataSource = strBaseKey + _T("\\") + strDSName;
/ L% ]. _, D% @1 ~
* x/ g! x, F4 X  Y6 |5 E CString strMdb = _T("Microsoft Access Driver (*.mdb)");
' d+ @0 X* v$ ^4 W2 b CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");$ ^: M2 B* s9 j; s4 z: @: b, X! b' z
CString strFIL = _T("Ms Access;");
) f0 L) ~% Q- _5 u5 H& W( } CString strUID = _T("");
8 w$ w% m' ?2 v3 a1 r$ x+ t+ x5 P" {7 k0 ^6 h! |! ?
4 i* g4 _, s9 Y8 M  P

2 [& Y) X0 K) \' C RegCreateKeyEx(HKEY_CURRENT_USER,  ^% C1 T" B% _: }7 W+ W7 W6 J( a
             strMid,; V" i9 _; ]- ^" n5 e0 H
       0,
3 h- t9 n- d; p     NULL,
" a6 ~7 X1 h- ^/ J  u     REG_OPTION_NON_VOLATILE,
$ E$ [8 n& i+ A6 |5 \' `5 r     KEY_ALL_ACCESS,
, k; t3 A+ c7 C! {     NULL,0 ]0 O& \8 F5 e0 k3 {
    &hKey,
6 }6 z0 q8 L/ ?2 \     &nLabel );//获取数据源键值句柄& p6 \! G$ [4 i* a3 j$ N+ t

. o7 d2 ^% u; e# X) c RegSetValueEx(hKey,
0 p8 e0 _* M" W$ a* A, x      strDSName," g/ R6 p7 \! ?: b5 p
     0,
& P) u! {+ ]0 g$ H- F* ^: v* ~2 q      REG_SZ,
7 f, h# }7 O8 Y9 A8 r      (const unsigned char *)((LPCTSTR)strMdb),3 q. `8 J+ }( T! X- N# Q- ?2 U$ a% Z
     strlen((LPCTSTR)strMdb)+1);///设置数据源类型7 G) p9 `/ y3 T, S! T

2 a8 |, I6 ^- d RegCreateKeyEx(HKEY_CURRENT_USER,
# q' ~! E% q: g2 @% J: u1 b          strDataSource,/ u& ?9 i( R6 N
   0, 9 w3 x# u- q; \0 q  @
   NULL,
8 f$ y7 {. i; i$ y2 K; `  s    REG_OPTION_NON_VOLATILE, - J$ o$ T. w$ u9 e. g4 f: |! A9 d
   KEY_ALL_ACCESS,& W0 H2 b0 n$ R" x( A
   NULL,' w% h; T6 J' P2 f; S/ E
   &hKey, % |* m% }" x, @% ]$ ~; [
   &nLabel );//创建数据源子键
5 o0 b1 g/ e2 j4 z, Q8 G' n& ?, r# s2 z) ~+ J9 ^1 h; T( X8 s- S2 ?
RegSetValueEx(hKey,# p* ^& X* `8 z
     _T("DBQ"),$ z' H5 ]8 A4 R; v9 c
     0,% o* [) B1 S6 z5 m; V3 ~
     REG_SZ,0 C/ D6 h' U, i; _- T7 Z
     (const unsigned char *)((LPCTSTR)strDBPath),
9 J# e- E; O$ I# H' x- c  {1 ^6 X' j      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径3 _( U/ k: e" |; V" e

; c. {  R; C" ~; W: i; f+ v) Y  RegSetValueEx(hKey,+ L& V  g; k4 v
           _T("Driver"),
% q+ X7 b( ~6 _4 C      0,; d% |( _' g' v9 K2 H
     REG_SZ,
/ h# Z, I) i: B5 [; K0 \* D% s! A      (const unsigned char *)((LPCTSTR)strDBDriver),& C  Y' W* `& j3 a, @
     strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径* d1 I& f$ d. }3 h5 K; [

* Q6 b; r3 H  P; T RegSetValueEx(hKey,0 f" S& M2 j) c4 Q! s- o/ w/ N) N
     _T("FIL"),
6 s7 W$ }' _' t' _( {      0,
( B5 ?# A$ ~. J3 m$ p: k, b/ H      REG_SZ,
8 g& r& }4 ]. ?3 ?      (const unsigned char *)((LPCTSTR)strFIL),2 k1 ~5 `$ W: w$ X& v9 K: W* p
     strlen((LPCTSTR)strFIL)+1);//表的类型
0 @" Q. k7 X/ M9 G6 K9 T9 f9 m0 Y5 F) p, h% F9 ~; C5 f& O: `
RegSetValueEx(hKey,
8 r0 h% B5 D* T6 Q3 H      _T("UID"),& ]# D$ \  A1 T2 `5 T1 N( @* ~
     0,
- {8 E& h# t, H8 @" W      REG_SZ,$ \$ T; J0 G7 t8 g2 b3 q
     (const unsigned char *)((LPCTSTR)strUID),! r0 Q( P* G- j. w1 [" P
     strlen((LPCTSTR)strUID)+1);//必须项
* |: m8 ~5 x+ q# D/ r' F7 U, t2 i5 _4 m4 D/ s
' h$ _% n9 E4 f! e
DWORD DriverId = (DWORD)25;, c0 W% T4 u( V9 x  J2 G0 }) H9 @
RegSetValueEx(hKey,
0 P$ Q( P) \4 c+ E& i. r     _T("DriverId"),
; R5 c1 |: [! ?& }     0,
+ h( U5 b& m) L) s+ q* q2 ~( V     REG_DWORD,& N' W' K7 x2 g  m& e5 H
    (const BYTE *)(&DriverId),% Z( Y3 R1 D% P+ L0 s
    sizeof(DWORD));//必须项" d9 W2 N- K5 {5 x" E, z' M. c8 ]

5 u) s+ m* s9 |. N: d
/ }7 _& u" {  x  l DWORD SafeTrans = (DWORD)0;
5 _* h% ?% `$ `6 T( N. Y RegSetValueEx(hKey,9 m5 H- S) {* l. U
     _T("SafeTransactions"),( ]$ {& X; p) V2 ~: L9 }
     0,9 g: `" X% {) N6 v& `
     REG_DWORD,: ^# [- H' a9 X# [- J
     (const BYTE *)(&SafeTrans),/ Z6 h; A! i; ?) B: I8 H
     sizeof(DWORD));//可选项- Q% q6 Z! F! h* o! |
}
9 X4 {( g* y; C8 E
: v! q0 c: K& q& i; L: b( g3 d
( l2 w& P4 r5 `/ N+ ~0 G* {8 k6 e' w0 n
调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-14 18:11 , Processed in 0.017882 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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