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

Export dynamic fields from Access to csv (schema.ini?)

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

The number of fields in your export specification does not match the number in the table you have chosen to export.

我真的很喜欢里面的某种 "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 之后,我得到

Expected variable or procedure, not module

当 运行在立即 window 中添加以下内容时(插入适当的文本):

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

我已经达到了我的(有限的)VBA 能力的极限来解决这个问题。为动态 schema.ini 编写脚本对于只想去掉引号似乎有点矫枉过正,但如果这是必须发生的事情,任何指向正确方向的指示都会很好。

谢谢!

啊,好的,我想通了。我以为我必须在 Schema.ini 中指定列,但我错了。我只需要将 header 设置为 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) 和列 headers (HDR=Yes)。拥有一个用于文本定界符的解决方案将是最简约的解决方案,但据我所知,这并不存在。不过,如果确实如此,我很高兴得到纠正!