2015-09-04 3 views
2

Мне нужно импортировать текстовый файл в таблицу Access, но используя условия импорта в TXT-файле.Код VBA - импорт текстового файла в таблицу доступа - с условием

Ниже приведен код VBA. Он работает только тогда, когда вы не используете предложение WHERE, потому что запрашиваете ввод параметра. Я думаю, что проблема заключается в отсутствующей спецификации формата поля.

Какие корректировки вы рекомендуете? Мы ценим любые предложения.

TEXT FILE - Teste.txt

1;24;433;43;5 
2;436;424;43;24 
3;5454;656;656;555 
4;545;545;0;0 
5;65465;756;0;0 

Мой код VBA Access:

Sub MyTableImport() 

    Dim sqlStr As String 

    sqlStr = "SELECT * INTO NewTable " 
    sqlStr = sqlStr & " FROM [Text;HDR=Yes;FMT=Delimited;Database=C:\Temp].Teste.txt " 
    sqlStr = sqlStr & " WHERE field4 <> '0' AND field5 <> '0';" 

    DoCmd.SetWarnings False 
    DoCmd.RunSQL sqlStr 
    DoCmd.SetWarnings True 

End Sub 
+0

Вы можете просто опустить предложение WHERE и выполнить поле DELETE * FROM NewTable WHERE4 = '0' ИЛИ ​​field5 = '0'' после импорта. – Andre

+0

Пожалуйста, не используйте setwarnings, это небезопасно и системно. Вместо этого используйте Execute напротив экземпляра базы данных. – Fionnuala

+0

Возможно, вам понадобится файл schema.ini, если у вас есть нестандартные разделители http://stackoverflow.com/questions/12137085/changing-connection-string-in-excel-messes-up-column-data-types/ 12145949 # 12145949 – Fionnuala

ответ

2

Я использовал Schema.ini подход, as Fionnuala suggested, подобное тому, что было в одном из более ранние версии вашего вопроса.

С вашей Teste.txt исходного файла, а Schema.ini и запроса ниже, это результат для Новая_таблица. Все пять полей текста Тип данных:

enter image description here

Это C: \ Temp \ Schema.ini:

[Teste.txt] 
ColNameHeader=False 
Format=Delimited(;) 
Col1="field1" Text 
Col2="field2" Text 
Col3="field3" Text 
Col4="field4" Text 
Col5="field5" Text 

И это запрос, который создается Новая_таблица:

SELECT t.field1, t.field2, t.field3, t.field4, t.field5 
INTO NewTable 
FROM [Text;HDR=No;FMT=Delimited;Database=C:\Temp].[Teste.txt] AS t 
WHERE (((t.field4)<>'0') AND ((t.field5)<>'0')); 
+0

Perfect @HansUp/@Fionnuala/@ Andre451. Я поставил еще один маленький фрагмент кода, чтобы получить текстовый файл из собственного проекта. Последовательность: 'code' Dim strFolder As String strFolder = CurrentProject.Path sqlStr = sqlStr &" FROM [Текст; HDR = Нет; FMT = Разграниченный; База данных = "& strFolder &"] .Teste.txt AS t " –

+0

@HansUp Я применил ваш подход в одном из своих проектов, но получаю несогласованные результаты. Хотя я не использовал текстовый файл в качестве источника, а файл Excel «xlsb», я не думаю, что это должно быть проблемой (вот где я могу ошибаться). Оцените, можете ли вы это проверить [https://stackoverflow.com/questions/45211483/execute-method-does-not-consistently-execute-all-command-text), я просто хочу понять, почему это дает непоследовательные результаты и услышать ваши мысли об этом. – L42

Смежные вопросы