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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
( S4 R: Q0 t0 G' y
; x% ^  _& s+ f* v( Hvoid RegisterDBSource(CString strDSName, CString strDBPath)4 D+ S, U1 ]4 a3 g% x  F$ y
{: B$ J% U4 P4 S" s; M9 n4 c  u
HKEY hKey;; Z0 f3 g0 a5 f! I: v
   DWORD nLabel; / M% ]8 D$ {7 ?0 H

6 f- E( m- y3 n- ?5 U& v) { CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
4 K9 F+ F, D% t; w; W, l CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
8 _- T  A6 U$ c# }8 A) s
/ F) j% Y  D  D* c5 q* P if(strDSName.IsEmpty()) return;# E( W' z6 t+ p0 l7 c$ J
if(strDBPath.IsEmpty()) return;
  h8 N* |0 c, G* M- Y7 q2 Z
6 A9 K; I  Y* v6 [# S CString strDataSource = strBaseKey + _T("\\") + strDSName;* O) @0 v: @; ?  `+ e

' Y5 y( f  f6 X& p% H* U$ _ CString strMdb = _T("Microsoft Access Driver (*.mdb)");
2 J& B( j  B3 Z1 Z CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
. q# G0 r" C* _. g1 l, C CString strFIL = _T("Ms Access;");
8 e+ t# T( f9 ~" T6 g- ^) ~ CString strUID = _T("");
# g% d1 S# _% `5 U" H8 M7 ]$ [2 B3 ?* x# ?2 |

/ l  B1 H, M; A$ _9 y( D
% e- O( {5 C) Q. F$ }( a& l RegCreateKeyEx(HKEY_CURRENT_USER,
3 r2 a/ ]( \$ `+ ]2 ^              strMid,
9 {* r6 _0 e7 o8 n9 M  R) s( ]        0,
5 h3 s# V! M3 m( `  b4 R  _) o# c     NULL, 0 k1 \) i; G9 `* F2 @
    REG_OPTION_NON_VOLATILE,
: K/ i" Q! v( a0 n  B( d2 N& I/ I     KEY_ALL_ACCESS,
, M2 \( K0 C! D: D7 v" a, a: R7 _     NULL,
& w, }9 ~0 A$ d0 Z) b" i3 z# p3 I/ ]     &hKey,
9 H+ j# n/ a$ Y, @     &nLabel );//获取数据源键值句柄
2 g; Y; {" j; l+ B4 |7 K# @* J' J" Y! _! \, p6 x3 Z3 }, M; H5 x( {
RegSetValueEx(hKey,
( o6 e1 L* f( D7 q4 }      strDSName,
) _* T+ q- |+ j" ]1 r! X      0,9 ~' C% l# R3 @( C4 _; l( |: a- D& c6 g
     REG_SZ,8 `) [; s9 m& B* W: Z. h
     (const unsigned char *)((LPCTSTR)strMdb),2 x6 ?0 I) S2 R' _8 U0 o! }0 z
     strlen((LPCTSTR)strMdb)+1);///设置数据源类型, o" f$ x) s6 G4 M6 z
- Q( q9 _! g6 _: R% W
RegCreateKeyEx(HKEY_CURRENT_USER,
0 O% e, V% H' J  I6 ]9 j          strDataSource,& A6 J( K/ q+ ?
   0,
0 J# a/ n( P% ^8 M/ ~4 Q    NULL, 1 S+ B: m0 c' {3 w8 x3 b7 _
   REG_OPTION_NON_VOLATILE,
: J! D1 O1 ~0 c+ }, c1 `) V    KEY_ALL_ACCESS,; ~1 d* H  `1 H# }1 x  Z9 P. v; C
   NULL,9 W3 N! K6 Q/ l, s# ?2 \1 B
   &hKey,
% h1 F/ A+ T2 i5 `% k# n    &nLabel );//创建数据源子键
8 o) s. x& A$ U( |
3 f7 M+ b" A1 b! A RegSetValueEx(hKey,
! s& G' |( I: c2 d  K7 K' a      _T("DBQ"),: w* h. N( |! ^, U3 X) P7 C
     0,
, ?: d7 o* E, E: l      REG_SZ,( A% ^& ~8 b; n$ b( U
     (const unsigned char *)((LPCTSTR)strDBPath),( d" v8 f# i7 t* l* ~
     strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径' E) U8 p( i9 B3 w

9 m% q/ K7 i3 ~5 T# O  RegSetValueEx(hKey,
! n3 J2 R. ?0 ^1 e            _T("Driver"),
8 E  X  W/ [) F+ S      0,9 X- [8 a& c; A5 \, j' H0 F' f! f  l
     REG_SZ,
! ?* W9 }7 B# c# Z/ z- C3 a      (const unsigned char *)((LPCTSTR)strDBDriver),
  b0 A8 a6 A& d      strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
- S7 n0 U! q4 l5 L+ Z$ m' V2 u% L
RegSetValueEx(hKey,
' ]/ u3 u, `; n1 {. H6 \% }* @  O+ N      _T("FIL"),# W- e: p4 y# s( [9 H
     0,
) l  g" ^" f. w. y      REG_SZ,
( |: L# Q! O% I      (const unsigned char *)((LPCTSTR)strFIL),
* ^3 }0 l2 }5 f8 j( P      strlen((LPCTSTR)strFIL)+1);//表的类型
5 X5 T' F4 J' |# u  K& V/ n+ w
1 _" x2 S+ v! e- O8 s RegSetValueEx(hKey,/ x) ~: m$ w$ j9 j8 \/ q( {
     _T("UID"),
$ o( Y8 k% b% t& H5 c+ H" d      0,3 ^# |' i, d& M: p" v' [
     REG_SZ,
4 U. M0 z) j: U6 ?& R      (const unsigned char *)((LPCTSTR)strUID),
9 k0 T, K. h2 t      strlen((LPCTSTR)strUID)+1);//必须项
/ k+ N* ]& ]$ T: i* A# q+ \4 F0 m; z- ~( O4 c

; ]  {% \' x. C3 c3 g DWORD DriverId = (DWORD)25;
( q9 S9 I; t( a" a6 }1 [- x& W& b9 U RegSetValueEx(hKey,
" Q/ v5 k% j: ?) d0 p     _T("DriverId"),# U& Y+ X  e. D
    0,! i8 V3 i( ^4 D/ x
    REG_DWORD,
# y! `+ f% \; p$ t( N3 M/ ]' x( s  p     (const BYTE *)(&DriverId),# D1 O' ^1 q% i1 `- I/ L
    sizeof(DWORD));//必须项
2 b- A! U2 w$ Q: W 1 g! V4 t  `) P; U$ M! R% p

. x' G, J. R. Z DWORD SafeTrans = (DWORD)0;
+ }8 E" ~9 E, X6 H, Z, k RegSetValueEx(hKey,
2 F% X+ n, U8 t      _T("SafeTransactions"),
" s) ^6 E( K/ A      0,! @$ c; M( P- o, P- P3 V$ |0 M
     REG_DWORD,3 k+ J6 P  c  K" [4 R
     (const BYTE *)(&SafeTrans),
$ l/ G* @- m' @0 e& f7 T      sizeof(DWORD));//可选项: V5 A$ T* k% T, M2 M7 M
}+ z" q. S% ^- `6 I0 ~/ J" B

! B" v% z3 k6 ~( |- M# P
1 I9 S/ G( t" |. D! j6 }2 ?( L. W) b- u, a' X9 [* w- A9 P
调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-14 16:23 , Processed in 0.017785 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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