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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
% e; F# U2 `  D* e& h0 D0 M1 l1 P5 J6 O' O0 K* H) U0 E' \
void RegisterDBSource(CString strDSName, CString strDBPath)
+ U* V. P2 x& P/ W* X$ F{- k/ q+ _1 p+ I  Q" U
HKEY hKey;
% ~( P7 e/ {) T9 v    DWORD nLabel;
7 `$ l5 V+ t# V! c- ]: f( U1 i. S6 f0 ?
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");' ]$ f; i9 [5 G7 Q  R+ e
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;, Z' m- T+ f5 D! l. a6 G
) k5 m8 Y& H3 D* W, G2 G5 |: N
if(strDSName.IsEmpty()) return;+ j' e1 S  k4 P0 v; q# \
if(strDBPath.IsEmpty()) return;" g6 x/ c& T. n4 z1 |$ D6 c, q5 m

8 F! C3 B$ }2 o- A' @% y: f CString strDataSource = strBaseKey + _T("\\") + strDSName;9 s1 i! |# }: y

+ ?. s2 p2 H+ k8 Q3 N CString strMdb = _T("Microsoft Access Driver (*.mdb)");
% }9 |) Y- Q3 g8 O8 {( Q5 x CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");6 m& G5 `7 ~1 j- p' V
CString strFIL = _T("Ms Access;");- V5 I' |% a4 E+ m9 m/ Q
CString strUID = _T("");% B) w( o) Y: S# i; v7 {) p7 T

3 x# a8 v& w) {" E1 Q
3 t' A# v* e; l4 g5 a" N2 n- x# }; A
RegCreateKeyEx(HKEY_CURRENT_USER,
. F/ X/ G" G( S& h. q7 q: ]              strMid,3 q# R" R: o# b, Z2 I! p
       0, - ?' h4 E  f! E9 D8 J, x5 G
    NULL,
  r/ L) O/ H* p# x- O  m) Y     REG_OPTION_NON_VOLATILE, 8 j" R' J& Q- ~: g' \0 ~' y
    KEY_ALL_ACCESS,
) U4 e9 d3 I% H* v0 O     NULL,
7 P& a/ Z- \7 J0 p# @  Q/ d3 L) d     &hKey,
/ H: |( h: [8 m) `. D     &nLabel );//获取数据源键值句柄
/ h, b- N, B& {' }" H1 M0 Y
0 z% J/ N! @" p; H RegSetValueEx(hKey,+ `) m! _6 r. b* U
     strDSName,+ i, u' v+ o6 M2 N& _! D
     0,0 e! i/ v( A, }+ ~% G
     REG_SZ,) `, c* x2 R& A2 ?
     (const unsigned char *)((LPCTSTR)strMdb),
+ I1 {: j9 E3 L      strlen((LPCTSTR)strMdb)+1);///设置数据源类型
0 T+ E( u9 b( @2 ^+ ^3 `) z. f9 r( x4 ~8 X4 M
RegCreateKeyEx(HKEY_CURRENT_USER,) z9 H9 u+ {; I
         strDataSource,- ?9 X$ g  F+ x' {1 R
   0,
1 G5 a1 E$ r. E    NULL,
9 S. x& H, P' `' \# x1 p/ d' M    REG_OPTION_NON_VOLATILE,
6 E) b: o8 I6 P9 y& x1 [    KEY_ALL_ACCESS,
+ _" j: _2 ?$ k" X! u    NULL,. b) J' g+ }* {+ \2 J
   &hKey,
1 |- a: ]. b! x- Z) g2 G% `- }    &nLabel );//创建数据源子键# i# A/ N6 f3 Y+ }

9 N7 B! h6 d; J- W$ ~. M* b$ ]3 m* S' p RegSetValueEx(hKey,
7 F. ]" l: x; j/ o      _T("DBQ"),
$ h5 S( s( ~! W' m* w* s" R      0,
+ l' O% U# N1 P- n8 _6 w/ n! ]      REG_SZ,+ h' h& Q, V3 |9 t3 v
     (const unsigned char *)((LPCTSTR)strDBPath),
4 t+ W& i) Z/ n  I* x/ n& W* s8 b      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
0 V( f3 }, ^6 ?7 o  r
, w* p8 L: b5 e0 ]9 i  RegSetValueEx(hKey,
8 y# c+ \1 d# B+ u            _T("Driver"),: [' X+ q* O) U; W! z! H9 j6 q
     0,$ ~2 A! \3 o# n1 X! v* j
     REG_SZ,( ?7 v* s, W: d& D& t2 z  c, t7 X
     (const unsigned char *)((LPCTSTR)strDBDriver),
' p* |* m" l" n% T- Q6 Y      strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
- ~! w- d1 k% F- \: s9 z/ ]( |' q! f3 z
RegSetValueEx(hKey,& u4 B( T$ @4 s8 F, x
     _T("FIL"),
( ~" q# n1 E3 u8 Q. N7 y9 M3 a. v      0,
/ t/ u0 N3 b6 b* ?" ?5 O  [      REG_SZ,
4 n0 r% |2 K- u9 |& c% J+ b      (const unsigned char *)((LPCTSTR)strFIL),- P- e; H8 v: R
     strlen((LPCTSTR)strFIL)+1);//表的类型' T5 U: @8 M2 L/ X
6 M, r4 n# s. K1 g8 r, X7 Q% g+ y# N
RegSetValueEx(hKey,6 L: ?& L# ]- S/ p$ l4 q
     _T("UID"),
" Z/ d) v! m2 D" M8 O      0,& F2 s# {7 f/ i) F6 W2 V1 R
     REG_SZ,0 K: b$ b( H, e( a" u% K( R
     (const unsigned char *)((LPCTSTR)strUID),
- u$ m( K9 L( m8 |      strlen((LPCTSTR)strUID)+1);//必须项
, @7 U; r: B: T" |) K2 Q: K7 N" H: h* X+ D

6 Z8 |. t0 ^( J" D2 @. P. J: j DWORD DriverId = (DWORD)25;  Y. p0 _: `. P6 p
RegSetValueEx(hKey,; ?. s6 _5 w5 G9 N) F9 U5 {& I
    _T("DriverId"),
1 T. C  X6 z4 i9 d$ ~     0,
$ {# r' B' n/ B     REG_DWORD," U9 H5 u" c, x/ Z" ^: K
    (const BYTE *)(&DriverId),# H& z( B" p- Z, q0 c) @: a
    sizeof(DWORD));//必须项
7 H' F" ~9 S# i% f: {9 V% o + m( a" n) J$ A+ K

) p. c1 q! O% [- @ DWORD SafeTrans = (DWORD)0;
& s& {- d9 [) o5 O$ R RegSetValueEx(hKey,
" P7 E% L+ D. H      _T("SafeTransactions"),
5 C1 }! n# x' P, q. b1 H; I  c      0,! d5 [: u& e  w7 T
     REG_DWORD,
$ f- ]& h4 k! u1 ~; d      (const BYTE *)(&SafeTrans),: }# U( T3 i, s( ^9 E. c' C8 P
     sizeof(DWORD));//可选项+ S* Q  M+ O( K1 I; m. p
}( k' M( z( h7 }# r1 ^9 b

$ S3 [! n( T$ i1 @# d : h6 L" I& e2 s  g! _' `5 }. I0 ~
8 p: J2 ^8 K( G  D0 w
调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 11:51 , Processed in 0.018295 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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