Access未公开的两个方法:SaveAsText和LoadFromText

很早以前写的文章,突然找不到了,写在自己的博客里以作留存。

应黄海之邀,突然要写点自己的东西,一下子仿佛不知道写些什么了,研究access这么多年,感觉都是在做企业应用,并没有什么高深的技巧,也没有属于自己的技巧,只好绞尽脑汁,榨点东西出来,希望能对得起黄海和大家:)

在ACCESS中APPLICATION对象有两个未公开的方法,其中一个是SaveAsText, 另一个是LoadFromText.我记得是刚学ACCESS不久,当时在研究FMS一个分析工具时,跟踪发现它总会产生一些临时文件,对这些临时文件分析,发现它与VB里的窗体文件差不多的格式,所以估计微软可以将access的窗体转换为文本格式,并提供一种逆相转换的方法。所以发现了深厚的兴趣,后来就找到这两个方法。
   虽然微软还有其它一些比较好用的未公开的属性,但我在这两个方法上花的时间还是最多的,因为它的确有使用价值,所以说说自己多年来的使用心得。
   这两个方法在以后的ACCESS版本中并不一定支持,所以我并不建议大家使用,但因为有些功能如果使用它来实现,可以节省比较多的时间,所以,在某些情况下,我还是会使用它,至少现有的ACCESS版本都支持这个方法。如果同样的功能你可以通过access正常的方法来实现,我则建议你使用微软公开的方法。切记!

用途1:

使用
      application.saveastext acForm,"我的窗体","c:\test.txt"
    将整个窗体导出到一个文本文件,将其打包发送给朋友,让朋友再使用      
      application.loadfromtext acForm,"我的窗体","c:\test.txt"
    再导回去。你可以压缩打包传送。

用途2:
    可以将窗体保存到文本文件,然后把文本文件存储到OLE字段里,这样整个窗体的界面与代码都可保存到access数据表里,这个方法对编写 代码库管理器 非常有用。在使用时,还可即时将文本文件还原到一个窗体,让使用者即时预览到这个技巧产生的效果

用途3:
     将窗体保存到一个文件文件,使用正则表达式对代码进行分析,可以分析语法,代码结构、语法错误、字数统计等等,你可参考一下FMS的一个access分析工具,它有的功能,你花个半年,做出来应该也没有大问题啦。记得让我试用一下源码哦:)

用途4:
     真正的全局替换,一般我们需要全局替换窗体里一个属性的名称或内容,需要逐个逐个修改,而无法实现像代码中的全局替换,现在将窗体导出到文本文件,在文本文件里进行全局替换,完成后再导回窗体。
用途5:
     繁简转换,中英转换,一般对控件标题、提示文字、默认值等进行文字上繁简转换后并不能真正实现繁简转换,在转换后相应的环境中打开还会出现ACTIVEX控件找不到或者OLE错误,将窗体或其它对象转换为文本文件后再进行繁简转换,然后再转换相应的字符集、字体名称、节的繁简对应名称、CRC校验码等之后,再导回ACCESS相应对象,就可完成整个access程序的转换,相应的程序效果可参见我做的繁简转换通用程序,记住简体一般是134 繁体是136 英文你打开就知了。我奉劝,如果你想做同样的功能,那你最好就别做了,用我的就得了,免得断我财路,我提成20%给你就得了,等两年后积到100元我再一次汇给你:)
用途6:
     中英转换,虽然还需要进行少量手工转换,但已经节省了不少时间,但如何使用正式表达式来正确区别哪些是标题、提示文字、消息框还需要一些技巧。
用途7:
     改变控件的默认属性        
      除了我们在设计状态修改控件的默认属性之外,使用修改文本文件的内容也可达到修改控件默认属性的效果,当窗体或报表导出到文本文件之后,所有的窗体、控件属件以及默认控件属性都在文本文件中体现出来,通过修改这个文本文件里有关默认属性的设置即可达到目的。
     什么是默认属性?举个例子,你从国外下载一个程序,为什么往窗体里面添加控件,控件字体总是Serif,而在简体中文环境下新建的窗体控件,字体都是“宋体”,在繁体中文环境下新建的窗体控件,字体都是“新细明体”,就是因为这个控件的默认属性导致的
用途8:
      实现自动创建窗体模板的效果,将做好的具备基本功能的窗体导出到文本文件保存起来,到需要使用的时间,直接导入回来马上就可能产生一个已具备常用功能的窗体,不需要从头来过,再做得自动化一点,做一个丰富的窗体功能代码库,可让用户选择各种不同的功能,然后从这些代码库里选择想要的代码按照窗体文本文件的格式创建一个文本文件,再由这个文本文件自动组合出一个完善的窗体,不需要用户去编程,他只要选择字段,选择窗体功能、选择样式、选择模板就可实现各种录入窗体、查询窗体、分析窗体、报表统计等等,写程序就变成了组装程序。到时大家没事干了,就开发各个专用组件吧。注意,在文本文件中复制功能和代码,在自动编程化方面,相对窗体里复制控件和代码,具有更大的弹性和可塑性。
