![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
конвертация баз FoxPro в dBASE IV
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) не поддерживает, кроме того индексы могут не позволить преобразование.