设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1972|回复: 6
打印 上一主题 下一主题

[其它] 再谈链接表

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



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

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






重新定位链接表二步走

来源:爱赛思应用俱乐部 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编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2004-7-9 17:45:00 | 只看该作者
记得有人发布过一个完整的自动后台链接表的示例。其实这是很简单的,上面不是有一个自已选择路径的例子吗?你把其中的自已选路径的对话框那一步换成当前文件夹的路径(application.CurrentProject.Path  & "\后台库名.mdb")就可以了啊。其它照原来的.
3#
 楼主| 发表于 2004-7-9 17:53:00 | 只看该作者
我做过了,不行,不知是什么原因,你能给个例子吗?谢谢了先

点击这里给我发消息

4#
发表于 2004-7-9 18:00:00 | 只看该作者
你试过了?调试到哪一步不行的?出现什么样的错误提示?总要有个理由的吧?其实这个论坛上肯定有人发过的(或许是整合在其它例子中的)。建议自已一步一步的做,通不过的地方再问。
5#
发表于 2004-7-9 18:15:00 | 只看该作者
其实这个例子已经很详细了只是你没有抓到窍门我就按上述改动后成功自动连接你把选择连接删除,换上你的连接地址也就是省略选择还有不明白的可以到我的论坛问
6#
 楼主| 发表于 2004-7-10 18:47:00 | 只看该作者
我照上面做的,不行,可以看一下吗



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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

点击这里给我发消息

7#
发表于 2004-7-10 19:37:00 | 只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-6 21:54 , Processed in 0.086402 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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