Office中国论坛/Access中国论坛

标题: 如何得到全部的用户表名称? [打印本页]

作者: chul72    时间: 2005-5-27 08:20
标题: 如何得到全部的用户表名称?
我想将全部的用户表一次导出到*.XLS中,但我如何才能得到全部的用户表名称呢?

    Dim obj As AccessObject, dbs As Object

    Set dbs = Application.CurrentData

    For Each obj In dbs.AllTables

            ' Print name of obj.

            Debug.Print obj.Name

    Next obj



我用此方法得到的表包含了系统自带隐藏的表,这不是我要的.
作者: 海狸先生    时间: 2005-5-27 16:09
用名字判断一下不就可以了?
作者: chul72    时间: 2005-5-27 21:28
在我的程序里每次导入外部数据作为程序的基本数据时会自动生成一个表来存放原始数据,(后面还有更复杂的操纵等这个问题解决后再请教)而表的名字由用户&日期自动生成.用名字判断不现实吧?如果能得到所有的用户表名,就可以一次将它们导出到一个电子表格*.XLS中来进行备份数据了.海狸先生有什么更好的办法来进行备份和还原操作呢?
作者: 海狸先生    时间: 2005-5-27 22:21
呵呵,系统表的名字是固定的嘛,我的意思是判断是否系统表,而不是判断是否是你的表
作者: chul72    时间: 2005-5-28 05:29
喔,原来如此.我用下列方法可实现一次将全部用户表导出到d:\test.xls文件中去.Private Sub cmdBackUp_Click()

    Dim obj As AccessObject, dbs As Object

    Set dbs = Application.CurrentData

    For Each obj In dbs.AllTables

        If obj.Name <> "MSysAccessObjects" And obj.Name <> "MSysAccessXML" And obj.Name <> "MSysACEs" And obj.Name <> "MSysIMEXColumns" And obj.Name <> "MSysIMEXSpecs" And obj.Name <> "MSysObjects" And obj.Name <> "MSysQueries" And obj.Name <> "MSysRelationships" Then

            DoCmd.TransferSpreadsheet acExport, 8, obj.Name, "d:\test.xls", True, ""

        End If

    Next obj

End Sub

当然在程序中可以由用户指定路径和文件名.但导出的这个文件任何人都可以打开,这样数据安全何从谈起!.现在问题来了:如何保证这个文件的数据安全,又不会造成程序导入时有麻烦?最好是用EXECL不认识它.
作者: 海狸先生    时间: 2005-5-28 05:34
If obj.Name not like "MSys*" then  不就可以了。。。。名字改一下?不要用.xls,用.x试试
作者: chul72    时间: 2005-5-28 05:37
谢乐!再试下.
作者: chul72    时间: 2005-5-28 05:40
提示:编译错误:缺少表达式.指向like ???????
作者: 海狸先生    时间: 2005-5-28 05:49
   Dim obj As AccessObject, dbs As Object

    Set dbs = Application.CurrentData

    For Each obj In dbs.AllTables

        If Not obj.Name Like "MSys*" Then

            MsgBox obj.Name

        End If

    Next obj
作者: chul72    时间: 2005-5-28 06:02
原来写错个字母呀.哈哈哈......但我改变那个d:\test.xls为TEST.X或别的什么的就发生运行时错误"3027".看来TransferSpreadsheet方法只支持XLS了,能不能在完成导出后,用代码将这个文件改成.BKP名呢?导入时先将名字改会来.再导入.另外:当我导入时有什么办法同上述方法一般读出XLS中SHEET集合的每个名字呢?
作者: 海狸先生    时间: 2005-5-28 16:32
用name函数另外,俺没研究过xls,呵呵,有空时帮你去看看
作者: chul72    时间: 2005-5-28 17:29
用name函数?没听说过.帮助里没有哇!
作者: HeyEric    时间: 2005-5-28 18:41
用if lcase(left(obj.Name,4))<>"msys"也同样的效果,哈哈。
作者: 海狸先生    时间: 2005-5-28 18:43
以下是引用HeyEric在2005-5-28 10:41:00的发言:



用if lcase(left(obj.Name,4))<>"msys"也同样的效果,哈哈。
简单的事情复杂化了
作者: HeyEric    时间: 2005-5-28 18:43
以下是引用chul72在2005-5-27 22:02:00的发言:



