Сохраните запрос как текстовую вкладку с разделителями, но включите «.ail2» в сохраненное имя. (ДОСТУП) - PullRequest
0 голосов
/ 30 октября 2018

Я хочу экспортировать запрос в виде текстового файла из базы данных доступа, но с использованием vba. Вопрос в том, что мне нужно сохранить его с именем .ail2 в названии.

В основном я хочу это в форме: "currentdate_version.ail2" .txt (цитаты очень важны, иначе это не будет работать).

Так, например, сегодняшняя первая версия будет выглядеть так:

"20182910_1.ail2" .txt

Я попытался экспортировать его вручную и сохранить как этот, но мастеру экспорта, похоже, не нравятся кавычки в сохраненном имени. Поэтому я экспортировал его (используя пользовательский сохраненный экспорт, который я назвал test1 - он включает заголовки каждого столбца, устанавливает квалификатор текста как «none», разделитель полей как «tab» и формат файла «delimited») ).

Я использую следующий код в доступе, первая часть просто удостоверяется, что папка с текущей датой существует.

Private Sub ExportExcel()


    Dim myQueryName As String
    Dim myExportFileName As String
    Dim strSheets As String
    Dim sFolderPath As String
    Dim filename As Variant
    Dim i As Integer

    strSheets = Format(Date, "yyyymmdd")

    sFolderPath = "M:\AIL2Files\" & strSheets & ""

    Dim fdObj As Object

    Set fdObj = CreateObject("Scripting.FileSystemObject")
    If fdObj.FolderExists("" & sFolderPath & "") Then
    Else
        fdObj.CreateFolder ("" & sFolderPath & "")
    End If
    i = 1
    filename = Dir(sFolderPath & "\*" & i & ".txt")

    Do While Len(filename) > 0
    filename = Dir(sFolderPath & "\*" & i & ".txt")
    i = i + 1
    Loop


    myQueryName = "001_querytest"
    myExportFileName = "" & sFolderPath & "\" & Chr(34) & "" & strSheets & "_" & i & ".ail2" & Chr(34) & ".txt"
    DoCmd.TransferText acExportDelim, "test1", myQueryName, myExportFileName, True




End Sub

test1 не берется, даже если это «сохраненный экспорт». Я предполагаю, что я делаю эту часть неправильно ... но даже при этом я считаю, что сохранение не будет успешным и не будет включать кавычки.

Спасибо.

EDIT:

Вместо этого я попытался сделать следующее:

DoCmd.TransferText transferType:=acExportDelim, TableName:=myQueryName, filename:=myExportFileName, hasfieldnames:=True

Теперь сохраняет, но опять-таки не включая кавычки по желанию. Что интересно, когда я набираю ?myExportFileName в ближайшем окне, он отображает желаемое имя файла, но команда явно не работает правильно, так как я получаю его в виде:

_20181029_1#ail2_

Вместо того, чтобы ...

Вот изображение, если я использую сохранить как: Savetext

Я получаю: Result

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Обходной путь для этого - сначала сохранить файл в формате .txt, используя DoCmd.TransferText, но запустить оболочку и переименовать. Вроде таких:

myExportFileName = sFolderPath & "\" & strSheets & "_" & i & ".txt"



DoCmd.TransferText TransferType:=acExportDelim, SpecificationName:="034_AILFILE Export Specification", TableName:=myQueryName, filename:=myExportFileName, HasFieldnames:=True

Set wshShell = CreateObject("Wscript.Shell")
strDocuments = wshShell.SpecialFolders("M:\AIL2Files\" & strSheets & "")
oldFileName = myExportFileName
newFileName = sFolderPath & "\" & strSheets & "_" & i & ".ail2"

Name oldFileName As newFileName

Несомненно, есть более чистые способы сделать это, но я полагаю, что этот метод можно использовать для сохранения любых файлов, которые имеют нетрадиционные расширения, но в основном следуют формату файла .txt.

0 голосов
/ 30 октября 2018

Здесь есть некоторые заблуждения.

Имена файлов Windows не могут содержать двойные кавычки ", точка. И они вам тоже не нужны. Просто сохраните ваш файл как filename.ail2.

Это то, что вы получаете, когда делаете «Сохранить как». Скажите Explorer, чтобы он показывал расширения , и вы увидите, что у вас нет "filename.ail2".txt, а filename.ail2.

Вам нужно всего лишь

myExportFileName = sFolderPath & "\" & strSheets & "_" & i & ".ail2"

test1 не принимается, даже если это «сохраненный экспорт».

DoCmd.TransferText не использует сохраненный экспорт, но экспортирует спецификации. Смотрите здесь для разницы:
Могу ли я программно получить все спецификации импорта / экспорта в MS Access 2010?

Добавление

DoCmd.TransferText может выдать ошибку времени выполнения, если ему присвоено недопустимое имя файла, но, по-видимому, он пытается сохранить день путем обмена недопустимыми символами на _, следовательно, _20181029_1#ail2_ (.txt)

...