癥狀運(yùn)行 Visual Basic for Applications 代碼從文本文件創(chuàng)建鏈接表之后,您會(huì)發(fā)現(xiàn)在一個(gè)或多個(gè)記錄中出現(xiàn) #_Num!。 原因下列陳述中的一個(gè)或兩個(gè)都為真: 下列注冊表項(xiàng)設(shè)為零: HKLM\Software\Microsoft\Jet\4.0\Engines\Text\MaxScanRows
您有帶有下列條目的 Schema.ini 文件: MaxScanRows=0
如果將 MaxScanRows 設(shè)為零,則無論是在注冊表中還是在 Schema.ini 文件中,以編程方式鏈接的任何表都有可能包含數(shù)據(jù)類型不正確的字段。這是因?yàn)椋瑢?MaxScanRows 設(shè)為零會(huì)引起對整個(gè)表進(jìn)行掃描,以便確定字段的數(shù)據(jù)類型。當(dāng)發(fā)生這種情況時(shí),數(shù)據(jù)類型是根據(jù)字段中的大多數(shù)類型來設(shè)置的。因此,如果大多數(shù)字段包含數(shù)字,而一些字段包含文字,例如,在 Access 中字段定義為具有“數(shù)字”的數(shù)據(jù)類型,使得文本項(xiàng)顯示 #_Num!。 解決方案如果您使用文本導(dǎo)入向?qū)нM(jìn)行鏈接,就不會(huì)發(fā)生這一問題。但是,如果您必須用代碼創(chuàng)建鏈接,就可以在 Schema.ini 文件中為一個(gè)或多個(gè)字段定義數(shù)據(jù)類型。在下列舉例中,第一列設(shè)為字符數(shù)據(jù)類型: [Test.txt] Format=CSVDelimited ColNameHeader=false MaxScanRows=0 CharacterSet=ANSI Col1=ID Char Width 3 狀態(tài)Microsoft 已經(jīng)確認(rèn)這是本文開頭所列出的 Microsoft 產(chǎn)品本身的問題。 更多信息備注:本文中的示例代碼使用 Microsoft 數(shù)據(jù)訪問對象。為使該代碼正常運(yùn)行,您必須引用 Microsoft DAO 3.6 Object Library。為此,要在 Visual Basic 編輯器中單擊工具菜單上的引用,并確保選中 Microsoft DAO 3.6 Object Library 復(fù)選框。
重現(xiàn)問題的步驟
在驅(qū)動(dòng)器 C 的根目錄中創(chuàng)建名為 Test 的文件夾。 在記事本中,創(chuàng)建名為 Test.txt 的文本文件,并輸入下列數(shù)據(jù)。然后,將文件保存在 C:\Test 文件夾中。 a b 1 2 3 在記事本中,創(chuàng)建第二個(gè)文件,并輸入下列數(shù)據(jù): [Test.txt] Format=CSVDelimited ColNameHeader=false MaxScanRows=0 CharacterSet=ANSI 在記事本的文件菜單上,單擊另存為。在保存類型框中,單擊所有文件,然后將文件保存為 C:\Test\Schema.ini。 創(chuàng)建新的 Access 數(shù)據(jù)庫,然后創(chuàng)建新的 Visual Basic for Applications 模塊。 將下列函數(shù)輸入該模塊: Function LinkSchema() Dim db As DAO.Database, tbl As DAO.TableDef Set db = CurrentDb() Set tbl = db.CreateTableDef("Test") tbl.Connect = "Text;DATABASE=c:\Test;TABLE=Test.txt" tbl.SourceTableName = "Test.txt" db.TableDefs.Append tbl db.TableDefs.Refresh End Function 在“立即”窗口中鍵入以下行,然后按 ENTER 鍵: ?LinkSchema()
關(guān)閉 Visual Basic 編輯器,然后返回到 Access。 打開最新鏈接的表 Test。 請注意,開頭兩個(gè)記錄中出現(xiàn)了 #_Num!。
編輯:北京信誠IT保姆IT外包部 http:// www.aboverow.cn www.xcit.com.cn |