Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

конвертация баз FoxPro в dBASE IV


Страницы:   1 2

SCORPION ZP ©   (2003-07-30 19:20:00) 

Кто нибудь подскажет есть ли способ переконвертировать базы
FoxPro в dBASE(включая memo-и индексные-файлы)? Баз несколько тыс., поэтому способ импорта в Excel, а затем сохранить как
dBASE, не подходит. Желательно чтобы это могло работать в цикле.


Dred2k   (2003-08-01 17:06:00) [21]

> SCORPION ZP © (01.08.03 16:37)

Ну, коли так, то почему не парадокс? Он в BDE тоже хорошо поддержан, кроме того, есть положительные различия с dbaseIV...


Anatoly Podgoretsky   (2003-08-01 17:05:00) [22]

В первом случае копия не создается, а преобразовывается структура, если необходимо.
Во втором создается просто другая таблица должного формата и данные пересылаются в нее. Это работает даже для абсолютно разных форматах (в рамках совместимости типов,а не только в таких родственных).
Второй вариант дает более лучшие результаты, также возможно и автоматическое преобразования данных, достаточно написать один раз программу преобразования, но иногда надо ручками затачивать.


Dred2k   (2003-08-01 16:57:00) [23]

> Anatoly Podgoretsky © (01.08.03 15:51)

Чем, на твой взгляд, отличается конвертация от копирования?
Использованием dbiDoRestructure и манипуляциями с TblDesc, IdxDesc и т.п. вместо TTable? Происходить при этом будет фактически то же самое, только через более низкий уровень вызовов. То, что это решение будет принципиально лучше - сомневаюсь. На уровне TTable обеспечена достаточная поддержка всех необходимых фич, опять же средствами BDE. Да и потом - чем проще, тем надежнее (критерии простоты, конечно, разные бывают).
Вот насчет сохранения индексов (заметь - в вопросе он об этом говорит), типов данных - проблемы, наверное, могут быть. Во всем копаться надо и проверять, по-любому.


SCORPION ZP   (2003-08-01 16:37:00) [24]

Поэтому и стремлюсь к dBASE(из-за его полной поддержки в Delphi)
Думаю, что проблема рештся через Microsoft.Jet.OLEDB.4.0,ADOConnection и ADOCommand.


Anatoly Podgoretsky   (2003-08-01 15:51:00) [25]

Dred2k © (31.07.03 21:44)
Проблемы с кодировкой не будет, он все таки указал, надеюсь, что он это указал про Table Language, а не про конкретные буковки в табличках. Индексы особая вещь, тут можно получить по самые помидоры. Но с другой стороны в новых таблицах не обязательно точно такие же индексы, а отключить индексы от исходной таблицы не проблема.
Но то решение, о котором ты говоришь, это копирование данных, до нехого каждый пацак догадается. А вот конвертация средствами БДЕ это проблематично, средствами FoxPro в одном направлении, просто от отключает индексы и мемо поля и создает их копию и им не к чему было делать это в пользу конкурентов (в тот момент dBase IV они и так отставали).

KSergey © (01.08.03 10:19)
с поддержкой DBase-файлов со стороны BDE просто нет проблем, он заточен, а вот поддержкой FoxPro одназно есть.


KSergey   (2003-08-01 10:19:00) [26]

А могет взять сторонний компонент для доступа к DBF будет проще?
Например, Halcyon работают с фоксовскими индексами и мемо-полями вполне успешно...
Тем более, что есть подозрение, что и с поддержкой DBase-файлов со стороны BDE (о нем речь?) могут возникнуть трудности...


SCORPION ZP   (2003-08-01 09:53:00) [27]

Dred2k
Спасибо за советы. Буду ломать эту проблему и если ничего не
выйдет или что будет не так обращусь к вам за помощью.


Dred2k   (2003-07-31 21:44:00) [28]

Ну что ж, задача у тебя довольно сложная.
Могу посоветовать динамическое создание таблиц.

1. Для каждой исходной таблицы всех твоиз баз (в цикле):
1-1. Создаешь экземпляр TTable (TableType := ttDBase).
1-2. Открываешь исходную, делаешь ей FieldDefs.Update, IndexDefs.Update.
1-3. Для созданного экземпляра делаешь FieldDefs.Assign(исходная.FieldDefs), IndexDefs.Assign(исходная.IndexDefs).
1-4. Для экземляра выставляешь полный путь (DatabaseName), TableName (имя файла, расширение не нужно, можно присвоить от исходной, если все обрабатываемые файлы, читай - таблицы, имеют разные имена или каталоги) и TableLevel (0 - берется из настроек BDE для DBase, для DBaseIV не знаю, т.к. юзаю Paradox).
1-5. Создаешь экземпляр как физ. таблицу по CreateTable.
1-6. Заливаешь данные из исходной в экземпляр любым способом (на уровне TTable, о файле не заботься - он на месте).
1-7. Если есть еще исходные, возврат на 1-1.
2. Проверяешь органолептическими средствами все таблицы всех экземпряров (должны совпасть с исходными). ;))

При всем при этом могут возникнуть многие проблемы, как то: кодировки ( > Anatoly Podgoretsky © (30.07.03 21:25)
тебя об этом уже предупреждал, битые исходные таблицы, и т.д. и т.п. - особенности движка DBase-Foxpro в BDE мне не ведомы, почему - сказал выше ;) )

Делай все аккуратно и не скупись на тесты. Больше тестов - ближе победа! Успехов.


SCORPION ZP   (2003-07-31 20:20:00) [29]

Ребятя очень нужно! Кому не лень дать хоть ссылку по сабжу!


SCORPION ZP   (2003-07-31 09:53:00) [30]

Anatoly Podgoretsky
1.Одна.Скажем так по 3000 dbf,cdx и fpt. FoxPro под DOS(866).
Но кодировка пока на втором плане - главное перевести на dBASE, Delphi нет полной поддержки фокса.
2.
> Могут возникнуть проблемы...


> ...могут не позволить преобразование...

Как это сделать или с пом. чего? А я проверю "могут" или нет.


Anatoly Podgoretsky   (2003-07-30 21:25:00) [31]

А сколько в каждой базе таблиц?
Могут возникнуть проблемы если кодировка 1251 (dBase) не поддерживает, кроме того индексы могут не позволить преобразование.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо