Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Импорт CSV в MySQL Delphi7 
:(
    Опции темы
Randomazer
Дата 9.12.2012, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 20.6.2010

Репутация: нет
Всего: нет



Использую Delphi 7, ADO, ODBC, MySQL

Хочу таблицу из CSV файла импортировать в MySQL средствами Delphi

Делаю следующее

Код

var
FileName,ab,bb,cb,db,eb:String;
begin
if opendialog1.Execute then begin
filename:=opendialog1.FileName;
with adoquery1 do begin
sql.Text:='LOAD DATA INFILE :fn'+chr(13)+chr(10)+
'INTO TABLE `base`.`users`'+chr(13)+chr(10)+
'FIELDS TERMINATED BY :ab ENCLOSED BY :bb ESCAPED BY :cb'+chr(13)+chr(10)+
'LINES STARTING BY :db TERMINATED BY :eb';
ab:=';';
bb:='"';
cb:='';
db:='';
eb:='\r\n';
parameters.ParamByName('fn').Value:=utf8toansi('example.csv');
parameters.ParamByName('ab').Value:=utf8toansi(ab);
parameters.ParamByName('bb').Value:=utf8toansi(bb);
parameters.ParamByName('cb').Value:=utf8toansi(cb);
parameters.ParamByName('db').Value:=utf8toansi(db);
parameters.ParamByName('eb').Value:=utf8toansi(eb);
execsql();


Выдается следующая ошибка

user posted image

Помогите пожалуйста

PM MAIL   Вверх
Akella
Дата 9.12.2012, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



И что... тебе помочь перевести текст ошибки?
PM MAIL   Вверх
Randomazer
Дата 9.12.2012, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 20.6.2010

Репутация: нет
Всего: нет



Я не могу понять в чем ошибка, если делаю  SQL  запрос, то все нормально. Если через программу то выводится ошибка
PM MAIL   Вверх
Данкинг
Дата 9.12.2012, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



А зачем там "chr(13)+chr(10)" нужно?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Randomazer
Дата 9.12.2012, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 20.6.2010

Репутация: нет
Всего: нет



 Можно и без "chr(13)+chr(10)", я сделал это для определения в какой строке ошибка
PM MAIL   Вверх
Данкинг
Дата 9.12.2012, 19:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



ИМХО тут с кавычками какой-то косяк.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Vas
Дата 9.12.2012, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



А так что получается?
Код

var
FileName,ab,bb,cb,db,eb:String;
begin
if opendialog1.Execute then begin
filename:=opendialog1.FileName;
with adoquery1 do begin
sql.Text:='LOAD DATA INFILE :fn INTO TABLE `base`.`users` FIELDS TERMINATED BY :ab ENCLOSED BY :bb ESCAPED BY :cb LINES STARTING BY :db TERMINATED BY :eb';
ab:=';';
bb:='"';
cb:='';
db:='';
eb:='\r\n';
parameters.ParamByName('fn').Value:=utf8toansi('example.csv');
parameters.ParamByName('ab').Value:=utf8toansi(ab);
parameters.ParamByName('bb').Value:=utf8toansi(bb);
parameters.ParamByName('cb').Value:=utf8toansi(cb);
parameters.ParamByName('db').Value:=utf8toansi(db);
parameters.ParamByName('eb').Value:=utf8toansi(eb);
execsql();


Добавлено через 6 минут и 50 секунд
Что-то картинку вставить не могу, но смотри в ошибке внимательно на '_cp1251'example.csv' апостроф внутри строки, его экранировать надо, иначе ошибочка будет.


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Randomazer
Дата 9.12.2012, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 20.6.2010

Репутация: нет
Всего: нет



Тоже самое smile 
PM MAIL   Вверх
Randomazer
Дата 9.12.2012, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 20.6.2010

Репутация: нет
Всего: нет



Код

var
FileName,ab,bb,cb,db,eb:String;
begin
if opendialog1.Execute then begin
filename:=opendialog1.FileName;
showmessage(filename);
with adoquery1 do begin
sql.Clear;
sql.Add('LOAD DATA INFILE ,:fn');
sql.Add('INTO TABLE `base`.`users`');
sql.Add('FIELDS TERMINATED BY :ab ENCLOSED BY :bb ESCAPED BY :cb');
sql.Add('LINES STARTING BY :db TERMINATED BY :eb');
ab:=';';
bb:='"';
cb:='';
db:='';
eb:='\r\n';
parameters.ParamByName('fn').Value:=filename;
parameters.ParamByName('ab').Value:=utf8toansi(ab);
parameters.ParamByName('bb').Value:=utf8toansi(bb);
parameters.ParamByName('cb').Value:=utf8toansi(cb);
parameters.ParamByName('db').Value:=utf8toansi(db);
parameters.ParamByName('eb').Value:=utf8toansi(eb);
execsql();
end;
end;



Переделал еще так: таже самая ерезь
PM MAIL   Вверх
kami
Дата 9.12.2012, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 72



Нескромный вопрос - а на кой тут utf8toansi ???
Не пытались посмотреть, что в итоге получается в каждом параметре?
Если таблица в UTF-8, то Delphi тут ни при чем - преобразование UTF8 - ansi должно настраиваться в ODBC-коннекторе.

Это сообщение отредактировал(а) kami - 9.12.2012, 21:46
PM MAIL WWW   Вверх
Randomazer
Дата 9.12.2012, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 20.6.2010

Репутация: нет
Всего: нет



Цитата(kami @  9.12.2012,  21:44 Найти цитируемый пост)
Нескромный вопрос - а на кой тут utf8toansi ???
Не пытались посмотреть, что в итоге получается в каждом параметре?
Если таблица в UTF-8, то Delphi тут ни при чем - преобразование UTF8 - ansi должно настраиваться в ODBC-коннекторе.


Вы правы, это  мои эксперименты с кодировками, для того чтобы в строках отображались нормально кириллица. Но если я это уберу ошибка не пропадает
PM MAIL   Вверх
kami
Дата 9.12.2012, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 72



Судя про скриншоту, у Вас каждый параметр сопровождается "префиксом" из 
Цитата

_cp1251'

Посмотрите, где он появляется - то ли уже в коде, непосредственно при заполнении параметров, то ли нужно поменять настройки коннектора, потому что он ерундит по незнанию.
PM MAIL WWW   Вверх
Randomazer
Дата 9.12.2012, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 20.6.2010

Репутация: нет
Всего: нет



Поменял, коннектор: теперь ерундит _latin1. Хотя запрос на показ всех полей проходит без ошибок

Добавлено через 2 минуты и 25 секунд
Use Connection String

Код

Driver};UID=root;SERVER=localhost;DATABASE=base;PORT=3306;"

PM MAIL   Вверх
kami
Дата 9.12.2012, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 72



Цитата(Randomazer @  9.12.2012,  22:04 Найти цитируемый пост)
Use Connection String

Интересная строка подключения, у меня выглядит абсолютно по другому, при наличии того же ODBC драйвера 5.1. Можно посмотреть полностью?
Если быть более точным, то у меня так:
Цитата
Provider=MSDASQL.1;Persist Security Info=False;Data Source=mySQLLogistic

где mySQLLogistic - имя пользовательского DSN.
Построено стандартным методом 
Код

ConnString:=ADODB.PromptDataSource(0, OldConnectionString);


Это сообщение отредактировал(а) kami - 9.12.2012, 22:28
PM MAIL WWW   Вверх
Randomazer
Дата 9.12.2012, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 20.6.2010

Репутация: нет
Всего: нет



Код

Provider=MSDASQL.1;Persist Security Info=False;User ID=root;Extended Properties="DRIVER={MySQL ODBC 5.1 Driver};UID=root;SERVER=localhost;DATABASE=base;PORT=3306;"


Это сообщение отредактировал(а) Randomazer - 9.12.2012, 22:36
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0598 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.