用途9:
      如果窗体或报表里有图片或OLE对象,在导出的文本文件里会包含它们的二进制文件,使用正则表达式或其它方法提取这部分内容再将其还原到相应的图片文件中,即可实现将窗体和报表的图像保存取文件(access不支持直接将图像控件的图片保存到文件)
用途10:
      实现将ACCESS窗体和报表转换到VB程序中,现在有一些专业程序提供这种功能,我想基本思路应该是出于此,将窗体和报表导出到文件文件,然后分析它与VB窗体文件之间的分别,然后修改文本文件以适应VB窗体的需要即可实现,只是我没有足够的时间来做这些了:),当然如果你举一反三,你也可能做一个工具,实现将VB的窗体反向转换到ACCESS程序中,毕竟VB的资源和丰富的技巧对access来讲有很大的利用价值
用途11:
       一次性修改access对象里面所用的字体名称 字体大小或其它属性,连窗体的数据表的字体及其它属性也可更改到。
用途12:
       查看窗体和控件的GUID ,并用来做相应的用途
用途13:
       修改窗体和报表有关打印机的信息,为什么窗体的打印设置无法保存,为什么打开报表总会提示原来默认打印机不存在,是否使用当前打印机等等,这些信息其实都保存在窗体和报表里,打开文本文件,什么都清楚了,通过这个功能可实现不少强大的功能,大家发挥想像吧。
用途14:
       如果要获取窗体和控件到底有些什么属性,通过文本文件可知道许多
用途15:
       创建一些新的控件,如组合框,列表框等等,都可直接在里面复制代码来创建,而更有用的是,有些带注册信息(license)的控件,如果原来的窗体可用,但你没有LICENSE,你复制窗体会出现错误,说你没有版权,但如果你将窗体导出到文本文件,再导回一个新的窗体,access就给你蒙过去了,不过,这个方法可别说是我教的:),虽然我试过很多次才试出来的,不过我自己是坚决不用的:),大家都知道啦,我一般在公开场合,都是用正版的:)

用途16:

可以使用上述的方法对整个access的所有对象导出到文件进行备份保存,然后想还原哪个就还原哪个,虽然这种方法有其优点,不过,把整个MDB备份可能更实际些:)

用途17:

可以用于版本控制,不知大家有否在access中使用过SourceSafe,我研究不短时间,发现,它的签入签出就是使用我上述说的方法,在SourceSafe保存的是每个对象的文本格式。如果你有兴趣,可以写一个类似的版本控制工具,我预计2008年会开始写它,如果你在那年之前已经写出来了,那最好寄份源码给我,否则我控告你窃取我的点子:)

用途18:
       除了窗体和报表外,还有其它几乎大部分对象,如查询、视图、存储过程、关系、宏、模块等等都可导出,你可用来做各种各样的用途,这里就不详述了,如果你有独到发现,请一定告诉我哦

作者:tmtony(王宇虹)
文章来源:access中国/Office中国(www.office-cn.net

不过请注意,表是不可导出的:)

另外得告诉大家,在2002(XP)版本开始,微软开始对CRC校验进行检查了,所以导回对象时有时可能会有一些问题。可能微软已经知道有人在滥用这个功能了:)

匆促而就,语句不通或错字处,还请放过一马:)

Access未公开的两个方法:SaveAsText和LoadFromText

时间: 2024-10-13 15:19:36

Access未公开的两个方法:SaveAsText和LoadFromText的相关文章

64位系统使用Access 数据库文件的彻底解决方法

最近,有PDF.NET用户问我怎么在64位系统下无法访问Access数据库的问题,我第一反应是我怎么没有遇到呢?今天一看自己的VS和Office都是32位版本的,所以在VS里面调试访问Access是没有问题的,但是直接使用编译好的.NET程序访问Access,就出问题了,报: 未在本地计算机上注册“Microsoft.Jet.Oledb.4.0”提供程序. 于是,又在公司的电脑上(Win7 64位)做了实验,发现跟家里面的Win8.1 64位 问题一样,上网搜索了一下,大部分都建议将.NET程序

微软未公开的 SP

