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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
  l$ d+ P" @7 S2 X' [# r$ d& b  q" O
void RegisterDBSource(CString strDSName, CString strDBPath)
! N6 p: j. e2 L, o9 A{
7 w. [9 d( o' c* f7 z HKEY hKey;
$ b% Q7 H4 F4 x( y5 ?9 A+ m" q) ~; ^    DWORD nLabel; , j* o& a5 t9 i# g: r! z0 O

8 u% h0 _. \) `0 }8 J- b6 w CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
/ B& s; J; S. f CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
$ C7 m9 l/ O& W& D1 z5 h! d# V  i% }  w2 Z7 D# b
if(strDSName.IsEmpty()) return;
& i1 t' N! X: e6 C if(strDBPath.IsEmpty()) return;: @5 ~4 o7 h8 R; V6 v( I7 o* Q

1 ~+ P, L  p# u  i/ w7 {9 _8 i5 U CString strDataSource = strBaseKey + _T("\\") + strDSName;7 K' l& `  S/ j) y# x

9 a2 Y' z" j  x. r+ v CString strMdb = _T("Microsoft Access Driver (*.mdb)");
  K! V2 J0 E0 L: e9 a( ~ CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");- U& `6 E* t& Q/ b  a# Y. P' V
CString strFIL = _T("Ms Access;");" z" ^! `  d* W2 x& n8 d- n/ y
CString strUID = _T("");
0 Y1 Q+ j; Z7 E) Q- w, d  t, _7 f( ^; ~) M- B* P; n% Z; ?/ r$ T

0 S: B% ~6 k2 S2 ^$ Z4 ]0 v4 J* o" q, I; y/ z2 b) ?) y/ L5 E
RegCreateKeyEx(HKEY_CURRENT_USER,
2 ^2 b0 ]9 c2 ]$ x+ r. |              strMid," c  R3 J; n& s  P9 X8 B- c" h! a! X9 r
       0,
0 A- l4 q- R2 V/ f0 e* z" i3 P     NULL,
- E- G: e2 T( \7 n/ Q7 i" c% i8 M     REG_OPTION_NON_VOLATILE,
% @, O: S, E* @0 W     KEY_ALL_ACCESS," t6 f0 N9 Y- X3 G1 L+ {
    NULL,
* O! x, u# k8 }. n1 {     &hKey, - y$ a5 A" g; T" p
    &nLabel );//获取数据源键值句柄% K' m* J4 v3 C! F) q
, T. t" F! b4 J
RegSetValueEx(hKey,
" c; e1 x6 z* K9 P! _, k/ C      strDSName,
( N) }8 b+ e# I( Q      0,
+ w( P6 V- S$ B% g# B* Y      REG_SZ,9 c1 {/ U1 z( F' z1 U" r
     (const unsigned char *)((LPCTSTR)strMdb),
7 ~5 F# |* t+ L# H2 y- m      strlen((LPCTSTR)strMdb)+1);///设置数据源类型
% E* `) \. x( |8 e& h" f2 O6 C: e) M7 X$ b; S
RegCreateKeyEx(HKEY_CURRENT_USER,
3 S3 G9 M8 F- R9 A- E& ~          strDataSource,) K# m" v: R; R- S
   0,
5 M! }3 r9 m8 G; k# n    NULL, 4 y. Q& m. b2 o' d
   REG_OPTION_NON_VOLATILE, # A/ j' ~' K# V1 H# v
   KEY_ALL_ACCESS,
4 u8 t9 {* T9 l0 p    NULL,4 y( @7 j; S  a
   &hKey,
! _+ P6 T2 b) p7 g% W1 [& f. ^& |    &nLabel );//创建数据源子键
3 D2 E* G7 L- X, [% v: w, O/ v3 I8 y
RegSetValueEx(hKey,' i2 ]# M9 {, i/ [, V$ L
     _T("DBQ"),
9 U9 M; z- ]6 {2 X      0,( K# k" D6 q4 t$ N  Z4 v% I
     REG_SZ,$ h9 w6 D# W4 j# N. [! q
     (const unsigned char *)((LPCTSTR)strDBPath),
  n: y- z# w, v3 K      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
( p6 x/ b2 t' u8 Z0 m& K: Z# s7 D: D) X& h- |" _
  RegSetValueEx(hKey,1 x; u' z) @  m1 v" f
           _T("Driver"),5 b0 R! U# P, [. P- y# A5 C5 F
     0,5 k8 z3 ^9 ?* W. L  s
     REG_SZ,
1 O- U+ T% L! f  g  F6 {( Y6 m      (const unsigned char *)((LPCTSTR)strDBDriver),
& `7 n4 w1 S" ?9 o  L5 ^      strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径0 X) R9 ^8 M% V' ^: p
0 w: c! E: E3 W0 Q) S' h% b* `
RegSetValueEx(hKey,. e% Y1 O! {) j! \0 N' E: @
     _T("FIL"),
* p  s( G! q/ t, g& w      0,
$ b7 x. j% Y/ e" F, G2 \# p* z* K      REG_SZ,
; F6 t" J, r/ _+ ]+ p  K  R* k      (const unsigned char *)((LPCTSTR)strFIL),
/ k- a- ]. l  Q. ?      strlen((LPCTSTR)strFIL)+1);//表的类型
" j+ `. c5 O" S" H1 p  ]1 M, K& z1 @6 d9 p* v8 K, Z' J+ D
RegSetValueEx(hKey,
- G6 f. E  \: g+ t, A/ `      _T("UID"),2 R2 u: N6 Z& ~; R3 _
     0,
- s* Y, i  o4 `% v2 O* Z      REG_SZ,
+ F5 r' n# H( N5 i      (const unsigned char *)((LPCTSTR)strUID),
0 ?9 Y4 g" N) O+ W0 i      strlen((LPCTSTR)strUID)+1);//必须项5 w+ g5 u: W+ _" c+ f* e3 f

5 r6 r6 j% S% q( ^. b9 z" T) Q  E! i5 a5 ^, B
DWORD DriverId = (DWORD)25;# g0 m8 `9 v3 y5 T4 j$ R- ^
RegSetValueEx(hKey,
0 I; W7 c: Q7 F: F     _T("DriverId"),$ Z4 {/ k2 m" d7 u4 f% r0 R
    0,
3 t+ L8 D8 e( Y, F     REG_DWORD,( @2 @1 z5 Q' y2 {
    (const BYTE *)(&DriverId),2 d; R+ h0 i1 c' j
    sizeof(DWORD));//必须项7 \( U* v; ~& K

  n" b- a8 Z# n/ d/ _- C" e
" K, \" P! j% A* f# V2 N% x DWORD SafeTrans = (DWORD)0;- l7 P! I) \# h, N. p
RegSetValueEx(hKey,1 U: U' z: k5 A/ j/ \
     _T("SafeTransactions"),
* X3 j/ W, ^2 ~1 _      0,5 ]: @9 j1 q' t& R$ J# M7 x
     REG_DWORD,
6 d% d! b$ `2 t, ]* b      (const BYTE *)(&SafeTrans),
4 v& C3 G) `0 s% T& E1 u; \      sizeof(DWORD));//可选项
. l& C/ C+ u+ X- \( l/ e- D}
9 [" I8 t" h% G, q" O& C! v
9 v% `! S* U; q2 T' p
" D- z& j* j8 P) I$ {+ m6 u/ c) \6 i5 c; i" Z2 M3 Z1 f
调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-5 08:47 , Processed in 0.014666 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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