VBA TransferText SpecificationName

#vba #ms-access #specifications

#vba #ms-access #технические характеристики

Вопрос:

Ниже приводится мой DoCmd.TransferText выглядит следующим образом

 oCmd.TransferText TransferType:=acExportDelim, _
            SpecificationName:="Schema.ini", _
            TableName:="BASIC_DATA_Query", _
            FileName:="BASIC_DATA_Query_Result.txt", _
            HasFieldNames:=False
  

Когда я указываю «schema.ini» в качестве имени моей спецификации, я получаю сообщение об ошибке

«Ошибка времени выполнения ‘3625’: спецификация текстового файла ‘Schema.ini’ не существует. Вы не можете импортировать, экспортировать или связать с помощью спецификации.»

Даже после ссылки на эту статью: http://support.microsoft.com/kb/241477

Я не смог решить проблему. Мой ‘Schema.ini’ находится в той же папке, что и база данных.

BASIC_DATA_Query — это запрос, содержащий все мои результаты, и мне нужно, чтобы они были экспортированы в файл BASIC_DATA_Query_Result.txt с заголовком и полями, разделенными табуляциями.

Каково возможное решение?

Ответ №1:

Похоже, что с VBA возникла проблема, известная с 2004 года:(.

В любом случае, я написал код для экспорта, и это решило мою проблему. Размещаю код здесь для кого-либо еще

 Sub ExportTextFileDelimited(FileName As String, _
    DataSet As String, _
    Delimiter As String, _
    TextQualifier As String, _
    WithFieldNames As Boolean)
    On Error GoTo ExportTextFile_Err

    Dim cnn As ADODB.Connection
    Dim rst As New ADODB.Recordset

    Dim Directory As String
    Dim MyString As String, strSQL As String
    Dim strDS As String
    Dim I As Integer

    Open FileName For Output As #1
    Set cnn = CurrentProject.Connection

    rst.Open DataSet, cnn, adOpenForwardOnly, adLockReadOnly
    If WithFieldNames Then
        For I = 0 To rst.Fields.Count - 1
            MyString = MyString amp; TextQualifier amp; rst(I).Name amp; TextQualifier amp; Delimiter
        Next I
        MyString = Left(MyString, Len(MyString) - 1)
        Print #1, MyString
    End If
    rst.MoveFirst
    Do While Not rst.EOF
        MyString = ""
        For I = 0 To rst.Fields.Count - 1
            'check for text datatype (202)
            If rst(I).Type = 202 Then
                MyString = MyString amp; TextQualifier amp; _
                rst(I) amp; TextQualifier amp; Delimiter
            Else
                MyString = MyString amp; rst(I) amp; Delimiter '<----
            End If
        Next I
            MyString = Left(MyString, Len(MyString) - 2) '<---
        Print #1, MyString amp; TextQualifier
        rst.MoveNext
    Loop

ExportTextFile_Exit:
    ' Close text file.
    Close #1
    rst.Close
    Set cnn = Nothing
    Exit Sub
ExportTextFile_Err:
    MsgBox Err.Description
    Resume ExportTextFile_Exit
End Sub
  

Использование:

Вызовите ExportTextFileDelimited(«C:Query.txt «, «Запрос», vbTab, «»»», True)