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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
1 n9 J1 B4 b* P
0 ]8 y% k/ }) r  Lvoid RegisterDBSource(CString strDSName, CString strDBPath)
& l% K1 ~/ f- q1 C{
8 @9 M) |: J+ }9 [ HKEY hKey;" m0 |8 k; C+ Q4 N9 L
   DWORD nLabel; ; V9 E. \$ @0 D& j# l- |
) u/ A' q. B" v/ t: S1 h% E9 t
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");, @8 y$ c1 P* g3 T
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
9 z  R! m5 L0 O5 s
1 t/ ^0 Q0 z7 ?8 M9 j' A6 E if(strDSName.IsEmpty()) return;; V5 D1 R" z. F0 \3 p  S% e7 \
if(strDBPath.IsEmpty()) return;% d5 d4 b7 H6 a+ b7 m

+ o: h- i4 Y6 @) R* E7 b: Y CString strDataSource = strBaseKey + _T("\\") + strDSName;
  m  c3 K- d' g5 P6 f' r5 |7 ]
( \$ Q: `7 i7 G7 R  S( M! z& U CString strMdb = _T("Microsoft Access Driver (*.mdb)");' f: h3 J; F9 c+ L6 F5 |
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");" d! Q# ?6 I3 X
CString strFIL = _T("Ms Access;");
, x8 Y  O& s2 _& W- J- ` CString strUID = _T("");$ Y+ g! l4 D; o1 h- P
* v5 |6 d/ P4 N* v

  }" _5 m$ w# @: ]( n
% |; C! p7 y# Y8 B$ @ RegCreateKeyEx(HKEY_CURRENT_USER,+ D9 e* o9 S2 s
             strMid,* W4 O% \& X4 O
       0,
8 u) T9 |0 g1 u8 j0 W2 x" E" F     NULL, ; t( M" |" r/ R+ s$ `) K" t
    REG_OPTION_NON_VOLATILE, . {# Y; d) I- F) @' h
    KEY_ALL_ACCESS,) Z2 g9 W9 q! ]/ L
    NULL,
. m! B, M% d- J     &hKey, 3 `2 r5 Z# y5 V* u
    &nLabel );//获取数据源键值句柄
' ]7 d/ q+ V  P- i3 A) Y9 p% ^: |8 D/ I, o+ P; J" T
RegSetValueEx(hKey,
5 G; c! U  Y9 z. d, f6 j# Z      strDSName,/ z# C5 |# |6 U1 X& s! p( ?
     0,9 |/ _+ i5 C' p' U- F3 D4 _: ~3 W' c0 y
     REG_SZ,5 m7 d) x4 B" g- v
     (const unsigned char *)((LPCTSTR)strMdb),
& I, _7 d1 T1 N& x$ d. |      strlen((LPCTSTR)strMdb)+1);///设置数据源类型9 r9 o# U4 `1 Y7 s

6 h9 P, V; x/ h& e- f+ L: X8 K RegCreateKeyEx(HKEY_CURRENT_USER,
1 E* E! [% C1 L5 Q          strDataSource,( X1 G1 d" C( g& F0 h/ y
   0,   u- B# V* x4 J4 i
   NULL,
8 B9 @- G7 S3 r( a( h    REG_OPTION_NON_VOLATILE, ) d* V  [4 V: Y0 G
   KEY_ALL_ACCESS,: d: |6 Z. O2 e' I/ a" h5 w
   NULL,4 P( {* Y) K# g# E3 }: b7 X
   &hKey,
) t( |, v/ h' I    &nLabel );//创建数据源子键
& A' }6 y2 {4 g6 b! N9 ^# C5 m# ?* d) r8 `- j& B
RegSetValueEx(hKey,
4 d0 ^9 F% @- t: ?( J) j5 W      _T("DBQ"),
" z  J# j" @) Y& K' r  `      0,
; Z8 c8 \9 b4 H6 @! }      REG_SZ,
$ K$ x. r5 c* h2 ~& V      (const unsigned char *)((LPCTSTR)strDBPath),
  z; v  D- O7 d      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径& ?, `7 _0 S; A- l: n0 x

1 x3 a, r) X+ b" l3 B  RegSetValueEx(hKey,
* h2 B" \0 f$ a0 k% p            _T("Driver"),
0 f. J  P/ Q5 f3 x      0,
* L7 _# b2 ~. A6 d+ W) w( z      REG_SZ,
% T* R0 O* _$ X& w6 }; E/ Y      (const unsigned char *)((LPCTSTR)strDBDriver),- }; H+ }& s0 E
     strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径; I% U+ ~0 Y1 u# a0 w( p

3 j7 r3 C" g; K$ U RegSetValueEx(hKey,
; k! H( o3 U+ l8 ]; V      _T("FIL"),
6 m; @5 G7 N) [+ A      0,
* e" w3 Y; l- R# ~  R! Z      REG_SZ,
8 p, ]! h' p) b6 {# o  F3 O4 S  \      (const unsigned char *)((LPCTSTR)strFIL),
% c8 y* P& e' l0 t# D      strlen((LPCTSTR)strFIL)+1);//表的类型, T4 s2 W6 }& S- F8 [

& h8 N: H6 ]6 Q  M2 O5 p RegSetValueEx(hKey,& D# `" {9 {+ `" V* }3 H
     _T("UID"),
/ B7 _! \  y3 G* K% w  p$ y4 `      0,! X3 G$ ]: Y# |# J) p
     REG_SZ,/ c, @  B7 D: v- J" S$ f
     (const unsigned char *)((LPCTSTR)strUID),
! W6 Q% V) `7 g7 }+ x      strlen((LPCTSTR)strUID)+1);//必须项
2 H+ P6 P* [: [, t* X1 s8 V. Q% Y* t+ F) [4 [4 [( ]6 O, i

1 i0 E+ t, a  C$ {1 Q: N% k4 c% K DWORD DriverId = (DWORD)25;
1 R" T0 [9 L! o' {! t: D6 f. N RegSetValueEx(hKey,
8 `6 }! [3 l0 v: B0 Z     _T("DriverId"),  c& b. [3 w* p' l$ t
    0,
- T6 f3 \- U: W* L     REG_DWORD,
1 G2 v! R: }) C/ b- J6 Y2 \     (const BYTE *)(&DriverId),  A# Z" T# N0 O! o+ F* I; R! X1 T
    sizeof(DWORD));//必须项. O& ~0 _! O: |7 v6 D" @% k
7 w9 {/ Q4 k3 _7 \# f5 l7 k) v
. \/ H  p% \# e$ n
DWORD SafeTrans = (DWORD)0;
  ?: N7 V* G1 N+ R/ ^1 X' c% z; A) U* f RegSetValueEx(hKey,
9 p9 I  S: S* N  [' X      _T("SafeTransactions"),
) y4 [) `' }& Y- n4 ]( S5 l      0,
$ x% b6 i& v: t, W- L. r      REG_DWORD,( h# y- U, d1 g+ Y
     (const BYTE *)(&SafeTrans),6 z0 K$ i. G  {/ o
     sizeof(DWORD));//可选项
. R4 i( h! d) a3 t5 q}4 }+ N/ j# G9 {- @* ~3 P; w
. F  a  N# K: j! y

! Z5 }2 _" @2 `9 H3 d$ N1 Y
* X2 o6 R) k) n/ o0 {/ y- s  s调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-30 13:16 , Processed in 0.035002 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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