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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:0 r1 a- f. |* V5 l! @

$ g( w2 D/ l7 p2 cvoid RegisterDBSource(CString strDSName, CString strDBPath)
* U6 O# E% }9 J+ y2 c& U{
' f8 ?+ v: U! U: r! Z, F HKEY hKey;# D9 X+ U3 i- w& F
   DWORD nLabel;
2 D2 `2 r) }% b* g& T# P$ T
) f) m; O5 ~" b! s  U CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
9 G) W$ e1 ?4 x3 q* g3 ^& u; M CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
) l, U# y. |1 {; w7 _, K) Q3 ]" B* }& x: M4 b  [1 d) U, \
if(strDSName.IsEmpty()) return;# f) v+ ^9 {3 a' a' W9 v& S
if(strDBPath.IsEmpty()) return;  J8 J% `. r, |9 C9 v2 e

' c: O$ i& D8 ? CString strDataSource = strBaseKey + _T("\\") + strDSName;5 l0 [9 Q: ^  a: h9 T$ Q

+ L- K& z& @2 b" k! u0 F. H1 w  n CString strMdb = _T("Microsoft Access Driver (*.mdb)");
/ U! j0 b/ P: \ CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");" e% w. i8 e& n9 d& H9 E- Q
CString strFIL = _T("Ms Access;");
5 G, ~- K% i) o) d4 V CString strUID = _T("");$ n( T; J, C, k4 o/ n6 Z: [8 Y* ~" \

1 @- S! i; Q9 y/ C5 K . p- @9 z/ W4 A

. H# \* a1 }( p" {" e5 J' U# }3 L RegCreateKeyEx(HKEY_CURRENT_USER,
* |& w. C- @  W* T% K              strMid,
; B, b9 p9 v1 R5 z- B        0,
# Q! ~/ F: o7 i     NULL,
! z# }; s% N+ r* O     REG_OPTION_NON_VOLATILE,
* d: h- ^+ i4 S     KEY_ALL_ACCESS,7 A5 ?& U7 I/ ~& n
    NULL,
  {# [( E# H" G) I) H( C     &hKey,
% i* o, ]+ O3 Z/ z" A/ @     &nLabel );//获取数据源键值句柄" @* [4 L2 `; B

( C5 [. X* @4 C0 B2 v9 w RegSetValueEx(hKey,
! t# k. i1 j: C, a      strDSName,
, n8 U/ p0 A' T; E$ Y6 g( |/ d. {9 B      0,
! C* J8 n" ?9 _6 b2 F* ]      REG_SZ,% \' \) w" c- u
     (const unsigned char *)((LPCTSTR)strMdb),0 }' }' P5 p- q( A: r; o( X6 h5 A
     strlen((LPCTSTR)strMdb)+1);///设置数据源类型
/ e6 I' Z' Y" g, ]4 r' ~5 v7 W) U" P9 N& f0 [, g: d' Z
RegCreateKeyEx(HKEY_CURRENT_USER,- m. K5 i4 a  r
         strDataSource,
# ^: Y7 S, s+ a* w. Z    0,
" b% R" e* b' f9 M6 B+ j' ^( u    NULL, 1 \4 T% s$ N- q' Z
   REG_OPTION_NON_VOLATILE,
. O% Q. |5 ]3 y2 r. v    KEY_ALL_ACCESS,  i/ ~" @! P- I9 ^8 Z0 f
   NULL,- P& r: R5 G. o* j
   &hKey, 9 o6 i8 w8 l. j3 ^$ h! C1 Q
   &nLabel );//创建数据源子键
* f9 n7 A* U  j4 L+ ^) P
$ X' j3 c. U# C2 z0 p RegSetValueEx(hKey,2 J7 x0 N* j6 |5 D+ k
     _T("DBQ"),* V1 p2 l. }, G) t  ~
     0,
: k7 ?  C; r, }, _0 v/ Z      REG_SZ,
; T: k; w6 i, m% A( z( a3 Z      (const unsigned char *)((LPCTSTR)strDBPath),
( ]. H/ `2 K* C8 f) W$ d      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径* h0 f+ c: Q9 w3 h- A$ A
/ {1 M# A# |6 U' }1 Z  N
  RegSetValueEx(hKey,
: `' M  ?: l! `8 M! H. c' ]            _T("Driver"),
3 S% R' H2 W: l% r; y      0,- c: R9 Z5 |) e) g% x
     REG_SZ,
# A% n5 q$ h6 @* W      (const unsigned char *)((LPCTSTR)strDBDriver),
# ?: Z1 N" Y9 {6 J3 R      strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径7 L1 Y! x) y6 g! i4 d3 I
# }" ?. d6 b3 ~! e2 W
RegSetValueEx(hKey,2 l4 O3 `" `/ C% Q
     _T("FIL"),
! _/ r% }' f# ~  k; u7 |" t* {      0,
4 M. Q; m4 v+ l      REG_SZ,( P1 [+ s! S+ @# E
     (const unsigned char *)((LPCTSTR)strFIL),( x$ c0 N' K% X$ O9 w  r5 [
     strlen((LPCTSTR)strFIL)+1);//表的类型
1 }5 W$ @% H+ R+ z3 `6 n% l% a3 ?0 n! A/ k( Z" @+ k5 D5 x4 C  g# Q9 l
RegSetValueEx(hKey,# x8 \* j( z+ t/ Y; e* ]+ ?  x
     _T("UID"),% O6 ?% h" [$ q" R0 ^
     0,
8 i& i! V, `( [. }0 B- w3 l) \      REG_SZ,8 k- v9 t: u3 A* ?
     (const unsigned char *)((LPCTSTR)strUID),( a6 V4 u+ m' \
     strlen((LPCTSTR)strUID)+1);//必须项$ o( u/ v8 G3 p  j. n* M
! H& g' I2 b9 |% l
. C' Z2 x6 o9 f& n4 {* K
DWORD DriverId = (DWORD)25;
3 K% F+ `) v3 B: Y RegSetValueEx(hKey,+ J1 S! d9 \2 g5 r5 _8 q% ~7 U
    _T("DriverId"),
8 f: `4 C9 E( _3 ^     0,
6 ?" A0 P2 q$ \% H* M! l     REG_DWORD,
; }& h4 r) }& f4 u- H- [! I& H     (const BYTE *)(&DriverId),
$ }. E" {; D6 o7 y# L( d8 }8 x     sizeof(DWORD));//必须项' x1 Y+ O- F/ m
) a- {0 b4 y0 ?

% ]+ _# ~% J2 m5 l. V DWORD SafeTrans = (DWORD)0;
' I9 D$ C0 e" d7 ]0 q% W3 U RegSetValueEx(hKey,
  N4 a: L9 I' c( J; ~* P# {      _T("SafeTransactions"),0 i- w& S0 F. z1 L/ C# G
     0,% q/ p) |$ k, h6 N( x
     REG_DWORD,
' R1 ]. T! G) }1 [      (const BYTE *)(&SafeTrans),/ ?) L. C) Y1 s* ~4 O- o5 |
     sizeof(DWORD));//可选项" v% Q- l% r  N" J' T9 s+ J& D  _% x
}0 g9 x: D2 y3 S
/ F  P$ Q1 Y( v
. S1 e( h( X+ m. V# d7 G2 t: r" g

2 |0 N( p3 W) T) q/ B1 E2 F调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-20 07:08 , Processed in 0.035544 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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