#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)