Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 935

/ вопрос открыт /

Здравствуйте!
Подскажите как на дельфи сконвертировать данные из DBF в MySQL. Причем данные желательно брать из нескольких DBF и сохранять в одну базу MySQL

BIOForce Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

BIOForce (статус: Посетитель), 25 сентября 2008, 13:53 [#1]:

Немного уточню задачу: надо выбрать несколько dbf в каждом из них пользователь сам выбирает загружаемые поля которые нужно сохранить в схожую таблицу но уже в mysql.
Сохранить в саму базу mysql я смогу сам используя sql запросы, а вот с открытием большого числа dbf (от 2 до 10) тут сложности
Вадим К

Вадим К (статус: Академик), 25 сентября 2008, 13:59 [#2]:

А в чём сложности? я не вижу никаких сложностей.
Галочка "подтверждения прочтения" - вселенское зло.
BIOForce

BIOForce (статус: Посетитель), 25 сентября 2008, 14:17 [#3]:

сложность в выборе доступа к дбф простой вариант это использовать DataSource1 и Table1. Есть ли др вариант? может проще\универсальнее?
Вадим К

Вадим К (статус: Академик), 25 сентября 2008, 14:23 [#4]:

ещё раз читаем мой ответ. я писал о компоненте TDbf. Если надо "невероятная скорость" - только ручной парсинг файла. Тем более, что он не такой сложный.
Галочка "подтверждения прочтения" - вселенское зло.
BIOForce

BIOForce (статус: Посетитель), 25 сентября 2008, 15:54 [#5]:

TDbf не поддходит. :(
Любопытно узнать про "Если надо "невероятная скорость" - только ручной парсинг файла" - это как?
Вадим К

Вадим К (статус: Академик), 25 сентября 2008, 16:04 [#6]:

А чем не подходит? - отличный компонент, может просто не можете сделать то, что хотите, потому что это либо не так делается, либо просто нельзя делать.
Ручной парсинг - это открываем файл как бинарный, разбираем структуру и вытягиваем значение полей напряму, минуя все обёртки.
Галочка "подтверждения прочтения" - вселенское зло.
BIOForce

BIOForce (статус: Посетитель), 25 сентября 2008, 16:22 [#7]:

при открытии файла даже 4 метра программа грузит проц на половину минимум и файл подкачки вырос с 400мб до 960 и прога вылетела.... но главное очень долго! у меня файлы должны обрабатываться от 100 мб и более... и по времени как можно быстрее
а если где пример как работать с файлом на прямую?
как бинарный, разбираем структуру и вытягиваем значение полей напряму, минуя все обёртки.
попробую этот вариант.
И еще может есть др компонетнт?
Вадим К

Вадим К (статус: Академик), 25 сентября 2008, 16:26 [#8]:

Странно, что так нагрузило процессор. Не должно. на 4 мегабайта не парсил, но мегабайтные обрабатывал - просто на ура бегало.
Может что то "хитрое в коде"?
100мб dbf - это что такое? где такие делают? очень странно.
Галочка "подтверждения прочтения" - вселенское зло.
BIOForce

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

BIOForce (статус: Посетитель), 26 сентября 2008, 08:32 [#12]:

как раз Table +TDataSource +DBGrid выводит все быстро! а тот же файл использовав компонент Tdbf как писал выше никчему хорошему не приводит, согласен может не правильно использую.
выводить пользователю и не нужно, просто для проверки пробовал.
Вадим К

Вадим К (статус: Академик), 26 сентября 2008, 11:28 [#13]:

Выводит то он (Table +TDataSource +DBGrid) быстро именно по той причине, что не выводит всё. Он выводит только несколько первых записей, необходимых для отрисовки. А вот если по них пробежать, то может и умереть:).
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:29
Выполнено за 0.02 сек.