将动态字段从Access导出到csv(schema.ini?)

时间:2015-05-12 20:18:53

标签: vba ms-access-2010 export-to-csv

我正在尝试将Access 2010中的交叉表查询导出到没有文本限定符的csv。我可以将Transfer Text方法与其他导出一起使用;这个的诀窍是字段数(及其名称)根据用户在表单上选择的内容而改变,但是SpecificationName中的设置是静态的。如果我没有指明一个SpecificationName,我可以根据需要获得在查询中运行的任何字段,但是我在文本字段周围得到引号,这是我不想要的。如果我设置一个规范来将文本限定符设置为None,那么我就会遇到一组字段。我在设置规范时尝试在FieldName区域粘贴一个星号,但得到了

  

导出规范中的字段数与您选择导出的表中的数字不匹配。

我真的很喜欢那种“SELECT *”,但它看起来不太可能吗?

四处寻找,看起来我可能需要设置一个schema.ini?当然,这也需要是动态的。我找到了一个为Access 97编写的资源:https://support2.microsoft.com/default.aspx?scid=kb;en-us;155512,但它似乎在Access 2010中不起作用。即使将db As Database更新为db As DAO.Database,我也会得到

  

预期变量或程序,而不是模块

在立即窗口中运行以下内容时(包含相应的文本):

?CreateSchemaFile(True,"C:\MyFilepath","ExportFileName.txt","qryCrosstabs")

我已经达到我的(有限的)VBA印章的限制来解决这个问题。为动态schema.ini编写脚本似乎只是想要删除引号,但是如果必须发生这种情况,那么正确方向的任何指针都会非常出色。

谢谢!

1 个答案:

答案 0 :(得分:1)

啊,好吧,我明白了。我以为我必须在Schema.ini中指定列,但我错了。我只需要将标题设置为true;通过这种方式,它可以读取在查询中最终发生的任何事情。将文本分隔符设置为none也是一个关键部分。

这是我在Schema.ini中需要的所有内容(只需要与导出的文件位于同一目录中):

[ExportFileName.txt]
Format=CSVDelimited
ColNameHeader=True
TextDelimiter="none"

代码:

Private Sub cmdExport_Click()
    Dim dbs As DAO.Database
    Set dbs = CurrentDb
    dbs.Execute "SELECT * INTO [text;database=C:\filepath].[ExportFileName.txt] FROM qryCrosstabs"

虽然这最终有效但是拥有一个外部Schema.ini文件比我喜欢的还要笨拙。我已经看到了一些向dbs.Execute行添加扩展属性的地方将指示csv(FMT = Delimited)和列标题(HDR = Yes)。有一个文本分隔符将是最简约的解决方案,但从我可以告诉,它不存在。如果确实如此,我很高兴能够得到纠正!