设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[Access本身] 数据库分离前后台后,再将前台转换为accde格式,还能改后台的位置吗?

[复制链接]
跳转到指定楼层
1#
发表于 2013-3-12 12:11:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是不是有点太贪心?
数据库分离前后台,主要是为了使用网络,而我做的是单机用的,分前后台是因为在下功力尚浅,怕做的东西有bug,如果直接转换成accde格式,日后发现问题数据无法提取, 所在才先把数据库分离前后台后,再将前台转换为accde格式,日后有问题就换前台。
可是我发现一个问题,就是在我的电脑上转换时后台在哪里,把转换好后的前台拷到单位的电脑上,单位电脑上的后台也要在相同的目录下,这样不太灵活。我把前后台放在相同的目录里,有没有什么方法每次打开前台时自动更改前台与后台的链接为前台所在目录?这样不论把它们放在哪里都能正常运行。
说了这什么多,也不知道各位高手是否能看懂!还请看懂的朋友不吝赐教!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2013-3-12 12:44:40 | 只看该作者
搜索论坛有刷新数据链接表 的实例, 可在程序打开时自动刷新链接表
3#
 楼主| 发表于 2013-3-12 13:22:23 | 只看该作者
tmtony 发表于 2013-3-12 12:44
搜索论坛有刷新数据链接表 的实例, 可在程序打开时自动刷新链接表

Public Function CheckLinks() As Boolean
' 检查到后台数据库的链接;如果链接存在且正确的话,返回 True 。
   
    Dim dbs As Database, rst As Recordset
   
    Set dbs = CurrentDb

    ' 打开链接表查看表链接信息是否正确。
    On Error Resume Next
    Set rst = dbs.OpenRecordset(CheckTableName)
    rst.Close

    ' 如果没有错误,返回 True 。
    If Err = 0 Then
        CheckLinks = True
    Else
        CheckLinks = False
    End If
   
End Function

Private Function RefreshLinks(strFileName As String) As Boolean
' 刷新到提供表的数据库的链接。如果成功的话返回 True 。

    Dim dbs As Database
    Dim tdf As TableDef

    ' 循环处理此数据库的所有表。
    Set dbs = CurrentDb
    For Each tdf In dbs.TableDefs
        ' 如果表有一个连接串,那么该表是一个链接表。
        If Len(tdf.connect) > 0 Then
            tdf.connect = ";DATABASE=" & strFileName & "WD=" & TablePassword
            Err = 0
            On Error Resume Next
            tdf.RefreshLink         ' 重新链接该表。
            If Err <> 0 Then
                RefreshLinks = False
                Exit Function
            End If
        End If
    Next tdf

    RefreshLinks = True        ' 完成重链接。
   
End Function

Public Function RelinkTables() As Boolean
' 尝试刷新连到“后台数据库”数据库的链接。
' 如果成功,返回 True 。

    Dim strFileName As String
    Dim intError As Integer
    Dim strError As String
   
    Const conMaxTables = 8
    Const conNonExistentTable = 3011
    Const conNotNorthwind = 3078
    Const conNwindNotFound = 3024
    Const conAccessDenied = 3051
    Const conReadOnlyDatabase = 3027
   
    If chonglianjie = False Then
        ' 不能找到“后台数据库”,所以显示打开文件对话框。
        MsgBox "系统检测到数据表:“" & conBackAppTitle & "”链接异常!" & vbCr & _
                "您必须重新定位:“" & conBackAppTitle & "”数据库才能正常使用……", vbExclamation, Title
    End If
    strFileName = GetFileName(3, 1, "取消", CurrentProject.Path & "\Data\data.mdb")
   
    If Dir(strFileName) <> conBackAppTitle Or strFileName = "取消" Then
        strError = "抱歉, 您必须重新定位:“" & conBackAppTitle & "”数据库才能正常使用……"
        GoTo Exit_Failed
    End If

    ' 修复链接。
    If RefreshLinks(strFileName) Then
        RelinkTables = True
        Exit Function
    End If
   
    ' 如果失败, 显示一个错误消息。
    Select Case Err
    Case conNonExistentTable, conNotNorthwind
        strError = "文件 '" & strFileName & "' 不包含所要求的数据库表。"
    Case Err = conNwindNotFound
        strError = "直到您定位了“" & conBackAppTitle & "”数据库,您才能正常使用……"
    Case Err = conAccessDenied
        strError = "因为 " & strFileName & " 是只读的或只读共享的,您不能打开它。"
    Case Err = conReadOnlyDatabase
        strError = "因为本程序是只读的或只读共享的,您不能重新链接表。"
    Case Else
        strError = Err.Description
    End Select
   
Exit_Failed:
    If strFileName <> "取消" Then MsgBox strError, vbCritical, Title
    RelinkTables = False
   
End Function

这个是我想要的吗? 如果是我应该在哪里调用它?主窗体是Open事件?

点击这里给我发消息

4#
发表于 2013-3-12 16:06:02 | 只看该作者
在主窗体 显示数据之前 调用
或在模块中做个函数 ,在启动时调用
5#
 楼主| 发表于 2013-3-12 22:55:43 | 只看该作者
本帖最后由 网络蜘蛛 于 2013-3-12 23:17 编辑
tmtony 发表于 2013-3-12 16:06
在主窗体 显示数据之前 调用
或在模块中做个函数 ,在启动时调用

您所说的“在启动时调用”怎么做?我只会放在窗体里,让我再学一招吧!
只能在启动时就调用,因为刚启动就提示原来的链接是无效链接。
还有accde格式的文件链接是不是已经固定了,能改吗?它不是已经编译好的文件吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-5 13:46 , Processed in 0.089812 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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