一些用在SQL 2000的企业管理GUI中,并且不打算用于其他的流程.微软已预计将其中的一些存储过程从未来的SQL Server版本中删除(或已经删除了).虽然这些存储过程可能很有用并为你节省了很多时间,但是他们可以在任何时候改变他们的函数或简单的删除掉. 下面的图表显示了当许多存储过程从一个Microsoft SQL Server版本移入另一个版本时,引入了新的存储过程,而原来的一些则从安装包里删除了.大多数的存储过程,如果不是所有的,要求用户是系统管理员服务器角色以便执行这些存储过程.和文件

微软未公开存储过程及有用的函数

原文:微软未公开存储过程及有用的函数 从网上收集,有些已经在2008不支持或者后续版本不支持,所以需要慎用. XP_FileExist: 用法:EXEC xp_fileexist <filename> [, <file_exists INT> OUTPUT] 例子:exec master.dbo.xp_fileexist 'C:\temp' SP_MSForEachDb: 例子1:exec dbo.sp_MSforeachdb 'select ''?'', * from [?].I

利用未公开API获取终端会话闲置时间(Idle Time)和登入时间(Logon Time)

利用未公开API获取终端会话闲置时间(Idle Time)和登入时间(Logon Time)作者:Tuuzed(土仔)   发表于:2008年3月3日23:12:38 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明.http://www.cppblog.com/tuuzed/archive/2008/03/03/43631.html 可能很多人都知道NT系统的query user命令,命令返回“使用者名称 工作阶段名称 识别码 状态 闲置时间 登入时间”.如图

实现多线程的两种方法:继承Thread类或实现Runnable接口

实现多线程的两种方法:继承Thread类或实现Runnable接口 Java中实现多线程有两种方法:继承Thread类和实现Runnable接口,在程序开发中只要是多线程,我们一般都是实现Runnable接口,原因归结为一点:实现接口比继承类要好. 多线程的第一种实现方式:继承Thread类 步骤如下 创建一个继承Thread的类(假定为A),并重写Thread的run方法 构造一个A类对象,假定为aa 调用aa的start方法.(start方法是从Thread继承过来的) 具体例子如下 pac

两个方法判断启动盘制作情况

对于刚接触U盘装系统的用户来说,他们经常有一个疑问,就是用U盘启动制作工具尝试制作U盘启动盘后,不确定它有没有制作成功.针对这个问题,小编就告诉大家两个判断方法. 第一个方法是,您在制作U盘启动盘之前,首先要看一下U盘的空间大小.然后制作完成U盘启动盘之后,我们再看看U盘的空间,如果制作之后的U盘空间比制作之前的U盘空间小了100多M,那么说明PE系统已经写到您的U盘里面去了,您可以试着重启一下选择U盘启动看能不能使用. 第二个方法就是通过磁盘管理那里查看.在桌面上,我的电脑右键,选择管理,然后

ADODB.Connection 错误 &#39;800a0e7a&#39; 未找到提供程序。该程序可能未正确安装。解决方法!

[问题描述]调试基于ACCESS+ASP的网站程序的时候,遇到如下错误: ADODB.Connection 错误 '800a0e7a' 未找到提供程序.该程序可能未正确安装. /Inc/Function.asp,行 9 [原因分析]因为系统是64位的win7或win8.1所以会出现这个问题,解决方法如下: [解决方法]找到IIS应用程序池,“设置应用程序池默认属性”-->“常规”-->”启用 32 位应用程序”,设置为 True即可解决. ADODB.Connection 错误 '800a0e

C#实现Dll(OCX)控件自动注册的两种方法 网上找的 然后 自己试了试 还是可以用的

尽管MS为我们提供了丰富的.net framework库,我们的程序C#开发带来了极大的便利,但是有时候,一些特定功能的控件库还是需要由第三方提供或是自己编写.当需要用到Dll引用的时候,我们通常会通过“添加引用”的方式将它们纳入到项目中,然后就可以像使用自己的类一样方便的使用它们了.但是,有些Dll库(OCX)文件是需要注册到Windows注册表后才能正常添加和使用的.本文介绍两种为Dll库(OCX)自动注册的方法,为大家提供参考. 首先,大家都知道在Windows的“运行”中,输入“Regs

C++连接mysql数据库的两种方法

现在正做一个接口,通过不同的连接字符串操作不同的数据库.要用到mysql数据库,以前没用过这个数据库,用access和sql server比较多.通过网上的一些资料和自己的摸索,大致清楚了C++连接mysql的方法.可以通过2种方法实现. 第一种方法是利用ADO连接, 第二种方法是利用mysql自己的api函数进行连接. 第一种方法可以实现我当前的需求,通过连接不同的字符串来连接不同的数据库.暂时只连接了mysql,sqlserver,oracle,access.对于access,因为它创建表的