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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:% p, R0 ?. b5 v3 {$ ^" s
0 k- g0 Z  w. S  R% w6 C" I5 ]
void RegisterDBSource(CString strDSName, CString strDBPath)4 g' |6 Z) ~( J# i5 e/ f
{
7 m- l: C! ?! Y( A/ F% L1 V  }, i HKEY hKey;
( x3 b1 a" m/ Z/ D' F6 g2 |$ R: l    DWORD nLabel;
2 G% O7 N+ c5 J1 b6 Q8 J1 J5 W
0 p, n7 b$ `5 ~1 A2 r& j CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
/ c6 b! c1 U5 E+ k; w! M9 } CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;% K1 \9 x6 G6 ]* F. R  k% R: H5 M
4 }, J5 d" q8 F7 u$ [
if(strDSName.IsEmpty()) return;
% K9 Z: k, g( \# I  f7 R" z if(strDBPath.IsEmpty()) return;, B- ]. h9 b6 T2 O

* P7 z' a5 \: X/ `- ~% ~6 ^0 ^ CString strDataSource = strBaseKey + _T("\\") + strDSName;. t; E, ?8 S( G! M; K$ {; p

# U; r) j3 F/ m$ U4 b CString strMdb = _T("Microsoft Access Driver (*.mdb)");
/ j  I" c8 m0 o/ S' I CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");; I/ q4 K+ e1 H% B7 ?! p
CString strFIL = _T("Ms Access;");
0 _1 g3 ^. n2 i. j$ C CString strUID = _T("");) v5 Y$ c1 I3 M* c1 T6 c" K

+ z# [/ q9 y( Y1 {/ E( }9 M0 ` & U8 y3 c! ^! Z
: b4 ?3 J. a/ k6 W. q% X9 v$ G  L
RegCreateKeyEx(HKEY_CURRENT_USER,
+ |1 \6 z" M& E2 B; e6 x# @9 C              strMid,! a0 V5 ~7 {3 p2 A5 s
       0, % j+ T& C; g1 }7 P" w3 A
    NULL,
' Y) W- r/ J& W: }     REG_OPTION_NON_VOLATILE,
: X5 b* m9 z* {1 z$ }) ?7 k9 {' j  Q     KEY_ALL_ACCESS,
# |/ z  i8 l. z& O' d% e     NULL,3 ^1 J$ C6 }" H* E
    &hKey,
2 t7 d, j$ ]$ o     &nLabel );//获取数据源键值句柄3 C7 }) T& R5 s
8 M2 V5 W# _6 V6 I
RegSetValueEx(hKey,
- s  e5 p8 c9 q4 d$ [7 X! v* g      strDSName,& m* d  F/ Q( K; b  k' z: ^
     0," D. I/ g8 G. T& T( m/ x9 n
     REG_SZ,$ n; [# {- E  T+ U- ~! X4 q+ t
     (const unsigned char *)((LPCTSTR)strMdb),
) n4 p4 E' g* |+ t+ H  Q      strlen((LPCTSTR)strMdb)+1);///设置数据源类型& W* K0 t$ I1 o5 r/ k

5 |+ t# e1 p$ |. c RegCreateKeyEx(HKEY_CURRENT_USER,2 K3 G' b1 K6 R+ y8 _8 n3 U
         strDataSource,' _! v4 g. ~0 p8 H
   0,
6 G+ ~3 N( {: v* a& N: K    NULL,
9 ?9 U* V2 c# c; L    REG_OPTION_NON_VOLATILE, ) }' {0 s* `2 D4 U5 @
   KEY_ALL_ACCESS,9 }7 N# d7 g8 {! U3 k% U0 y
   NULL,7 v  H" |# M/ [- [  S( a
   &hKey,   ^. {% j; ]7 g
   &nLabel );//创建数据源子键' N' x3 o0 ]# f0 N

+ Q4 ]; {8 A3 R# d0 ^$ H4 a4 ~& c! v RegSetValueEx(hKey,
8 j/ ^. T, p4 `1 x1 R+ y$ v7 M      _T("DBQ"),4 A# y0 `: ^' g4 |
     0,7 X' j" q. B% A
     REG_SZ,. D+ Q- [- [$ A% |# v8 w# \
     (const unsigned char *)((LPCTSTR)strDBPath),
. {7 A+ {& V' p5 c1 D3 \  @# n      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
, x: G% k, \& f5 T' i, {- q7 ~' b# d# [6 S1 }6 E
  RegSetValueEx(hKey,/ r/ F8 y) p( Z8 q  g/ q0 `* E
           _T("Driver"),
0 H) E$ I1 h3 ^  d; s% b: q      0,7 ^2 G4 a/ x+ f2 K2 l
     REG_SZ,
, z/ }: x8 A) A4 p0 n      (const unsigned char *)((LPCTSTR)strDBDriver),
. l  W" ^0 c# t7 h, Z      strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
3 d1 x! _$ y6 S: e3 D. m5 l7 C5 |+ @" Y$ j9 N
RegSetValueEx(hKey,; ^, j% G* }% H: j/ l: S0 X
     _T("FIL"),( g! A( ~2 ?2 z, i1 L6 L6 S
     0,
4 O9 o, O  [3 f8 R& G/ y7 p      REG_SZ,% `: F1 A) d  O! r
     (const unsigned char *)((LPCTSTR)strFIL),) s3 k) T  T# f: X3 V' k
     strlen((LPCTSTR)strFIL)+1);//表的类型/ O8 a1 I2 P' X* k! u! b
7 N6 A7 P( Z! y2 n" E% Y! D2 H: k) z
RegSetValueEx(hKey,: t9 A6 m' m: M- t; k4 S$ Q
     _T("UID"),  E3 l- F6 H$ S( S- D( n
     0," l; G1 U3 |) ]) t3 h, \' Y
     REG_SZ,9 f2 ~1 h, x- \  l; g
     (const unsigned char *)((LPCTSTR)strUID),
( D4 W* T* f* C; }, y! q6 l! h% M      strlen((LPCTSTR)strUID)+1);//必须项, d7 Y2 O/ W0 L& d" c5 `, ]2 H
& X: N5 D( \. |' Q/ c
( H0 p0 r% A' y$ G
DWORD DriverId = (DWORD)25;
7 b9 j; H0 x& n. T) T RegSetValueEx(hKey,
9 ^' `0 R4 M: M/ g6 [, r( U5 _! n     _T("DriverId"),
% ^& J& b' D- v2 [! Q" G     0,: R9 _  q3 n  k1 ^& W9 f
    REG_DWORD,
3 I+ L! d4 N/ {9 B; ~' ^     (const BYTE *)(&DriverId),9 A' F9 T6 p" Y- y
    sizeof(DWORD));//必须项8 a0 J9 P3 D8 e: x

& n. d/ }) I: c9 h+ K! f3 }
% y" _0 d& n7 [. Z DWORD SafeTrans = (DWORD)0;; s. F, C; C% z( T' E3 @' H
RegSetValueEx(hKey,8 g$ \/ D3 Q  u. E, D$ p, P
     _T("SafeTransactions"),
1 l7 r3 Q7 |; V* ~" O; [' P8 m( u      0,/ G4 @6 X. l" ^) @8 i$ [
     REG_DWORD,
) W/ \' V9 ^/ l+ ?      (const BYTE *)(&SafeTrans),. r5 s- q  p( g0 q4 l
     sizeof(DWORD));//可选项1 D( I% P, d" J
}' }. D1 d7 Q! Z* k* q- Y
. ?  @3 m3 t1 W+ C

% }. l$ l0 L) e* T% S8 q  R  h) x' c. p% K, S% ^
调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-13 21:30 , Processed in 0.019268 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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