Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2018, 13:51   #1
V_a_d
Пользователь
 
Регистрация: 12.02.2011
Сообщений: 15
По умолчанию Конвертер из ISAM в Firebird

Здравствуйте!
Пишу конвертер из БД ISAM в Firebird
Упрощенная часть кода чтения данных из dat файла:

Код:
            AssignFile(FileDat, DE1.Text + '\Eng.dat');
            Reset(FileDat);

            for i := 0 to x do Read(FileDat, b);

            while not EOF(FileDat) do
             begin
               Read(FileDat, b);

               Read(FileDat, b); ValInt := b;
               Read(FileDat, b); ValInt := ValInt + b * aa;
               Read(FileDat, b); ValInt := ValInt + b * bb;
               Read(FileDat, b); ValInt := ValInt + b * cc;
               ID := ValInt;

               if not EOF(FileDat) then Read(FileDat, b);
             end;

            CloseFile(FileDat);
Все читается на ура. Все работает почти так как надо.

Проблема в том, что считываются ранее удаленные записи в ISAM.

Дат файлы и структуру в них, смотрю утилитой DBISAM Viewer. В ней есть чекбокс, показывать все нормальные, все удаленные и все записи с ошибками.

Как можно отловить удаленные записи и не переносить в новую базу?

Последний раз редактировалось V_a_d; 07.07.2018 в 14:17.
V_a_d вне форума Ответить с цитированием
Старый 08.07.2018, 19:52   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Там же признак удаленной записи по идее где-то должен быть. Как в dbf. Или взять провайдер для этой СУБД, который различает удалена или нет запись. Кстати что за СУБД? FoxPro, Paradox, dBase, DB2 или еще что?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.07.2018, 13:50   #3
V_a_d
Пользователь
 
Регистрация: 12.02.2011
Сообщений: 15
По умолчанию

Точно не скажу, но вроде как DBISAM (dat файл + idx файл). Открываю файлы для просмотра утилитой DBISAM viewer v2.52

Искал компонент DBISAM 3, так и не нашел. Версией выше ругается вроде на несовместимость (точно уже не помню)
V_a_d вне форума Ответить с цитированием
Старый 09.07.2018, 15:06   #4
V_a_d
Пользователь
 
Регистрация: 12.02.2011
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Там же признак удаленной записи по идее где-то должен быть. Как в dbf.
Вроде признак считывается при запросe SQL командой Select, а я читаю файл по байтно, т.к. нет возможности подключиться как к БД
V_a_d вне форума Ответить с цитированием
Старый 09.07.2018, 16:46   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Этот признак где-то в записи и находится. Разберись с устройством записи, в hex-редакторе посмотри и вычисли где он )

Цитата:
т.к. нет возможности подключиться как к БД
Почему? Есть же DBISAM ODBC Driver, скачай, попробуй соединиться и запросом данные выдернуть. Особенностей его не подскажу, не пользовался. Если получится, то это лучше чем по байтно данные разбирать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 09.07.2018 в 19:51.
Аватар вне форума Ответить с цитированием
Старый 12.07.2018, 19:02   #6
V_a_d
Пользователь
 
Регистрация: 12.02.2011
Сообщений: 15
По умолчанию

Я бы не заморачивался побайтно разбирать базу, если бы нашел DBISAM ODBC Driver или подходящий компонент. Как то находил компонент DBISAM версии 4, но он не совместим. Нужен версии 3. Третью версию компонента не нашел. Я правда сижу на Delphi 7.
V_a_d вне форума Ответить с цитированием
Старый 13.07.2018, 22:06   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Создайте новую базу с 2 идентичными записями, одну из них удалите, сравните итоги. Будет Вам счастье при побайтном разборею
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка delphi 7 could not find installable isam Kursant_vv БД в Delphi 2 05.03.2015 15:09
Не запускается проект и сама программа на других ПК "Не удалось найти устанавливаемый ISAM " Ookami08 Общие вопросы Delphi 0 17.05.2012 19:35
Конвертер Макспч21 Помощь студентам 0 05.05.2012 12:19
Конвертер VanHelsing Софт 0 22.07.2010 11:46