проблемы с импортом файлов csv в mysql из vbs и доступа

Я использую следующий код, основанный на предыдущих сообщениях и ответах Рему и Энтони Джонса.

Dim db: db = "C:\Dokumente und Einstellungen\hom\Anwendungsdaten\BayWotch4\baywotch.db5"
Dim exportDir: exportDir = "C:\Dokumente und Einstellungen\hom\Desktop"
Dim exportFile: exportFile=NewFileName(exportDir)


Dim cn: Set cn = CreateObject("ADODB.Connection")

cn.Open _
    "Provider = Microsoft.Jet.OLEDB.4.0; " & _
    "Data Source =" & db

cn.Execute "SELECT * INTO [text;HDR=No;Database=" & exportDir & _
   ";CharacterSet=65001]." & exportFile & " FROM tblAuction"

'Export file

'Support functions

Function NewFileName(ExportPath)
Dim fs 
Dim NewFileTemp

Set fs = CreateObject("Scripting.FileSystemObject")

NewFileTemp = "CSV" & Year(Date) _
    & Month(Date) & Day(Date) & ".csv"

NewFileName = NewFileTemp
End Function

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

Моя вторая проблема заключается в том, что специальные символы не экранируются.

Я загружаю данные в mysql с помощью:

LOAD DATA LOCAL INFILE 'file' INTO TABLE MYTABLE FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\'

Я также пробовал без предложения ESCAPED BY.

Проблема в том, что одно из полей содержит данные в формате html, что означает кавычки, косые черты и т. д. Это приводит к неправильному импорту данных, при этом поля даты вставляются в поля имен пользователей и т. д. Как я могу избежать этого, чтобы этого не произошло, или правильно импортировать?

Я использую схему.ini следующим образом:

[CSV2009427.csv]
ColNameHeader=No
CharacterSet=65001
Format=Delimited(;)
Col1=article_no Char Width 19

И заголовки столбцов по-прежнему экспортируются. Разве это невозможно сделать без schema.ini? т.е. возможность использовать сценарий переносимым способом, где schema.ini может не всегда существовать?


person Jason Stanthorp    schedule 28.04.2009    source источник
comment
Есть ли причина, по которой вы должны использовать CSV? Если вы уже используете для этого VBScript, почему бы не подключиться к обеим базам данных и просто передать данные? Я не понимаю, почему вы используете VBScript для создания csv, разве в Access уже нет такой возможности?   -  person Tester101    schedule 28.04.2009


Ответы (1)


Проблема, с которой я сталкиваюсь, заключается в том, что когда я экспортирую файл, файл csv содержит заголовки, несмотря на то, что для HDR установлено значение «Нет».

Я думаю, вам нужно включить ColNameHeader=False в файл Schema.ini.

Пример:

C:\schema.ini

[blah.csv]
ColNameHeader=False
CharacterSet=1252
Format=CSVDelimited
Col1=pence_amount Integer

SQL-код:

SELECT * INTO [text;Database=C:\].blah#csv FROM Coins;

Обратите внимание, что файл schema.ini сохраняется в том же каталоге, который указан Database в строке подключения в SQL.

Результат: нет заголовков.

person onedaywhen    schedule 28.04.2009
comment
Здесь нет schema.ini, только vbscript и база данных. - person Jason Stanthorp; 28.04.2009
comment
На самом деле создается файл schema.ini и устанавливается значение ColNameHeader=True. - person Jason Stanthorp; 28.04.2009
comment
Ну, попробуйте установить его в false :) - person onedaywhen; 28.04.2009
comment
У меня работает (проверенный пример добавлен к моему ответу). - person onedaywhen; 28.04.2009
comment
Пожалуйста, проверьте мой пересмотренный вопрос - person Jason Stanthorp; 28.04.2009
comment
Убедитесь, что вы а) действительно сохранили файл schema.ini, б) сохранили его в той же папке, что и база данных в SQL, в) фактически назвали его schema.ini (ваше редактирование говорит, что схема.ini), г) для меня прямо сейчас Год (Дата) и Месяц (Дата) и День (Дата) и .csv возвращает 2009428.csv (похоже, у вас есть CSV2009427.csv, т.е. вчерашняя дата). - person onedaywhen; 28.04.2009