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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
7 z( r. |/ `0 `8 i* j, o) V: D0 m. r9 z8 ]3 K; e0 x
void RegisterDBSource(CString strDSName, CString strDBPath)
5 y. L/ {+ u- A5 H8 f7 u{
1 e* q* k: E6 U6 C, A( h! s& l4 B HKEY hKey;/ ^+ B+ m6 z6 x
   DWORD nLabel;
9 I( N! y/ R  P5 q. G5 U, f# @
8 V/ @/ q7 o7 x; z" h CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
* |9 y9 \" z8 Q, x/ o CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;( E6 t& t% `! m( U5 u7 A
# f: O9 q+ }/ r7 f5 G$ A: Y
if(strDSName.IsEmpty()) return;2 X" ]( l8 S4 Y* p3 d
if(strDBPath.IsEmpty()) return;
/ y3 x0 p7 S: J2 ~9 {' l$ k. U5 W' a
CString strDataSource = strBaseKey + _T("\\") + strDSName;& D7 T, v1 J. u* e% `
. R' k2 r3 y# t4 Y
CString strMdb = _T("Microsoft Access Driver (*.mdb)");
) ^( \# ?- M$ Y. h; l  `* k CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
7 r5 f2 m' r& B5 P( n& `, ` CString strFIL = _T("Ms Access;");
5 g& h; `4 w- l CString strUID = _T("");
+ e% f! D; A( y8 M7 a- U  b8 c) \# Y* Q$ [6 ]# ~
8 M3 g, g6 O$ h& I
' O) w8 a( y' X9 }: k; L5 ?; K+ r
RegCreateKeyEx(HKEY_CURRENT_USER,
' g! T( J2 I+ W; c: D& ~* u% \              strMid,/ p  w$ N- G) ]: b" G
       0,
! ?) x# k) Y" n* s$ C# ?     NULL,
* ^. U- d9 K" e! F2 ]! g     REG_OPTION_NON_VOLATILE,
. I* p/ v! G9 F  x     KEY_ALL_ACCESS,
+ Y' T4 O6 ~# l% m0 l     NULL,
% c0 ^5 L! @" a3 o1 g8 w     &hKey, 0 b1 v! r, M: @. h
    &nLabel );//获取数据源键值句柄0 d% `$ E2 V! |" R7 t$ X. E
9 Y0 \6 Y0 D7 i- v& L% v( m% k
RegSetValueEx(hKey,- s! ^+ v" u+ j. J0 O1 m
     strDSName,+ w# ^0 @* H' {6 v
     0,
; r( z; |, S; i$ X" q      REG_SZ,
! x4 x& X! P, B7 r      (const unsigned char *)((LPCTSTR)strMdb),5 c! u/ r4 {' s5 `% U9 n, \
     strlen((LPCTSTR)strMdb)+1);///设置数据源类型
, S  f  P& J$ Z5 ?* L. j" z- m
RegCreateKeyEx(HKEY_CURRENT_USER,% Q1 }9 @& T2 c3 k! P- g
         strDataSource,
0 ]- Y' E6 U- o! ^" W8 C& o    0, 5 |# u2 l; j4 [8 D. q- l
   NULL,
; \+ E4 `/ O1 }. a, H    REG_OPTION_NON_VOLATILE, 2 t& N3 L6 P3 p! N
   KEY_ALL_ACCESS,# |: _) c) f! ^6 F7 l2 E# L+ @
   NULL,2 O- C" C5 s( t1 N7 t9 r& X
   &hKey,
( z: M3 w3 P+ y. V2 G5 E- Y7 k( I    &nLabel );//创建数据源子键
2 Y  D0 ~- K* l! F5 v$ n
( Q$ \2 O% b% S! r8 }( a RegSetValueEx(hKey,, s& C) }9 G/ u$ [( `/ z) e7 U
     _T("DBQ"),
7 L; U3 B' {, `6 q      0,
  @  V5 ?( F; I' p9 N      REG_SZ,
8 i- K' _* u" \5 h+ j1 z5 }      (const unsigned char *)((LPCTSTR)strDBPath),
2 Y4 |" s, \5 H, K5 n' \7 l! W; y1 _      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径  l; W; j' j6 Y! I# q  Q

* `+ F. H5 s( H9 h5 q/ D& \  RegSetValueEx(hKey,9 c# p5 w! m, N2 b' v& G
           _T("Driver"),, a) [: i1 a4 C& e1 i# F
     0,
& z; Z5 t" Q  ^3 I8 h      REG_SZ,
" h8 v/ R( R( s      (const unsigned char *)((LPCTSTR)strDBDriver),) z3 y( O4 ^$ W$ n& M
     strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
6 m2 F  h3 i% Z( Q- C& F# U6 J6 k$ r3 Z+ m" z- S! G7 @* U1 V
RegSetValueEx(hKey,
! P0 v- e8 K* g- G  y; p% Q      _T("FIL"),
' X  B" v- X- z3 |      0,
7 i! ?7 {! [/ b      REG_SZ,
7 s+ m. _! t5 g( @/ l/ g" a      (const unsigned char *)((LPCTSTR)strFIL),
" D8 q- @; H4 X  Y+ M% k      strlen((LPCTSTR)strFIL)+1);//表的类型
  |' N5 T3 [, L8 ]: g# E% C, t! W( C# M5 u, b) h. l
RegSetValueEx(hKey,& b' L+ m% J$ T& j6 U+ X
     _T("UID"),
" l5 I, K  }# `* Y& U: @      0,
. I$ m% W. X7 C1 l5 |2 @' s2 R! Q      REG_SZ,9 O( I5 v- K3 Y; k8 t9 L  ^
     (const unsigned char *)((LPCTSTR)strUID),' c: M& K6 q' g; B
     strlen((LPCTSTR)strUID)+1);//必须项
$ A% [) p: b* T9 G' \0 y
1 \" b  f, d+ s2 V; }2 O6 W$ A
: d+ _8 x9 \& `1 e% W9 f DWORD DriverId = (DWORD)25;( E3 E5 P: g$ v! z; Q* T4 L6 h
RegSetValueEx(hKey,
8 [0 K& Z7 g1 V7 [     _T("DriverId"),! y6 [4 p0 H1 I8 L# p1 R
    0,+ W6 S3 ]! r) l
    REG_DWORD,: O7 [. |3 I. X$ {& M; P
    (const BYTE *)(&DriverId),9 O2 A  E# B* o" f2 m
    sizeof(DWORD));//必须项
" ~- _1 I3 c% _' _: r( l
1 \+ C, Y' A+ }) R5 G2 K! e: a; y" g( _& I; O# b3 K2 C
DWORD SafeTrans = (DWORD)0;
. a% Q2 ]9 d* c  f" N" o RegSetValueEx(hKey,! K' j4 W! P8 T+ U8 W# Y
     _T("SafeTransactions"),! T, ^7 T  w5 }+ h
     0,, B$ v4 h9 M) m" U6 a
     REG_DWORD,! h! G; D: f6 l6 N. T; m1 W
     (const BYTE *)(&SafeTrans),
$ r  @2 a0 ^& W7 @      sizeof(DWORD));//可选项8 a; b# r9 U, v! o. P
}$ }1 W4 e! E3 f: D# c
& E1 K1 ^8 h) d3 W) k7 E( }
& i. q! R: l& l9 o- H
  m4 s2 Y; R+ W
调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-19 19:37 , Processed in 0.035168 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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