设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 4933|回复: 11
打印 上一主题 下一主题

[ADO/DAO] 【请教】一个用DAO刷新链接表时遇到的奇怪问题

[复制链接]
跳转到指定楼层
1#
发表于 2010-7-23 15:24:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 红尘如烟 于 2010-7-23 23:21 编辑

链接表是链接到SQL Server数据库的,用DAO来进行刷新,代码大致如下:
  1. Dim tdf As DAO.TableDef
  2. Dim strConnect As String

  3. strConnect="ODBC" & _
  4.            ";DRIVER=SQL Server" & _
  5.            ";SERVER=192.168.1.1" & _
  6.            ";DATABASE=数据库名称" & _
  7.            ";UID=sa" & _
  8.            ";PWD=1234"
  9. For Each tdf In CurrentDb.TableDefs
  10.     If tdf.Connect Like "OCBC*" Then
  11.         tdf.Connect=strConnect
  12.         tdf.RefreshLink
  13.     End If
  14. Next
复制代码


出现一个很奇怪的问题,这刷新链接表之后,前台客户端程序立马增加原始大小的一倍,原始程序大概是3M,刷新一次变成了6M,再刷新一次变成了9M……
我跟踪了一下,tdf.RefreshLink这一句一执行之后,体积就增大了。这个问题感觉有些莫名奇妙,摸不着头脑,哪位达人能够解答一下?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
2#
发表于 2010-7-23 17:55:39 | 只看该作者
不懂DAO,帮红尘同志顶一下。
3#
发表于 2010-7-23 19:41:12 | 只看该作者
这个情况好像跟“压缩和修复数据库”的那个功能有关吧?
测试了一下,与复制一个大表粘贴后再删除复制的那个表一样,只要没有压缩数据库,数据库增大了不少

点击这里给我发消息

4#
发表于 2010-7-23 20:17:15 | 只看该作者
我测试了一下,确实前台数据库体积爆增。
我的情况是这样的,前台数据库原始大小2.67M,第一次刷新链接表后,体积变为137M,第二次变为146M,第三次变为149M,第四次变为151M。
值注意的是SQL后台数据库大小是151M,刷新链接表似乎是把后台数据搬到了前台,但实际只是链接而已,压缩后前台又变为原始大小了。
我也不知道什么原因!或许要问微软...
5#
发表于 2010-7-23 21:53:19 | 只看该作者
总感觉直接用链接表连接到SQL后台  ,太不安全啦

6#
 楼主| 发表于 2010-7-23 23:05:36 | 只看该作者
本帖最后由 红尘如烟 于 2010-7-23 23:06 编辑

说起来是不安全,不过用起来方便,升迁到SQL Server完全不用改设计,不然用ADP很多地方需要改,我一般都是用CurrentDb.TableDefs("表名").Attributes=dbHiddenObject这样将表隐藏起来,一般用的人就算用Shift键打开了也看不到里面的表,这样子凑合用也差不多了
其实安全问题也不是咱们看的那么明显,我们这些人经常研究Access的觉得它不安全,但实际用的人绝大部分根本就是对Access完全不懂,所以也就无所谓了,我都见过好几个公司用的是用友之类的ERP,数据库密码都没设
7#
 楼主| 发表于 2010-7-23 23:13:50 | 只看该作者
本帖最后由 红尘如烟 于 2010-7-23 23:16 编辑

刚才没注意,小宝换了个马甲居然没认出来
我以前试过直接用ADO的方式连接数据库(非ADP方式),这样数据库就完全不存在表了,对于窗体直接把ADO记录集绑定到窗体,安全性自然大大加强,如此就只需要启动之后创建一个全局ADO.Connection变量,其它记录集就直接引用它就行了。
但有一个问题没想到什么好办法解决,就是用了这种方式之后,组合框和列表框的行来源就没有办法像平时那样设为SQL语句,系统会自动使用记录集进行填充,最后这事也就不了了之
8#
发表于 2010-7-23 23:35:25 | 只看该作者
学习一下。我觉得连接表就是运行的时候把表复制过来,有数据更新的时候再同步。在连接SQL Server 的大量数据的表的情况下,这种方式的运行效率会很低。
9#
发表于 2010-7-24 04:35:57 | 只看该作者
回复 红尘如烟 的帖子
.......但有一个问题没想到什么好办法解决,就是用了这种方式之后,组合框和列表框的行来源就没有办法像平时那样设为SQL语句,系统会自动使用记录集进行填充,最后这事也就不了了之.......

这个可以解决。组合框列表框的行来源一般用表/查询、sql语句,但也可以用记录集(这个用的比较少,相当于动态使用),其语句为:
set combo.Recordset=CurrentDb.OpenRecordset(strSql)

另外,楼顶的问题,似乎涉及到临时存储问题,word、excel 都有这种情况。可以试试不要用刷新,而用删除链接表再重新链接,我没有试过,不一定有效。   
10#
 楼主| 发表于 2010-7-24 18:45:01 | 只看该作者
感谢 sgrshh29 的指点,长见识了!用了这么多年Access,我居然都没有注意到组合框、列表框居然还有一个Recordset属性!
链接表的临时存储我一直以为是放在内存中的,看来不完全是这样了,不然没办法解释这个刷新之后客户端体积变大的问题。至于删除链接表重建我也试过,也会增大,但的确增大的不多。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-1 19:44 , Processed in 0.084708 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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