兩箇未公開的ACCESS方法的使用技巧及示例源碼

2017-08-18 11:09:00
zstmtony
原創
840

很多年以前寫的貼子,後來自己的找不到瞭。而網絡上則流傳開瞭。再摘録一下。

應黃海之邀 (Access交流網總版主),突然要寫點自己的東西,一下子彷彿不知道寫些什麽瞭,研究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:
    除瞭窗體和報錶外,還有其牠幾乎大部分對象,如查詢、視圖、存儲過程、關繫、宏、模塊等等都可導齣,你可用來做各種各樣的用途,這裡就不詳述瞭,如果你有獨到髮現,請一定告訴我哦。
    不過請註意,錶是不可導齣的:)
    另外得告訴大傢,在2002(XP)版本開始,微軟開始對CRC校驗進行檢查瞭,所以導迴對象時有時可能會有一些問題。可能微軟已經知道有人在濫用這箇功能瞭:)
    匆促而就,語句不通或錯字處,還請放過一馬:)




請看:
http://www.office-cn.net/Article_Show.asp?ArticleID=276  (已失效)

網友整理成示例
http://www.office-cn.net/thread-52635-1-1.html
分享