2015-05-12 27 views
-1

我试图将Access 2010中的交叉表查询导出到没有文本限定符的csv。我可以使用Transfer Text方法与我的其他出口;与此相关的技巧是字段(及其名称)的数量根据用户在表单上选择的内容而改变,但SpecificationName中的设置是静态的。如果我没有指定SpecificationName,我可以根据需要获取查询中运行的任何字段,但是我会在我的文本字段中引用引号,这些字段不是我想要的。如果我设置了一个将文本限定符设置为None的规范,那么我会被一组字段列表卡住。设置规范时,我试图在FieldName区域粘上一个星号,但得到了从Access导出动态字段到csv(schema.ini?)

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

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

扯远了,看起来我可能需要建立一个schema.ini?当然,这也需要动态的。我发现,是为获取97写的资源:https://support2.microsoft.com/default.aspx?scid=kb;en-us;155512,但它似乎甚至不更新db As Databasedb As DAO.Database后在Access 2010中工作,我得到

预期的变量或过程,而不模块

运行时在即时窗口下面(有适当的文字埋入式中):

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

我已经达到了我的(有限)VBA印章的限制摸不着头脑。为动态schema.ini编写脚本看起来像是想要摆脱引号的矫枉过正,但如果这是必须发生的事情,那么正确方向的任何指针都会非常出色。

谢谢!

+0

该错误建议您将该模块命名为* CreateSchemaFile *,与过程名称相同。在这种情况下,将模块重命名为其他内容...例如* modCreateSchemaFile * ...并且该特定错误应该消失。不幸的是,之后我无法帮到你。 – HansUp

+0

@HansUp - 试过并得到了“错误#:3265在这个集合中找不到的项目。”点击OK后,立即窗口中出现“False”。我在指定的目录中看不到任何新文件。 – bcarothers

回答

1

啊,好的,我想通了。我以为我必须指定Schema.ini中的列,但我错了。我只需要将标题设置为true;这样它会读取查询中发生的任何事情。将文本分隔符设置为无也是关键部分。

这里就是我需要的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)。有一个用于文本分隔符将是最简洁的解决方案,但从我可以告诉,这不存在。不过,我很乐意纠正这个问题。