Office中国论坛/Access中国论坛

标题: 再谈链接表 [打印本页]

作者: sam_yuan    时间: 2004-7-8 07:43
标题: 再谈链接表
我长久以来一直被这个问题所困扰:如何在打开启动窗体时,自动定位链接表,也在论坛中发了几个询问的贴子,但是得到的答案都不尽人意。我所希望的结果是当打开启动窗体时,先验证是否链接成功,如没有则自动链接(二个条件在同一个文件夹内)。在爱赛思应用俱乐部 看到ADMIN写的《重新定位链接表二步走》,就是这个意思,但他是自己选择链接表路径的,而我希望的是自动链接更新。以及WnEunfn 写的《 带进度条的修复链接表……[原创]》(下面可下载的是带进度条的修复链接表

[attach]5301[/attach]

不知他们测试过没有,这俩个方法运行时都有点小问题。能否请论坛中的高手写一个简单点的放上来,供我们学习。最好附有例子。

以下是转《重新定位链接表二步走






重新定位链接表二步走

来源:爱赛思应用俱乐部 kevindeng











尽管Accxp网上有很多关于定位链接表的贴子,但还是有很多的朋友询问这方面的问题。应letter网友的提议,结合Alex总版主的重新定位链接表文件源码,现将这方面的具体操作介绍如下:

假设前台数据库文件名为frontBase.mdb

后台数据库文件名为backData.mdb

frontBase当中有链接表tbl1, tbl2, tbl3, …,链接到backData.mdb中

首先我们要在前台数据库文件的启动窗体加载事件中判断链接是否正确,方法是打开任意一个链接表,假设为tbl1,代码如下:

Public Function CheckLinks() As Boolean

' 检查到后台数据库的链接;如果链接存在且正确的话,返回 True 。  

  Dim dbs As Database, rst As DAO.Recordset  

  Set dbs = CurrentDb()

  ' 打开链接表查看表链接信息是否正确。

  On Error Resume Next

  Set rst = dbs.OpenRecordset(“tbl1”)

  rst.Close

  ' 如果没有错误,返回 True 。

  If Err = 0 Then

    CheckLinks = True

  Else

    CheckLinks = False

  End If  

End Function

启动窗体的加载事件:

Private Sub FORM_Load()

If CheckLinks = False then

Docmd.OpenFORM “frmConnect”

End If

End Sub

frmConnect 连接窗体如下图

f:\m.bmp



接下来的事情就是如何刷新链接表了。

上面的窗体右边的按钮是用用来调用API打开文件对话框,具体代码如下:

Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Boolean

Type OPENFILENAME

  lStructSize As Long

  hwndOwner As Long

  hInstance As Long

  lpstrFilter As String

  lpstrCustomFilter As String

  nMaxCustFilter As Long

  nFilterIndex As Long

  lpstrFile As String

  nMaxFile As Long

  lpstrFileTitle As String

  nMaxFileTitle As Long

  lpstrInitialDir As String

  lpstrTitle As String

  flags As Long

  nFileOffset As Integer

  nFileExtension As Integer

  lpstrDefExt As String

  lCustData As Long

  lpfnHook As Long

  lpTemplateName As String

End Type

Private Sub FileOpen_Click()

  Dim ofn As OPENFILENAME

  Dim rtn As String

  ofn.lStructSize = Len(ofn)

  ofn.hwndOwner = Me.hwnd

 

  ofn.lpstrFilter = "数据库文件 (*.mdb)" & vbNullChar & "*.mdb"

  ofn.lpstrFile = Space(254)

  ofn.nMaxFile = 255

  ofn.lpstrFileTitle = Space(254)

  ofn.nMaxFileTitle = 255

  ofn.lpstrInitialDir = CurrentProject.Path

  ofn.lpstrTitle = "后台数据文件为"

  ofn.flags = 6148

  rtn = GetOpenFileName(ofn)

 

  FileName.SetFocus

  If rtn = True Then

    FileName.Text = ofn.lpstrFile

    FileName.Text = FileName.Text

    OK.Enabled = True

  Else

    FileName.Text = ""

  End If

End Sub

连接按钮刷新链接表,代码如下:

Private Sub OK_Click()

Dim tabDef As TableDef

For Each tabDef In CurrentDb.TableDefs

If Len(tabDef.Connect) > 0 Then

tabDef.Connect = ";DATABASE=" & Me.FileName.Text & "WD=" + 后台数据库密码

tabDef.RefreshLink

End If

Next

MsgBox "连接成功!"

DoCmd.Close acFORM, Me.Name

End Sub



其实很简单只有两步,判断链接是否正确和刷新链接表。



[此贴子已经被作者于2004-7-7 23:44:57编辑过]


作者: zhengjialon    时间: 2004-7-9 17:45
记得有人发布过一个完整的自动后台链接表的示例。其实这是很简单的,上面不是有一个自已选择路径的例子吗?你把其中的自已选路径的对话框那一步换成当前文件夹的路径(application.CurrentProject.Path  & "\后台库名.mdb")就可以了啊。其它照原来的.
作者: sam_yuan    时间: 2004-7-9 17:53
我做过了,不行,不知是什么原因,你能给个例子吗?谢谢了先
作者: zhengjialon    时间: 2004-7-9 18:00
你试过了?调试到哪一步不行的?出现什么样的错误提示?总要有个理由的吧?其实这个论坛上肯定有人发过的(或许是整合在其它例子中的)。建议自已一步一步的做,通不过的地方再问。
作者: sweetduck    时间: 2004-7-9 18:15
其实这个例子已经很详细了只是你没有抓到窍门我就按上述改动后成功自动连接你把选择连接删除,换上你的连接地址也就是省略选择还有不明白的可以到我的论坛问
作者: sam_yuan    时间: 2004-7-10 18:47
我照上面做的,不行,可以看一下吗[attach]5338[/attach]



[此贴子已经被作者于2004-7-10 10:47:43编辑过]


作者: zhengjialon    时间: 2004-7-10 19:37
[attach]5341[/attach]




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3