癥狀運行 Visual Basic for Applications 代碼從文本文件創建鏈接表之后,您會發現在一個或多個記錄中出現 #_Num!。 原因下列陳述中的一個或兩個都為真: 下列注冊表項設為零: HKLM\Software\Microsoft\Jet\4.0\Engines\Text\MaxScanRows
您有帶有下列條目的 Schema.ini 文件: MaxScanRows=0
如果將 MaxScanRows 設為零,則無論是在注冊表中還是在 Schema.ini 文件中,以編程方式鏈接的任何表都有可能包含數據類型不正確的字段。這是因為,將 MaxScanRows 設為零會引起對整個表進行掃描,以便確定字段的數據類型。當發生這種情況時,數據類型是根據字段中的大多數類型來設置的。因此,如果大多數字段包含數字,而一些字段包含文字,例如,在 Access 中字段定義為具有“數字”的數據類型,使得文本項顯示 #_Num!。 解決方案如果您使用文本導入向導進行鏈接,就不會發生這一問題。但是,如果您必須用代碼創建鏈接,就可以在 Schema.ini 文件中為一個或多個字段定義數據類型。在下列舉例中,第一列設為字符數據類型: [Test.txt] Format=CSVDelimited ColNameHeader=false MaxScanRows=0 CharacterSet=ANSI Col1=ID Char Width 3 狀態Microsoft 已經確認這是本文開頭所列出的 Microsoft 產品本身的問題。 更多信息備注:本文中的示例代碼使用 Microsoft 數據訪問對象。為使該代碼正常運行,您必須引用 Microsoft DAO 3.6 Object Library。為此,要在 Visual Basic 編輯器中單擊工具菜單上的引用,并確保選中 Microsoft DAO 3.6 Object Library 復選框。
重現問題的步驟
在驅動器 C 的根目錄中創建名為 Test 的文件夾。 在記事本中,創建名為 Test.txt 的文本文件,并輸入下列數據。然后,將文件保存在 C:\Test 文件夾中。 a b 1 2 3 在記事本中,創建第二個文件,并輸入下列數據: [Test.txt] Format=CSVDelimited ColNameHeader=false MaxScanRows=0 CharacterSet=ANSI 在記事本的文件菜單上,單擊另存為。在保存類型框中,單擊所有文件,然后將文件保存為 C:\Test\Schema.ini。 創建新的 Access 數據庫,然后創建新的 Visual Basic for Applications 模塊。 將下列函數輸入該模塊: 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()
關閉 Visual Basic 編輯器,然后返回到 Access。 打開最新鏈接的表 Test。 請注意,開頭兩個記錄中出現了 #_Num!。
編輯:北京信誠IT保姆IT外包部 http:// www.aboverow.cn www.xcit.com.cn |