Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: DBF->Text->MySql  (Прочитано 20944 раз)
0 Пользователей и 1 Гость смотрят эту тему.
h.m.f.
Участник

ru
Offline Offline
Пол: Мужской

« : 26-04-2006 04:50 » 

Есть файл *.dbf (один столбец в нем дробное число) его нужно подгрузить в MySql.
Конвертирую dbf в txt (select * from ... и результат запроса записываю как строку в файл).
При подгрузке в MySql текстового файла (load data infile) получаю исключение: Data Truncated from столбец в котором находится дробное число.
В таблице MySql тип данных неподгружаемого столба double, в dbf не знаю какой тип, т.к. запрос describe table вызывает исключение.
Записан
RomCom
Опытный

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 26-04-2006 05:12 » 

Возможно разделитель  дробной части не нравится.
А не проще на самом сервере средствами php открыть *.dbf и переписать в MySql?
Записан

R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
Mouse
Молодой специалист

ru
Offline Offline

« Ответ #2 : 26-04-2006 06:34 » 

h.m.f., в сети можно найти готовые конвертеры DBF -> mySQL, поищи. Если что, вечерком могу поискать у себя, вроде должны быть исходники на PHP
Записан
h.m.f.
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 26-04-2006 06:47 » new

Когда я формирую текстовый файл, специально заменяю запятую на точку, чтобы не было проблем в MySql. Мне кажется, что проблема в количестве знаков после запятой или разрядности типов...
Подгрузка в MySql текстового файла - часть кода программы (которая написана на C# поэтому промежуточный пункт с использованием пхп  и различных вспомогательных программ отпадает (к тому же скачанная программка dbf2mysql работает для моей таблички 1.5часа!!! против моих нескольких минут(если не подгружать этот фигов столбец с дробными числами) )
Записан
RomCom
Опытный

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 26-04-2006 06:50 » 

приведи пример пары строк файла txt и желательно кусок кода C# вставляющий данные
а то так долго гадать можно.
« Последнее редактирование: 26-04-2006 06:53 от RomCom » Записан

R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 26-04-2006 06:58 » 

В MySQL очень простая интерпретация аргументов: если аргумент не может быть распознан как целое число, как строка и т.д., то он считается _действительным_числом_ и если его формат не напоминает соотв. число, то результат == 0. Так было сказано в документации еще по 3.23 - стоит проверить для своей версии.

h.m.f., приведи текст ошибки и строку, на которой сбойнуло.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
h.m.f.
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 26-04-2006 07:49 » 

Пара строк (данные разделены табами):
5741А13В1.6-40/ФЛ   Комплект ответных фланцев с крепежом к насосу А1 3В1.6/40   5741   1   38.86
5741А13В1.6/40   Насос А1 3В1.6/40-3/25Б, 7.5 кВт, без КИП, "Ливгидромаш"   5741   1   3550
В принципе любая строка файла вызывает данное исключение даже если в последнем столбце стоит 0.

Код который вставляет:
string CatTextFile=@"c:\\odbcTablesFormat.txt";
MyCmd.CommandText="load data infile '" + CatTextFile + "' into table rs.cat";      
MyCmd.ExecuteNonQuery();
Версия MySql 5

« Последнее редактирование: 19-12-2007 19:28 от Алексей1153++ » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 26-04-2006 08:03 » 

h.m.f., полный текст ошибки приведи.
В результате ни одна строка не вставлена?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
h.m.f.
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 26-04-2006 08:42 » 

An unhandled exception of type 'MySql.Data.MySqlClient.MySqlException' occurred in mysql.data.dll

Additional information: #01000Data truncated for column 'price' at row 1
« Последнее редактирование: 19-12-2007 19:31 от Алексей1153++ » Записан
h.m.f.
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 26-04-2006 13:19 » 

Если в таблице MySql поменять тип последнего столбца с double на varchar, то текстовый файл подгружается без проблем.
Хотя хочется понять с чем всетаки связан этот глюк...
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 26-04-2006 20:46 » 

h.m.f., а как на счет содержимого (после смены на varchar)? Приведи те же строчки, что соответствуют исходным, приведенным выше. Просто, сдается мне, затык в распозновании границ полей в исходном файле.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
h.m.f.
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 27-04-2006 04:13 » 

Строки из таблицы MySQl:

5741А13В1.6-40/ФЛ Комплект ответных фланцев с крепежом к насосу А1 3В1.6/40 5741 1 38.86
5741А13В1.6/40 Насос А1 3В1.6/40-3/25Б, 7.5 кВт, без КИП, "Ливгидромаш" 5741 1 3550

Пока их сюда копировал, заметил что в последнем столбце после самих данных стоит еще и пробел (в остальных столбах такого не наблюдается), а в текстовом файле пробелов нет...
Записан
RomCom
Опытный

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 27-04-2006 04:56 » 

Протестировал приведенные строка через phpMyAdmin (MySQL 3.23.53), все нормально отрабатывает.
Попробуй в файле оставить одну страку и запустить вставку.
а в текстовом файле пробелов нет...
Проверь в редакторе показывающем не печатные символы. Возможно всетаки где то закрался ненужный пробел.
Или приаттач кусок самого файла нам на проверку на наших машинах
Записан

R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
h.m.f.
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 27-04-2006 05:26 » 

Таблица МуSQL:
CREATE TABLE `cat` ( `ware` varchar(30) NOT NULL, `warename` varchar(250) default NULL, `head` varchar(30) default NULL, `base` int(11) default NULL, `price` double default NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1
Код c# уже описал, текстовый файл во вложении...

* odbcTablesFormat.txt (0.54 Кб - загружено 1122 раз.)
Записан
RomCom
Опытный

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 27-04-2006 06:18 » 

через phpMyAdmin:
Код:
load data infile 'd:\\odbcTablesFormat.txt' into table cat;
Вставляется без проблем
« Последнее редактирование: 19-12-2007 19:32 от Алексей1153++ » Записан

R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
h.m.f.
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 27-04-2006 08:56 » 

RomCom, а какая у тебя версия MySql?
У меня этот запрос написанный в чистом mySql 5 (без С#) с этим файлом все равно выдает data truncated...
Записан
RomCom
Опытный

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 28-04-2006 00:36 » 

Запрос я выполнял на локальном компе где установлен Денвер -phpMyAdmin 2.5.6, MySQL 3.23.53-max
Записан

R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
h.m.f.
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 09-06-2006 07:37 » 

Наконец-то нашел решение этой проблемы!!!

Нашел на каком-то сайте: если у вас MySql 5 версии из значения переменной sql-mode файла my.ini нужно убрать STRICT_TRANS_TABLES.

Может кто-нибудь пояснить, что за значение такое и на что оно влияет.
Я его удалил и все заработало, но кто знает, может в будущем возникнет другой глюк из-за ее отсутствия

Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines