Access交流中心

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

如何通过VBA动态链接另一带有密码的ACCESS数据库的表

a63521557  发表于:2008-12-15 13:49:25  
复制

本人有一求助贴:http://www.accessoft.com/bbs/showtopic.asp?ID=1448,一直未得解答,现寻思貌似可以通过用链接表的功能实现,特发此贴求助,盼高手回复为感!

 

Top
钱玉炜 发表于:2008-12-16 12:23:18

http://accessoft.com/article-show.asp?id=1127

可以参考一下这里的文章,应该对你有帮助



a63521557 发表于:2008-12-18 16:21:55

还是让我自己来结帖吧。
运用简单的SendKeys指令,模拟人工操作步骤,终于将问题解决了。

附件程序关键代码如下:
Private Sub Command1_Click()
On Error GoTo Err_Command1_Click
   
    Dim I As Integer

    I = CurrentDb.TableDefs.Count - 1
    '删除现有的全部链接表。非链接表名请在其表名中带上sys字符
    While I >= 0
        'Debug.Print I, CurrentDb.TableDefs(I).Name
        If InStr(CurrentDb.TableDefs(I).Name, "sys") = 0 Then
            DoCmd.DeleteObject acTable, CurrentDb.TableDefs(I).Name
        End If
        I = I - 1
    Wend

    Me.txtPWD.SetFocus          '激活密码输入栏
    SendKeys "%EC", False       'Alt+编辑(E)+复制(C)_复制密码(含键盘无法输入的字符)
    SendKeys "%FGL", False      'Alt+文件(F)+获取外部数据(G)+链接表(L)
    SendKeys Me.txtPath, False  '输入数据库带盘符或网络地址符路径的全名
    SendKeys "%K", False        'Alt+链接(K)
    SendKeys "^V", False        'Ctrl+V_粘贴输入数据库密码
    SendKeys "{ENTER}", False   '确定回车
    SendKeys "%A", False        'Alt+全选(A)_选择全部表
    SendKeys "%A", False        'Alt+全选(A)_再次选择全部表,避免网络反映延时阻断
    SendKeys "{ENTER}", False   '确定回车

Exit_Command1_Click:
    Exit Sub

Err_Command1_Click:
    MsgBox Err.Description
    Resume Exit_Command1_Click

End Sub

附件程序中选择获取数据库文件指令按钮及对话框部分的代码取自朱亦文先生的“易和链接表管理器”软件(http://www.accessoft.com/blog/article-show.asp?userid=61&Id=917),在此特向朱先生致敬!

点击下载此附件

a63521557 发表于:2008-12-18 22:00:11
感谢本帖被加精!特此多说明一下,现有好些商品软件和网站的后台数据库采用的都是ACCESS数据库文件,并都加了密码,且其密码中还含有键盘难以输入的控制符。在要保持原有软件所提供的功能可正常运行使用不变的情况下,又想充分利用其录入到ACCESS数据库中的业务数据资源,拓展其功能用途,用本帖所提供的方法不失为一可资借鉴的途径。在此自我推荐了,见笑,惭愧!

a63521557 发表于:2008-12-20 12:53:26

引用一个当前数据库表属性函数,更改了一下原代码
CurrentDb.TableDefs("表名").Properties(1)
0:返回表名
1:返回类型(True 表, False 链接表)
2:返回创建日期
3:返回修改日期

 

更改后,程序关键代码如下:

Private Sub Command1_Click()
On Error GoTo Err_Command1_Click
   
    Dim I As Integer

    I = CurrentDb.TableDefs.Count - 1
    '删除现有的全部链接表。表类型属性CurrentDb.TableDefs(I).Properties(1)为False
    While I >= 0
        'Debug.Print I, CurrentDb.TableDefs(I).Name, CurrentDb.TableDefs(I).Properties(1)
        If Not CurrentDb.TableDefs(I).Properties(1) Then
            DoCmd.DeleteObject acTable, CurrentDb.TableDefs(I).Name
        End If
        I = I - 1
    Wend

    Me.txtPWD.SetFocus              '激活密码输入栏
    SendKeys "%EC", False           'Alt+编辑(E)+复制(C)_复制密码(含键盘无法输入的字符)
    SendKeys "%FGL", False         'Alt+文件(F)+获取外部数据(G)+链接表(L)
    SendKeys Me.txtPath, False    '输入数据库带盘符或网络地址符路径的全名
    SendKeys "%K", False            'Alt+链接(K)
    SendKeys "^V", False            'Ctrl+V_粘贴输入数据库密码
    SendKeys "{ENTER}", False     '确定回车
    SendKeys "%A", False            'Alt+全选(A)_选择全部表
    SendKeys "%A", False            'Alt+全选(A)_再次选择全部表,避免网络反映延迟阻断
    SendKeys "{ENTER}", False     '确定回车

Exit_Command1_Click:
    Exit Sub

Err_Command1_Click:
    MsgBox Err.Description
    Resume Exit_Command1_Click

End Sub

点击下载此附件

a63521557 发表于:2008-12-20 13:58:47

此帖内容已整理成文,发表在个人专栏里。http://www.accessoft.com/blog/article-show.asp?userid=373&Id=2829



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