|
Вопрос # 1 935/ вопрос открыт / |
|
Здравствуйте!
Подскажите как на дельфи сконвертировать данные из DBF в MySQL. Причем данные желательно брать из нескольких DBF и сохранять в одну базу MySQL
 |
Вопрос задал: BIOForce (статус: Посетитель)
Вопрос отправлен: 25 сентября 2008, 12:59
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, BIOForce!
Ну так в чём проблема?
Для процесса нам понадобляться компоненты для работы с обоими типами БД. Для DBF наверно лучше использовать Tdbf. Для MySQL - даже не знаю, можно что то поискать, но я бы делал по другому.
вначале анализируем полученный DBF файл и формируем SQL запрос на создание таблицы. Он обычно выглядит так
CREATE TABLE имятаблицы(
тип поле,
тип поле
...
);
потом проходимся циклом по записям и формируем INSERT запросы. Они обычно выглядят где то так
INSERT INTO имятаблицы VALUES('значполе1','значполе2'...'значполеN');
Всё полученное добро сохраняем в один файл (для большей надёжности - с расширением sql).
а дальше просто запускаем програму mysql (вроде так называется) и в качестве параметра передаём наш скрипт и имя базы данных (ещё возможно имя/пароль).
Почему такой обходной путь, а не напрямую вставлять в базу с помощью компонентов?
- сам mysql быстрее распарсит и обработает свои данные.
- можно данные импортировать в виде cvs файла - в некоторых случаях получается гораздо быстрее.
- путём корректировки некоторых ключевых слов, которые будут выводиться в файл, можно получить готовый скрипт для других БД, например mssql.
- некоторые инструменты по обработке данных хорошо принимают такие файлы.
- текстовые документы легче редактировать и хранить.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 25 сентября 2008, 13:28
|
Мини-форум вопроса
Всего сообщений: 13; последнее сообщение — 26 сентября 2008, 11:28; участников в обсуждении: 3.
|
BIOForce (статус: Посетитель), 25 сентября 2008, 13:53 [#1]:
Немного уточню задачу: надо выбрать несколько dbf в каждом из них пользователь сам выбирает загружаемые поля которые нужно сохранить в схожую таблицу но уже в mysql.
Сохранить в саму базу mysql я смогу сам используя sql запросы, а вот с открытием большого числа dbf (от 2 до 10) тут сложности
|
|
Вадим К (статус: Академик), 25 сентября 2008, 13:59 [#2]:
А в чём сложности? я не вижу никаких сложностей.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
BIOForce (статус: Посетитель), 25 сентября 2008, 14:17 [#3]:
сложность в выборе доступа к дбф простой вариант это использовать DataSource1 и Table1. Есть ли др вариант? может проще\универсальнее?
|
|
Вадим К (статус: Академик), 25 сентября 2008, 14:23 [#4]:
ещё раз читаем мой ответ. я писал о компоненте TDbf. Если надо "невероятная скорость" - только ручной парсинг файла. Тем более, что он не такой сложный.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
BIOForce (статус: Посетитель), 25 сентября 2008, 15:54 [#5]:
TDbf не поддходит. 
Любопытно узнать про "Если надо "невероятная скорость" - только ручной парсинг файла" - это как?
|
|
Вадим К (статус: Академик), 25 сентября 2008, 16:04 [#6]:
А чем не подходит? - отличный компонент, может просто не можете сделать то, что хотите, потому что это либо не так делается, либо просто нельзя делать.
Ручной парсинг - это открываем файл как бинарный, разбираем структуру и вытягиваем значение полей напряму, минуя все обёртки.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
BIOForce (статус: Посетитель), 25 сентября 2008, 16:22 [#7]:
при открытии файла даже 4 метра программа грузит проц на половину минимум и файл подкачки вырос с 400мб до 960 и прога вылетела.... но главное очень долго! у меня файлы должны обрабатываться от 100 мб и более... и по времени как можно быстрее
а если где пример как работать с файлом на прямую?
как бинарный, разбираем структуру и вытягиваем значение полей напряму, минуя все обёртки.
попробую этот вариант.
И еще может есть др компонетнт?
|
|
Вадим К (статус: Академик), 25 сентября 2008, 16:26 [#8]:
Странно, что так нагрузило процессор. Не должно. на 4 мегабайта не парсил, но мегабайтные обрабатывал - просто на ура бегало.
Может что то "хитрое в коде"?
100мб dbf - это что такое? где такие делают? очень странно.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
BIOForce (статус: Посетитель), 25 сентября 2008, 16:46 [#9]:
100мб эт данные для проги которые надо впихнуть в базу что бы программа могла с ними работать. Какие будут еще предложения? как обработать pdf? C помощью DataSource и Table думаю сделаю по времени не знаю как быстро будет но работать точно должно. но этот вариант мне что то не очень нравится.
|
|
Вадим К (статус: Академик), 25 сентября 2008, 16:54 [#10]:
pdf??? Какой pdf?
DataSource и Table - будет точно медленее, чем TBdf. Плюс этот вариант ужасен тем, что надо будет юзать BDE.
Вы только хныкаете, хотите, что бы я дал решение, с кодом, который обрабатывает так как Вам надо за доли секунды (как долго!) и денег обязательно в придачу. Побольше.
Покажите код, которым Вы с помощью TDBF обрабатываете таблицу. Там вообще то кода - кот наплакал. Я не представляю себе, что там может тормозить.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Мережников Андрей (статус: Абитуриент), 25 сентября 2008, 22:30 [#11]:
а для чего TDataSource ? Вы что - процесс обработки данных показываете пользователю в DBGrid? Тогда понятно, откуда тормоза.
|
|
BIOForce (статус: Посетитель), 26 сентября 2008, 08:32 [#12]:
как раз Table +TDataSource +DBGrid выводит все быстро! а тот же файл использовав компонент Tdbf как писал выше никчему хорошему не приводит, согласен может не правильно использую.
выводить пользователю и не нужно, просто для проверки пробовал.
|
|
Вадим К (статус: Академик), 26 сентября 2008, 11:28 [#13]:
Выводит то он (Table +TDataSource +DBGrid) быстро именно по той причине, что не выводит всё. Он выводит только несколько первых записей, необходимых для отрисовки. А вот если по них пробежать, то может и умереть .
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|