2012-02-26 146 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