Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

以代码链接后台数据库,但有密码时报密码无效

AngelHis  发表于:2012-08-13 14:30:11  
复制

'以代码链接后台数据库,后台库无密码时正常链接;但后台库有密码时,即使在“PWD=”写入正确密码系统提示错误:密码无效

'求解。


Public Function ReLink()
    Dim tbl    As TableDef
    Dim db     As Database
    Dim str    As String
    str = "\\服务器名称\共享文件夹\后台数据.mdb "
    For Each tbl In CurrentDb.TableDefs
        If Len(tbl.Connect) > 0 And Left(tbl.Name, 1) <> "~" Then DoCmd.DeleteObject acTable, tbl.Name
    Next
    Set db = OpenDatabase(str, True, True, ";Database=" & str & ";PWD=")
    '注:如后台数据有密码,在“PWD=”后写入密码。
For Each tbl In db.TableDefs
        If Left(tbl.Name, 4) <> "Msys" And Left(tbl.Name, 1) <> "~" Then DoCmd.TransferDatabase acLink, "Microsoft Access", str, acTable, tbl.Name, tbl.Name
    Next
    Set db = Nothing
End Function

 

 

Top
心态哥 发表于:2012-08-13 15:27:28

路过!



叶海峰 发表于:2012-08-14 13:09:13

不需要删除链接表,然后重新链接的,直接重新对链接表的connect赋值就可以了

 Dim tbl    As TableDef
    Dim db     As Database
    Dim str    As String
    str = "\\服务器名称\共享文件夹\后台数据.mdb "
    For Each tbl In CurrentDb.TableDefs
        If Len(tbl.Connect) > 0 And Left(tbl.Name, 1) <> "~" Then 

     Debug.Print tbl.Connect

'tbl.Connect = StrConn

'tbl.RefreshLink

    Next
   



在水一方 发表于:2012-08-15 14:52:20

叶海峰老师的方法没有成功

自己解决了 原来需要独占后台库,把后台库先关闭再操作即可



叶海峰 发表于:2012-08-15 17:41:31

你的代码执行过程是

1.循环表名,判断该表是的Connect属性是否为链接表,如果是的话删除表。DoCmd.DeleteObject acTable

2.再把表重新链接一次

总结来说,是先删除,再链接

 

但如果只对TableDef的Connect属性进行重新赋值的话,根本就不需要删除,链接。Connect属性其实就是在MSysObjects的Connect字段和Database字段的内容。如果链接数据库有密码的话,Connect就会有数据,否则为空。也就是说,要更改链接表的数据源,改变Connect属性的值,MSysObjects的字段相应也会改变。

 

 



总记录:4篇  页次:1/1 9 1 :