Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 将Access查询结果导出到csv_Vba_Ms Access - Fatal编程技术网

Vba 将Access查询结果导出到csv

Vba 将Access查询结果导出到csv,vba,ms-access,Vba,Ms Access,我有一个access数据库,它可以处理来自Magento电子商务商店的数据,重新格式化数据,并(希望如此!)输出一个CSV文件,然后将该文件导入ebay Turbolister,以便批量上传到ebay 我已经创建了一个查询,该查询将数据正确地排列为Turbolister所需的格式 我的问题是多种多样的(包括一些似乎与Access处理大字段内容有关的问题),但问题的关键是,我正努力使用一个简单的脚本,将查询结果导出为格式正确的CSV(包括在文本值内需要双引号时加倍,即如果值本身包含需要保留的引号)

我有一个access数据库,它可以处理来自Magento电子商务商店的数据,重新格式化数据,并(希望如此!)输出一个CSV文件,然后将该文件导入ebay Turbolister,以便批量上传到ebay

我已经创建了一个查询,该查询将数据正确地排列为Turbolister所需的格式

我的问题是多种多样的(包括一些似乎与Access处理大字段内容有关的问题),但问题的关键是,我正努力使用一个简单的脚本,将查询结果导出为格式正确的CSV(包括在文本值内需要双引号时加倍,即如果值本身包含需要保留的引号)

DoCmd.TransferText解决方案抛出了一个与字段大小相关的错误(“字段太小,无法接受您尝试添加的数据量”),因此这是不好的

有没有人可以推荐一个在VBA中运行良好的CSV导出例程


Cheers

这是我有时使用的一个旧函数,它允许您指定delimeter,它还检查它输出的数据,如果不能计算为日期或数字等,则使用双引号:

Public Function ExportTextDelimited(strQueryName As String, strDelimiter As String)

Dim rs          As Recordset
Dim strHead     As String
Dim strData     As String
Dim inti        As Integer
Dim intFile     As Integer
Dim fso         As New FileSystemObject

On Error GoTo Handle_Err

    fso.CreateTextFile ("C:\Untitled.csv")

    Set rs = Currentdb.OpenRecordset(strQueryName)

    rs.MoveFirst

    intFile = FreeFile
    strHead = ""

    'Add the Headers
    For inti = 0 To rs.Fields.Count - 1
        If strHead = "" Then
            strHead = rs.Fields(inti).Name
        Else
            strHead = strHead & strDelimiter & rs.Fields(inti).Name
        End If
    Next

    Open "C:\Untitled.csv" For Output As #intFile

    Print #intFile, strHead

    strHead = ""

    'Add the Data
    While Not rs.EOF

        For inti = 0 To rs.Fields.Count - 1
            If strData = "" Then
                strData = IIf(IsNumeric(rs.Fields(inti).value), rs.Fields(inti).value, IIf(IsDate(rs.Fields(inti).value), rs.Fields(inti).value, """" & rs.Fields(inti).value & """"))
            Else
                strData = strData & strDelimiter & IIf(IsNumeric(rs.Fields(inti).value), rs.Fields(inti).value, IIf(IsDate(rs.Fields(inti).value), rs.Fields(inti).value, """" & rs.Fields(inti).value & """"))
            End If
        Next

        Print #intFile, strData

        strData = ""

        rs.MoveNext
    Wend

        Close #intFile

rs.Close
Set rs = Nothing

'Open the file for viewing
Application.FollowHyperlink "C:\Untitled.csv"   

Exit Function

Handle_Err:
MsgBox Err & " - " & Err.Description

End Function

它可能需要一些调整,因为我已经去掉了一些仅与我的特定情况相关的位,但这可能是一个起点。

您看过schema.ini()的使用吗?不要忘记,您可以使用replace-with查询--
replace(myfield,“,”)
--您可以将其用于查询中要导出的任何文本导出字段。谢谢。即使这样,也很难处理已存在逗号和引号的文本字段,但我会看看是否可以对其进行一些调整。这会让您知道我的进展情况。@cheshirepine抱歉,我错过了这一点,您的数据不应该包含delimet呃,您计划使用csv,因为这会使事情复杂化,一般来说,为什么csv不是最好的格式:(是的,我意识到了这一点,但是当你的数据包含用引号括起来的带有类标记的HTML,并且CSV是你唯一可以导入Turbolister的选项时,你的选项有点有限!:我正在一个接一个地解决这些问题。@cheshirepine,我猜更复杂的是,你没有其他的数据选项可供选择您的电子商务商店?我已经在考虑XML导出,但这对导入Turbolister没有什么帮助,Turbolister只接受预定结构中的CSV。XML导出更整洁,但我在传输到TL时仍然会遇到相同的问题…:(