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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
6 u5 ^# W! O( q/ ~! J) s8 Y' W
& h- f- p; \: B  c0 Ivoid RegisterDBSource(CString strDSName, CString strDBPath)
3 k% W+ _) L" @) F{
' \8 N; v: E2 C' S# v" Q HKEY hKey;4 e# L1 N2 Z8 E1 l  y
   DWORD nLabel; / ~9 g) K: J# V" W$ Z0 {6 ^0 O

5 _4 j$ L1 Y% i/ J CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
% M7 H1 P1 |1 z8 P2 T+ Y CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
3 r* h0 v9 k7 Y9 W; s4 z5 E3 t& U- Y( `5 Z. G. ~8 m: j* L" M
if(strDSName.IsEmpty()) return;" \! S4 r2 x8 w+ |2 u8 B8 D+ e; j
if(strDBPath.IsEmpty()) return;( X! F8 h1 ]8 P, g

8 {* i4 c3 B# E5 O* o' y3 g! } CString strDataSource = strBaseKey + _T("\\") + strDSName;
3 o# f' @& M1 Z1 Y. {2 g  w2 ~! Y6 y6 g; R5 I3 @
CString strMdb = _T("Microsoft Access Driver (*.mdb)");0 i1 d; H; F( \0 b  O5 p0 a% J4 ?
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
5 ], r9 m# G6 a' j# S2 j# g7 C7 U CString strFIL = _T("Ms Access;");
- f6 `& q+ {- X/ A9 W; F CString strUID = _T("");
2 _: q, p5 x- h- n9 i0 v* g7 n; i
5 _; ^8 D* d& H7 v* D
0 ?+ Y  C2 ?$ A. U8 V0 {2 C+ ^+ N
RegCreateKeyEx(HKEY_CURRENT_USER,
# X6 {9 X2 @6 d4 s% m0 B  Q              strMid,* S" ^  q+ g6 M
       0,
# c* K, [3 F5 U9 A  L     NULL,
: m" G" _/ {5 z1 O1 G/ X     REG_OPTION_NON_VOLATILE,
$ e$ Y  c/ L) I     KEY_ALL_ACCESS,/ K& l# V/ H5 H: Q+ G9 {2 J
    NULL,# Z' P) E6 d+ H" X% j
    &hKey, 7 h5 ^7 o- |! v: G6 N4 E
    &nLabel );//获取数据源键值句柄
! C, S. E/ I$ ]$ b& d' Z
# P" _; g/ N' m- O1 Z RegSetValueEx(hKey,
, n* S; R+ ~8 _; a' K1 v7 G8 Q      strDSName,
- ^1 q/ }" Q- g! Q' a: _      0,
# x+ O/ s# F& D! P# d/ J      REG_SZ," P- j, l6 `! {4 Q
     (const unsigned char *)((LPCTSTR)strMdb),
- T$ X1 ]! C& Z8 d" N      strlen((LPCTSTR)strMdb)+1);///设置数据源类型
! y8 E# {# z! G) ?% o9 s& T, j1 p9 C! H3 C: Y! r! {9 g
RegCreateKeyEx(HKEY_CURRENT_USER,
8 y# i  ]# m# r: Y          strDataSource,! x  I' V/ r+ [- X3 `/ l% `
   0,
* p: y$ {# i- b+ q3 z    NULL, . B+ g; _& @' E
   REG_OPTION_NON_VOLATILE, ! m& P% n; r4 y1 L% Q
   KEY_ALL_ACCESS,
; O! {0 T/ z0 J; L# b& z8 |' Y    NULL,7 E  x/ G4 O' J" d' _- V
   &hKey,
2 l5 |5 M; |& k    &nLabel );//创建数据源子键
/ ^+ }$ Z0 T$ o, M: {. P3 K# K
& d" B6 g3 g  S6 m: A4 r* P RegSetValueEx(hKey,! S  `, [" M$ R0 k6 N
     _T("DBQ"),
6 S0 ]; y& d" r" F3 v8 s" L      0,/ T1 q9 I0 B& P, |7 \
     REG_SZ,( ]5 d# _0 d4 X) E9 m
     (const unsigned char *)((LPCTSTR)strDBPath),
- Z& C# [' T7 |) A" Y2 u! u      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径. b7 H* L3 P1 A5 X
8 B% ?: Z1 E" [1 h
  RegSetValueEx(hKey,
  }4 v  P' k) K! b" L4 [            _T("Driver"),
& L3 C9 b% ~/ f      0,
% q5 M. @# I. k      REG_SZ,( [/ Z3 Z8 u; p" a7 b4 g! _
     (const unsigned char *)((LPCTSTR)strDBDriver),
4 j, h7 @* x, R) N& a      strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径; v; d& ^) w6 |* H* I( ]5 K7 |& b8 g

8 c( P4 I* x# l0 A: ?) M% N RegSetValueEx(hKey,
9 U9 v  z6 v7 j4 K- l1 _) I5 V      _T("FIL"),7 y: B' k0 [) a& Q
     0,
( s% ~7 }8 J+ C+ \3 ^2 b2 ?3 T# d7 ~      REG_SZ,
- |1 Q& n) B& Q4 P) X1 r& {) j      (const unsigned char *)((LPCTSTR)strFIL),
8 T' U, s6 w% H5 T+ w      strlen((LPCTSTR)strFIL)+1);//表的类型
4 J% N6 j" M( J
/ Q# _5 P) t# B: b RegSetValueEx(hKey,
/ X, V( g% B) r      _T("UID"),
. U, z  H) e9 O* W/ l      0,
5 Z& }" f5 X9 n. i% T( |- J4 r      REG_SZ,/ y" S' Q! m" A+ Q( B, l6 f
     (const unsigned char *)((LPCTSTR)strUID)," `  O" i: n! `9 ~0 \+ n" z$ A
     strlen((LPCTSTR)strUID)+1);//必须项0 t" T  ~* n  _" n2 P  }: k3 \

3 \* k  ~$ J8 n8 ^
0 z. w. e% R' b9 C0 s$ [  T DWORD DriverId = (DWORD)25;
4 @6 G7 D5 d, J3 g. n. [, H3 G; g RegSetValueEx(hKey,
1 C1 r" n2 ~" u0 G     _T("DriverId"),* Q6 ]- g; @% h  e- S/ V- o
    0,, i! X5 O) E: m$ `# O
    REG_DWORD,
3 t) l& r1 y9 t     (const BYTE *)(&DriverId),
' m: d0 B2 F6 j( ?     sizeof(DWORD));//必须项
8 t  J9 s/ `7 R' r5 P2 B; m3 p& V 7 `) u7 p0 G0 o9 G' N2 `
) T/ M- ^! s' H4 E; c+ O" I
DWORD SafeTrans = (DWORD)0;
9 s3 G9 m: L* W2 L: I9 R RegSetValueEx(hKey,% N# }: A  C& ~9 x8 V
     _T("SafeTransactions"),$ Z8 a5 w7 D! [, a+ G, U
     0,# [. D; I4 u+ a' [
     REG_DWORD,; g' u. u( O' a0 j
     (const BYTE *)(&SafeTrans),8 J! u  p, f5 y  d3 V% }
     sizeof(DWORD));//可选项4 H7 }- A+ B0 Q+ o3 [2 Y& u
}: U5 X5 g& q3 q( @. S

2 {5 i4 O5 K5 i( V - W7 {2 {( I$ Q
. a/ M" _# s4 p
调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 03:53 , Processed in 0.034562 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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