a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 86|回复: 0

[Access] 看在access中数据表的自动重新联接

[复制链接]
发表于 2012-7-31 22:26:35 | 显示全部楼层 |阅读模式
 用access做应用程序,往往做成"数据"和"程序"两个数据库,"数据"数据库中只存放数据表,"程序"数据库中存放所有的form,query,report,module等,通过表联接"程序"数据库可以访问所有"数据"数据库中的表。   当我们的应用程序更换存储位置的时候往往失去正确的表联接,造成运行错误。下面的一段程序可以自动找回表联接。在我的应用中"程序"数据库名字是stockMgr.mdb,"数据"数据库名字是stock-Data.mdb, d3 w0 c& p2 E4 Z1 h
  注意: 该程序仅限于"程序"和"数据"存放在同一个目录而且是对应单个"数据"文件的情况。7 w; d: Q+ _/ i, q  U  j( C1 J
  Function ReAttachTable()# g, F  |. ]( k6 }+ r) \
  Dim MyDB As Database, MyTbl As TableDef  E- R& h, Y/ x0 b
  Dim cpath As String8 f! E. Z8 e8 G8 B* Y* ^/ b/ s4 R4 S
  Dim datafiles As String, i As Integer
0 {0 D1 [' F' f' r5 n  q  On Error Resume Next* y6 E, R+ d! D/ C$ w
  Set MyDB = CurrentDb0 M) H; O) |: B8 F6 N  N, R0 i
  cpath = trimFileName(CurrentDb.Name)
" `. N0 L! D6 |& k1 z" B* ?1 B& z  datafiles = "stock-data.mdb"
8 W" H/ C+ `! c( Z; A6 W! ?( E' [; \  DoCmd.Hourglass True5 \8 ~- H3 R8 V
  For i = 0 To MyDB.TableDefs.Count - 1
/ Y  y* z7 h9 U2 P! A  Set MyTbl = MyDB.TableDefs(i)
$ S  l) a/ \2 X( s& m2 j  If MyTbl.Attributes = DB_ATTACHEDTABLE And Left(MyTbl.Connect, 1) = ";" Then$ G; R, W" h# Y, @% t" _: I
  MyTbl.Connect = ";DATABASE=" %26amp; cpath %26amp; datafiles0 E7 ]; p0 M; ^( b7 \% h
  MyTbl.RefreshLink2 G8 N9 V2 `$ H0 P, H: f+ U. K, v
  If Err Then
- `" i, y1 d0 e$ e  If vbNo = MsgBox(Err.description %26amp; ",继续吗?", vbYesNo) Then Exit For
, g" o+ o9 B; ~+ l" j- G- I" h  End If
6 g) Z9 b* x5 R4 g* [  End If
1 D2 \; m4 t9 s5 \% c6 e  z  Next i
$ B( R4 L" w# o5 |& i2 s/ v  DoCmd.Hourglass False/ c# I- O, D* ~. X4 }
  msgbox "Tables relink finish."' r5 F, X# g# @6 v
  End Function' x8 c' i  V- B# ?2 s
  '绝对路径中去掉文件名,返回路径$ t- B2 o, w1 r7 m0 }
  Function trimFileName(fullname As String) As String
5 j- o! {( h+ m5 B4 V% @7 R, C" f  Dim slen As Long, i As Long3 A4 T$ j9 U  a
  slen = Len(fullname)
0 L8 D4 Z+ O2 [& E5 Q  For i = slen To 1 Step -1% o9 l8 I8 k8 j4 v& L
  If Mid(fullname, i, 1) = "\" Then4 R% C+ F1 x% j* A9 r1 r5 z6 u
  Exit For" `9 N6 h; D; P* e3 u8 t& v
  End If7 ], T4 Z9 `3 T8 v- ~
  Next4 d( D! ?  P. i* i7 h- t
  trimFileName = Left(fullname, i)
- O0 B% Z5 S' e* p& Q" n+ C  End Function
( B: m1 J: e) O9 Y1 f  在程序启动或者按钮动作中调用即可。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-7 13:43 , Processed in 0.229452 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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