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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
6 X) x2 v7 _8 O2 u
  g7 j6 t8 D: n/ g3 avoid RegisterDBSource(CString strDSName, CString strDBPath)
: M; l. ^5 \0 c  ^: z3 R{
0 i$ f! h! k: v( W% O HKEY hKey;
6 `$ t, z" B7 t  ^1 p: `) D    DWORD nLabel; 9 v6 v. l3 Z. s/ y; |6 x8 f

5 {1 b' X6 u1 x! f, m CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");+ l7 y9 U& E: G. }* x
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
' \- Z6 S# P- A4 k& r" x" `8 F/ o) X1 X9 E
if(strDSName.IsEmpty()) return;8 T( e4 b5 d* @) Z0 D4 p! w8 K
if(strDBPath.IsEmpty()) return;  ?) @) N( ^0 o) W: U, B8 Z$ V

$ y2 @( y  R7 @$ y CString strDataSource = strBaseKey + _T("\\") + strDSName;- @8 g; u0 O! X5 D1 V' X
+ i) x7 s# H/ q1 C. ]4 T* ~
CString strMdb = _T("Microsoft Access Driver (*.mdb)");; M" l- I5 z3 ]+ q
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
: t  M1 k% i# z CString strFIL = _T("Ms Access;");
2 p6 d( X, }9 X CString strUID = _T("");
% B% [6 P# o& C( w! |* m& Q2 \' ^+ B  T: f5 u
( e9 r1 V# K( f) v+ X
0 y# L  R" m$ W
RegCreateKeyEx(HKEY_CURRENT_USER,
' G' g" A& V  [, z              strMid,7 d- H' T, x( [% u0 u$ q1 F) m
       0, & h* y; U6 B; Z+ s( Y3 B& V; e
    NULL, " g# s6 }5 ]2 Q/ B/ Q
    REG_OPTION_NON_VOLATILE,
& B6 e. d& Y( [" L- j! q3 a     KEY_ALL_ACCESS,
' n* U+ T9 S, O3 V3 ^2 h     NULL,9 j! J& L7 C& S% S4 j# }
    &hKey, ! L9 _; M0 x' |9 o2 n  Z# B
    &nLabel );//获取数据源键值句柄! S  c1 {' ~. ?" B; n) s7 [- u

- |& Z; N. B7 ^- T+ a6 t2 D RegSetValueEx(hKey,
, U1 L) Z& |' B2 ~8 R; X7 ]+ E      strDSName,2 W% q) Q  |% L
     0,
7 f6 A+ |) B! w7 y1 K      REG_SZ,/ A. F4 f6 z. _- }+ s
     (const unsigned char *)((LPCTSTR)strMdb),1 c$ D, @$ A) y, u5 o  [- J( Y
     strlen((LPCTSTR)strMdb)+1);///设置数据源类型
4 }. I, r0 ^' ]* O
. |9 d- f3 O" V9 s# k9 `1 m  u7 L9 R RegCreateKeyEx(HKEY_CURRENT_USER,5 J3 E5 B# r5 q/ Z( q3 `
         strDataSource,
; F( C- N& {% v$ E+ c+ x: B    0,
' R0 T6 r0 ]4 `( _8 K; H* I    NULL,
( u' w1 Z$ ?7 X    REG_OPTION_NON_VOLATILE, ( F9 ^! ]& \& ]/ T$ v; ~% o, z
   KEY_ALL_ACCESS,. A( o% {" z# G7 W7 N& n
   NULL,
! G; A2 f8 I/ A4 H% q; Q4 ]5 ?    &hKey,
' M. E  j2 ]7 V$ M    &nLabel );//创建数据源子键8 c& q. i) ?2 r
3 T& [! p4 U2 Z2 b7 E
RegSetValueEx(hKey,* R6 e  Q: B7 b2 m- M4 P2 B
     _T("DBQ"),6 U! ]& z8 g( k, M
     0,
4 [% t! I8 m: f$ y( m6 }$ z      REG_SZ,
% S8 B4 D4 h% v      (const unsigned char *)((LPCTSTR)strDBPath),: [1 i& n: y* F4 a" X  |# S
     strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
, R! c# J  {! l
  G  x& x; w$ r7 ]* V7 p  RegSetValueEx(hKey,  T  g7 i" y2 h. }' R! V. m: y
           _T("Driver"),7 Z3 v. W+ L# Z/ ^: x' o4 |
     0,  m8 _8 D; T- K5 M4 Y- }+ w/ \3 [. u- d
     REG_SZ,. T7 Y8 }) x7 L/ ^; y( X; P
     (const unsigned char *)((LPCTSTR)strDBDriver),
; @0 Z7 d' D6 p& T' D: Q, U, F" c( R      strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径  Y+ _+ H  P: N5 Q4 \. g# R: @
$ n, v, `2 ?+ ^) S
RegSetValueEx(hKey,
& C/ f7 @7 b" z' @7 n: T# L      _T("FIL"),
7 e; u( _: W( M8 a" i' L/ e      0,: _$ u5 ]* _7 A) [; w! M
     REG_SZ,: H1 D& r& p; Q5 w+ V
     (const unsigned char *)((LPCTSTR)strFIL),
( G8 P" j6 M- U) b: n      strlen((LPCTSTR)strFIL)+1);//表的类型
9 E9 O3 h* c2 u
$ O0 y* t' F; j# t0 b* F RegSetValueEx(hKey,# y" a( M8 @/ t, v% s
     _T("UID"),6 ?5 K1 X) j# O/ u4 |+ e) t
     0,
: e* F9 p9 r# G' t      REG_SZ,- Q* f5 Q/ z$ I% z8 ]
     (const unsigned char *)((LPCTSTR)strUID),3 b0 g( a1 h6 E- U# w4 Q( v& W
     strlen((LPCTSTR)strUID)+1);//必须项% e2 @' U2 I- X+ A$ `9 c7 y

  g' F+ w7 M+ e: W- M  ?6 _( k: {7 X" L4 U5 I4 d$ w) c5 o
DWORD DriverId = (DWORD)25;+ K8 y4 t9 K; B* }
RegSetValueEx(hKey,# L& ?8 I! }! g" k
    _T("DriverId"),
# Y2 P4 C# i2 A( g% N     0,3 Z& Y3 [$ v1 f: Z4 s
    REG_DWORD,
. t/ ^3 _; C( i0 w     (const BYTE *)(&DriverId),  M' [5 k4 j0 T0 y- ^
    sizeof(DWORD));//必须项3 D2 X0 ^6 L4 F9 U0 ^' ?+ h6 `

  x9 b+ U0 Q. F& Z
8 R+ X( \2 ]. {7 d& _1 o) Q7 m* q DWORD SafeTrans = (DWORD)0;
  V+ |  a, z& U+ v! I RegSetValueEx(hKey,
0 F$ `9 F3 |. _  R4 V      _T("SafeTransactions"),
  l$ [1 X: q/ K- U  ^; O7 t      0,
8 w& b! s3 q/ c1 ^! v* u      REG_DWORD,
, U6 c. J) B3 b: Z9 _* C      (const BYTE *)(&SafeTrans),- l3 f  E0 V* m- J2 C) n! G
     sizeof(DWORD));//可选项! C) ~/ c( P1 q" H  s" g, W, M) z
}
- [- {& @2 \; \2 J0 [" `
7 d% }' x4 G' h; d
# b1 N9 r% I' D* }
5 E5 f( W/ ]' X1 ^8 s3 b调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 08:14 , Processed in 0.017634 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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