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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
, e( j  o% ~5 p9 y8 j
. I7 p# {- G2 v; n) m% U4 m5 @2 Svoid RegisterDBSource(CString strDSName, CString strDBPath)
7 u; y1 P* z+ P" y# Y* w5 o{
' e4 c& C/ t" e/ u HKEY hKey;
+ d) T8 c1 V6 i: k, M& V    DWORD nLabel;
0 y" N( x8 `8 t9 ]1 O; ]
3 g+ @9 k2 m6 ^% m CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
6 C1 f9 f+ b. A# }) a7 A3 f1 f CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
3 n: k6 c' @9 d# v; l) ]
2 t% H/ u: |) M& P/ u8 g% `2 c if(strDSName.IsEmpty()) return;9 Z4 n  ^- V; Z1 `& s. n4 v
if(strDBPath.IsEmpty()) return;
/ D: n5 }! b/ t6 c6 G2 b* U6 {; m% D; P3 ~
CString strDataSource = strBaseKey + _T("\\") + strDSName;
" I' I2 G2 i7 o) q9 r8 Z7 u# w# e. M: ]0 E1 D$ F3 \8 i
CString strMdb = _T("Microsoft Access Driver (*.mdb)");
$ ?& z) `) s( M/ b" G CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
, L7 D, N. ~4 X3 U7 J" q CString strFIL = _T("Ms Access;");( V" D$ o# F+ `- @' e: T
CString strUID = _T("");. Q; k  U: I9 H+ q" d
; M: o- |/ e/ Z! h
) u( g7 H  V! T' q* Y
1 s: C* k8 L3 G+ [: H# j
RegCreateKeyEx(HKEY_CURRENT_USER,
3 r6 r1 A0 O; W# i. L              strMid,% k& K. W# S$ W
       0,
7 e3 \; F' e1 s# T! C% I     NULL, 0 e, a* [- \7 X
    REG_OPTION_NON_VOLATILE, ) p1 \( r. m) V1 @9 K
    KEY_ALL_ACCESS,
3 w+ \5 Y" }  E* M$ t     NULL,; a/ |+ X8 O# y
    &hKey,
; `& V9 |  N/ D) V0 N) z, Y     &nLabel );//获取数据源键值句柄
  t" `0 a! E, E/ J& y+ O. E
2 {: s8 d1 L# m$ v' ^ RegSetValueEx(hKey,
  v/ {2 t7 Q, B2 \& |8 Q      strDSName,
1 e2 {+ h, j3 |" r      0,
0 z' S- z  M6 ~. G. q, H      REG_SZ,4 r3 V. P/ ~9 s3 S
     (const unsigned char *)((LPCTSTR)strMdb),
3 y) `8 T7 P, g) _      strlen((LPCTSTR)strMdb)+1);///设置数据源类型
: C. q1 V; D; X, @: ?0 _* A
! W+ D( M6 }, ^ RegCreateKeyEx(HKEY_CURRENT_USER,: L% ~4 D* s. h) z( l5 w& z  i
         strDataSource,
. B% [. a/ H7 _  @- T    0,
/ T( b! k4 K# f, D2 f  j    NULL, ' d* X. e4 a6 I+ j0 i( c2 V6 o
   REG_OPTION_NON_VOLATILE,
+ W; s* y# v; M7 {9 r    KEY_ALL_ACCESS,) d4 u* h0 h6 z0 I7 F% u- y
   NULL,
. |8 Y+ \) {& B7 e4 K    &hKey,   |: k5 T, G; i' e- |# p
   &nLabel );//创建数据源子键9 o& y+ v6 s& ~- p
. T* Y0 Z1 e/ A
RegSetValueEx(hKey,
/ D: i; V2 [! g* K- k      _T("DBQ"),- X) p7 d+ j- r
     0,
: p9 ~' r' b# x9 \' ~) D0 O      REG_SZ,3 F. B7 N1 y! P: f' e# b9 e' |( m
     (const unsigned char *)((LPCTSTR)strDBPath),( }. {' [$ f# s6 N
     strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径7 @% [- y9 a2 i% i7 J  C5 i4 f

9 u' C" |1 x8 P0 E# i  RegSetValueEx(hKey,
" `$ n$ F/ i' K9 r, t            _T("Driver"),
& A: V! k8 [$ t" K2 \( ~* s3 U      0,- L- r0 `; t- [
     REG_SZ,9 n/ @' P1 i3 v; s. u* _4 ?
     (const unsigned char *)((LPCTSTR)strDBDriver),- s9 M+ D0 ^1 x" x" \
     strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
' G8 p' w: z( q( R- r
0 V9 Z; ?' G: c RegSetValueEx(hKey,$ }% T" U/ B0 t! x
     _T("FIL"),! p4 g& j/ ^# C2 A' |2 C7 c
     0,, W+ T& b; Q. g
     REG_SZ,/ y+ t8 J, S+ r
     (const unsigned char *)((LPCTSTR)strFIL),
( t( t5 ?1 A5 y# E7 X: j      strlen((LPCTSTR)strFIL)+1);//表的类型: k- ~: W- L% E" F4 r

! \2 f8 f  ~" A; ~4 V RegSetValueEx(hKey,& ~) w1 C& n4 F
     _T("UID"),
7 g+ x# S5 X1 y) W      0,
7 _5 i, {0 ]# E6 Q2 |      REG_SZ,: c0 n6 }( |: o
     (const unsigned char *)((LPCTSTR)strUID),
" [9 `  h( M: R# u9 [/ h      strlen((LPCTSTR)strUID)+1);//必须项
0 G: Y" Z3 `2 b9 X7 T2 e! l+ y4 B+ X7 [* S1 b6 @
( S( ~+ {6 e# w0 Z5 `5 \* ]
DWORD DriverId = (DWORD)25;; c; J: p( D. Z
RegSetValueEx(hKey,
6 J2 v2 `1 Q1 r4 V; u6 t     _T("DriverId"),* y/ Q$ e6 H* I5 R1 `
    0,2 j8 W; s! X0 Y( [; f( s
    REG_DWORD,
- T2 s5 d# H, y5 A6 Q     (const BYTE *)(&DriverId),
* h& W( T8 h9 X2 F. w     sizeof(DWORD));//必须项
1 P  |8 ~) B1 Y# S1 g
2 K0 m6 q: U: X& A2 F! T( [7 s5 u0 I0 Z2 x6 u, N% X6 o8 T
DWORD SafeTrans = (DWORD)0;3 Y* d+ r6 M! x6 x/ Z5 `
RegSetValueEx(hKey,
) o8 u6 e  H2 f- I1 K+ ~      _T("SafeTransactions"),0 H+ G: ^5 K# l+ ~- p0 @
     0,! Q# K5 A4 f' d+ }/ [9 g8 ]& ?9 F& a
     REG_DWORD,5 x" E; I& T& N3 U8 y
     (const BYTE *)(&SafeTrans),4 m: @) X3 w3 b+ O  j6 w
     sizeof(DWORD));//可选项3 }( p6 u# N1 X  `3 s# B
}2 X( s. p1 F$ U) d* X3 l

' t. O, c/ }' M7 U
8 b2 D' J: v7 b- d0 q4 H) u
; d; R3 g3 u: O  z  i3 A2 j1 D2 Y调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 06:17 , Processed in 0.017633 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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