2012-02-26 101 views
1

我有我嘗試使用下面的代碼導出到文本文件的訪問查詢:導出查詢輸出到一個文本文件

DoCmd.TransferText acExportFixed, "Export Specification", _ 
    "Test Query", "C:\Users\Documents\TestOutput.txt", True 

我遇到的問題是:輸出文件「TestOutput .txt「的數據以固定寬度顯示,但列標題用逗號分隔。我想列標題也是固定的寬度。

列標題與其餘數據顯示的不一樣?

回答

2

AFAICT,這是TransferText不可避免的「特徵」。它似乎沒有任何內置智能來說「好的,我們將導出爲acExportFixed,因此讓我們來檢查」導出規範「中定義的列寬並使用相同的寬度輸出列標題。相反,它只是將列名作爲逗號分隔的列表。

與Access中的其他所有內容一樣,當其默認行爲不令人滿意時,您可以編寫VBA代碼以您的方式執行此操作。

Const VB_FORREADING = 1 
Const VB_FORWRITING = 2 
Const cstrFile As String = "C:\Users\Documents\TestOutput.txt" 
Const cstrHeaderRow As String = "col1 col2 etc..." 
Dim oFSO As Object 
Dim oFile As Object 
Dim strContents As String 

' do TransferText without the field names ' 
' (HasFieldNames default = False) ' 
DoCmd.TransferText acExportFixed, "Export Specification", _ 
    "Test Query", cstrFile 

Set oFSO = CreateObject("Scripting.FileSystemObject") 
' read file content into strContents string variable ' 
Set oFile = oFSO.OpenTextFile(cstrFile, VB_FORREADING) 
strContents = oFile.ReadAll 
oFile.Close 
' re-write file using cstrHeaderRow plus strContents ' 
Set oFile = oFSO.OpenTextFile(cstrFile, VB_FORWRITING) 
oFile.write cstrHeaderRow & vbCrLf & strContents 
oFile.Close 

Set oFile = Nothing 
Set oFSO = Nothing 
+0

而不是創建使用DoCmd.TransferText一個文本文件,然後使用FileSystemObject的編輯它,我可能不得不直接編寫查詢輸出到一個文本文件中。這可能嗎? – user793468 2012-02-27 16:51:14

+0

當然。 FileSystemObject的文件對象包括writeline方法,您可能更喜歡write方法。它當然可以完成,但我的直覺反應是它可能需要比我建議的更多的代碼。去吧! – HansUp 2012-02-27 16:54:27

+0

我需要遵循哪些步驟?我需要打開一個記錄集,然後循環輸出並寫入每一行嗎? – user793468 2012-02-27 16:58:15