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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:5 w+ ?: C+ u" P: s/ C1 j0 o& T
# w3 a& G8 ^: d4 d) K
void RegisterDBSource(CString strDSName, CString strDBPath)
  L' W- S; b6 S{; g  ?% r* R, m2 H. {
HKEY hKey;
* R: r8 }6 ~2 T3 n, R# [$ z    DWORD nLabel; ' u% A2 p, p. ]1 X3 D
1 f: [' M* X2 O! b
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
. I, m( ^  e4 a' M& @5 g CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;, ~* K7 I& n( y0 T/ A+ m
8 P+ A7 P. x& R9 t- ?( d% y3 Z
if(strDSName.IsEmpty()) return;! c* B/ @9 R$ @& Z! N6 I) c" j
if(strDBPath.IsEmpty()) return;; C/ ?/ j0 j! U+ B( g
1 B( r/ u" q# q
CString strDataSource = strBaseKey + _T("\\") + strDSName;3 I( H6 U' c  T/ u6 b) J

" o: d: ^2 K* F+ _2 `1 ? CString strMdb = _T("Microsoft Access Driver (*.mdb)");! ]. A+ y( ]% {# V; O
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");" f% m$ ~3 W; T8 z
CString strFIL = _T("Ms Access;");
7 e2 @/ d# r1 z% S: l CString strUID = _T("");
9 v9 _3 O* f0 [5 O0 W# i6 V8 }- M8 G! D+ G9 q
/ f9 x* F5 Z! v- j7 W

% @4 d% d* n% z& V RegCreateKeyEx(HKEY_CURRENT_USER,2 k9 O# j0 O; `" y. i
             strMid,2 B6 ]* [" a5 M" x
       0, - _9 @9 i/ M: X7 ^
    NULL, * O8 g: x* n) R9 m5 i: i9 c& W
    REG_OPTION_NON_VOLATILE,
( S2 Q( _6 J0 T" P3 E% s, }4 ?  V4 C     KEY_ALL_ACCESS,( p& u/ T" F2 A' B0 k
    NULL,( |. e0 U3 `! o9 K$ F+ a5 L
    &hKey, " F; E. H8 z* ?4 s% ]( ~2 c
    &nLabel );//获取数据源键值句柄
1 y/ L: e& o# v; q! L" n# b. P- {& F
RegSetValueEx(hKey,# N$ a# C2 \- G1 g+ T7 d
     strDSName,2 Y; ^0 \1 Q: L! d4 [/ z6 T
     0,
! y: ]# ^5 m7 D/ X8 u( P      REG_SZ,+ Q5 e! K+ s( |% _* c7 O/ r
     (const unsigned char *)((LPCTSTR)strMdb),
6 @, G% {6 A3 m1 m; `' Z4 R      strlen((LPCTSTR)strMdb)+1);///设置数据源类型
! `4 O; U  X2 p1 o) s: p4 `- C  t+ ]9 z
RegCreateKeyEx(HKEY_CURRENT_USER,
2 e; P: r" L) x) I$ ^          strDataSource,
1 m; b2 `  Q+ f# W" y! G    0, $ q# Z! B/ Y) t
   NULL, & S% F1 @$ _( b8 ?: n* g
   REG_OPTION_NON_VOLATILE, 3 s: C/ h/ G0 M( A0 L
   KEY_ALL_ACCESS,
1 M% W6 M* j1 c    NULL,& S- F' m6 _' R2 ~: K2 l# r
   &hKey, ) G( N1 @0 A( N2 ?) I8 S, [3 |
   &nLabel );//创建数据源子键" D$ p9 V5 F4 W. d

  h$ y- Y* Y. D, _5 ^/ ?# e RegSetValueEx(hKey,$ M4 i( K1 r; m0 O! e% ~
     _T("DBQ"),, v, u: B, R, I  Y
     0,
# Y$ {( _! H- k- d' {6 _2 @" @      REG_SZ,2 F: R6 S- F0 C% w0 i
     (const unsigned char *)((LPCTSTR)strDBPath),: z  D- H$ [" _4 X; m7 v
     strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
( n4 a% }: x$ i" F  G4 f
; O. o* |5 p& k) ]* @  RegSetValueEx(hKey," z* |" X2 j( c) [' X: U# Y& X$ |
           _T("Driver"),
! Z5 n/ s; z6 |. w# C6 E      0,
. Q$ n- q' c  [1 K# |8 M  Q' F      REG_SZ,0 J7 y/ y% u# R$ H$ N, `. s$ Q3 x
     (const unsigned char *)((LPCTSTR)strDBDriver),# ^# W/ A" c' D2 ?7 t9 D
     strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径- q$ F. j$ W+ x0 l- s+ O

% E5 t0 k! o' l# [1 e3 L! N: R( T RegSetValueEx(hKey,
+ q5 N" ~* o" n4 E# X& o7 F. H      _T("FIL")," k" x" E! b9 L. U
     0,; b. _3 q' I: l
     REG_SZ,& p; l$ t" J& \4 ]/ k  w2 w7 t9 ^
     (const unsigned char *)((LPCTSTR)strFIL),7 m* y0 h/ z! p, r0 Z/ G% b4 A9 o
     strlen((LPCTSTR)strFIL)+1);//表的类型) w" J3 U  O& ]
# K& |0 M+ W; @8 ]9 A' E
RegSetValueEx(hKey,2 D; a( V, }  z4 O+ V
     _T("UID"),
. Q* O- f+ Q' Z% {( K0 s      0,
% @5 D, h7 m1 D0 D' X      REG_SZ,* g' O5 x, u' d, N& j
     (const unsigned char *)((LPCTSTR)strUID),
0 H  A- @: \- R- {( q! D" j      strlen((LPCTSTR)strUID)+1);//必须项
3 {+ u( l5 z% }+ }* ~3 `) c7 T

% y  H" F! Z7 } DWORD DriverId = (DWORD)25;
' Z  W3 p1 U9 c2 o; r9 `1 u RegSetValueEx(hKey,- \& c; z3 Y7 q. f9 H
    _T("DriverId"),9 y1 X& I2 d; [" ~. j" W
    0,/ {" A5 w- S# A
    REG_DWORD,6 K2 Y& K6 B* j- c) k. g
    (const BYTE *)(&DriverId),. _! `0 A' E# I
    sizeof(DWORD));//必须项. f/ u( c1 D( o1 |

' f. H2 k* y. T9 B3 G
+ w/ c0 q9 l: J) R4 ~5 K! X DWORD SafeTrans = (DWORD)0;
! C. `( D1 {+ \' ] RegSetValueEx(hKey,
, }' h6 q) N6 q7 Q7 |      _T("SafeTransactions"),# Z# a% B+ Z3 c% l$ R' Z, |5 h
     0,
' E9 s4 q/ t- }8 U5 M      REG_DWORD,
& H9 F! l) B' c1 E+ Y. x8 y2 D9 k      (const BYTE *)(&SafeTrans),
, _3 o3 P9 h- s& d' j      sizeof(DWORD));//可选项% T7 E: X. g4 ^( {) v/ L
}" K, w1 J  `* }' _- R1 }

( g0 n9 u- L8 C, a1 V, h) k ( _9 @* c7 f& _
% k5 `8 S% @6 W
调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 12:02 , Processed in 0.018176 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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