原来写错个字母呀.哈哈哈......

但我改变那个d:\test.xls为TEST.X或别的什么的就发生运行时错误"3027".看来TransferSpreadsheet方法只支持XLS了,能不能在完成导出后,用代码将这个文件改成.BKP名呢?导入时先将名字改会来.再导入.

另外:当我导入时有什么办法同上述方法一般读出XLS中SHEET集合的每个名字呢?



第一个问题我想你应该用到FSO,用它来修改文件名很简单的说。

第二个问题,我刚在excel区里发了一个帖子,可以参考一下:

http://www.office-cn.net/forum.php?mod=viewthread&tid=27958
作者: 海狸先生    时间: 2005-5-28 18:45
以下是引用chul72在2005-5-28 9:29:00的发言:

用name函数?没听说过.帮助里没有哇!



说错了,是name语句

Name oldpathname As newpathname
作者: HeyEric    时间: 2005-5-28 18:47
以下是引用海狸先生在2005-5-28 10:43:00的发言:

简单的事情复杂化了



HOHO,就用了两个系统函数而已啦。还好还好,HOHO。
作者: 海狸先生    时间: 2005-5-28 18:48
原来可以不用一个函数实现的,为什么要加两个函数去实现呢?
作者: chul72    时间: 2005-5-28 19:11
其实我的问题是:我想在ACCESS应用中导出全部的用户表数据到一个XLS中作为备份,并为它加上密码.(感谢HeyEric已帮我解决),但还要为这个应用写个还原数据的功能呀.所以我要以XLS里的SHEET集合为循环条件,将所有的SHEET写回ACCESS的表中,再写回前我还要检查下第一行的每列的值来和ACCESS中的表结构是否相同.其实我也是不知道如何处理备份和还原的问题才想出这个笨办法的,海狸先生的备份和还原如何处理呢?
作者: 海狸先生    时间: 2005-5-28 19:20
导来导去做什么呢?能不能说说看?
作者: chul72    时间: 2005-5-28 19:20
我有个用VB写的示例在备份和还原时用到了一个storage.DLL.但打开工程文件运行时提示错误:48 文件未找到,storage.dll.但我运行示例里已经编译好的EXE文件时并未报错????用它备份后产生一个*.BKP文件.不知道海狸先生有否兴趣研究下,做个在ACCESS下的备份和还原的经典出来.?
作者: 海狸先生    时间: 2005-5-28 19:21
我想先了解你的思路,把access导出excel,然后又把excel导回access,为什么?
作者: chul72    时间: 2005-5-28 19:52
我写的这个ACCESS应用主要功能是:将客户的数据(XLS)经简单处理导入到表中,因为客户每次送来的资料有许多重复的,且资料中的一些信息(联系人,电话,地址等)不是更新的.所以在导入时只将未重复的数据导入到基表中,然后按基表的数据处理客户资料.但每次导入的客户数据要全部另外保存以便生成报表返回客户处理后的情况,但又不能将更新后的资料给客户.所以那个基表和相关的其它表就太重要了,有必要备份它,至于是什么格式无所谓,只要它不能被其它常用软件或方法打开它就行.还有就是还原时方便.第一次用ACCESS编程,有许多的问题没解决呀.
作者: chul72    时间: 2005-5-28 20:20
还想问个关于表结构的问题就是客户的数据导入后,我在"客户资料批次"表中将写入'客户资料批次','客户名称','联系人','客户电话','本次经手人','经手日期','领取数量','完成数量',未完成数量','是否返还'(导入时,将全部数据存放在按'客户名称'&当前日期'为名的表中,将不重复的数据导入到'基表'表中,)在基表中,有'条形码','帐号','开户行','地址','联系人','电话','投递员','投递日期','投递情况','未完成原因',按'客户名称'&当前日期'为名的表中,有有'条形码','帐号','开户行','地址','联系人','电话'现在如何在处理'基表'时,如更新其中一条记录的'投递员','投递日期','投递情况','未完成原因',时也将按'客户名称'&当前日期'为名的表中的'投递情况','未完成原因'更新.(问题是在基表中并不知道这条记录是从属于哪个'批次'的.而且在实际处理时谁也不知道,因为客户可能每天都有一个批次,投递员在一堆未投递的资料中自己找线路熟悉的.)我感觉到现在的表结构无法实现,难道要推翻重新设计表结构?
作者: 海狸先生    时间: 2005-5-28 22:02
为什么不考虑设计一个mdb给客户?
作者: 海狸先生    时间: 2005-5-28 22:09
像这种情况,只有把例子放上来,说明清楚,别人才好下手解决,隔行如隔山啊,呵呵
作者: chul72    时间: 2005-5-29 05:25
其实这是帮我同事写的,看他每次忙的不可开交,就产生了这个念头.但在这之前没接触过ACCESS,所以问题多多,不过还是勉强写了个给他用了,(他觉得非常好用,但我是连自己都看不过去了,一句话形容,"惨不忍睹")本来我是要边学边用VB写的,但发现那个报表功能太弱,突然发现了ACCESS,就试着写了.现在我想重新写,加强些功能.我那同事现在提出要加入利用INTERNET提供给用户一个查找资料当前状态的功能.不知道能否将以前的那个传给你,好让你了解它的主要工作过程.(新的应用主要是将各个功能分开,并提供一些统计功能等)
作者: 海狸先生    时间: 2005-5-29 18:57
可以啊
作者: chul72    时间: 2005-5-29 22:59
我已经发到你的邮箱里了.有时间帮我看看.
作者: 海狸先生    时间: 2005-5-30 04:41
收到了,请说明一下
作者: chul72    时间: 2005-5-31 05:40
我传给你的那个,它是将每批客户数据都导入一个表中(有重复不导入),然后对这个表进行操作.其中查询窗口具有添加,编辑,删除数据等功能,左上角的组合框绑定的就是表中的条形码字段,并具有查找功能.实际应用中是用条形码扫描枪来输入数据进行查询的.窗口的下部的子窗口是存放打印数据的,可以手动或自动将当前记录添加进去.那个批处理是当投递员将资料投递完拿回时分类将不同的结果利用条形码扫描枪快速更新表用的.重要是更新投递员工号,投递状态(成功,失败等)及投递失败原因.用这个程序基本可以实现这些功能,但没有办法知道没批资料的具体情况,(如:每批的数量,是否全部投递过等)在现在这个程序里,操作员根本就不知道投递员拿回扫描的这份资料是哪批次的.(客户每批次资料有大量重复的条形码)我想在新写的程序中将这写问题解决,但还没想好每个表结构和关系.我的设想是1>在新程序中将每批次的客户资料导入时单独新建一个表来存放并将每次导入资料时的详细信息写入另一个表中,同时将这个表中与基表中有重复的不导入.(基表中主要存放更新过的客户资料如:地址,电话,联系人等)2>建一个窗体作查询用,基本功能是当输入条形码后显示更新过的客户资料如:地址,电话,联系人等,这个信息来源于基表.同时还要显示资料投递信息如:投递员,投递时间,投递状态(成功,失败等)及投递失败原因.这个信息来源于新建表.但问题是我现在还不知道在代码中如何将新建表与基表建立关系?3>在将客户资料拿回后分给投递员时,在另一个窗体中将有如下功能:当扫入\输入条形码后查询表,如果有就更新字段'投递员工号,投递时间,投递状态等.(十几个投递员每人领取几十份资料并登记时很费时,这个模块就是解决这些问题的)并将领取的资料数量及详细信息列表打印出来.问题是我查询什么表呢,如果查基表,地址等信息是更新的但不知道是哪批次的.如果查新建表,那么多表而且有重复的.查哪个呢?4>当投递员投递资料拿回后也建个模块,处理相关信息如地址,电话,投递状态,失败原因等,和上面类似也用条形码扫描枪处理.但地址等是更新基表,投递状态是更新新建表不知道海狸先生看明白了吗?所以,综上所述,解决此问题的关键是...有请海狸先生!问我为什么搞这么复杂?因为客户的资料要全部返回给客户还要告诉客户每份资料的投递结果,所以不能将地址等信息告诉人家了,否则自己要饿死...
作者: chul72    时间: 2005-5-31 06:12
如果就按我传给你的那个修改下也能达到那最好了,
作者: 海狸先生    时间: 2005-5-31 16:07
等我有空再帮你看一下,要理清一下思路
作者: chul72    时间: 2005-5-31 20:51
那就等你的好消息了




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3