Обзор Введение Лицензионное соглашение Рассылка Цены Ссылки Разработчик Delphi Русскоязычные Англоязычные Сайты, посвященные Delphi Англоязычные Пиратские сайты Русскоязычные Другие Домашние страницы Русскоязычные Алгоритмы Преобразования HEX#8594;Integer Преобразование десятичного числа в шестнадцатиричное Преобразование ASCII в шестнадцатиричное представление Преобразование двоичного числа в десятичное Преобразование ICO в BMP Unix-строки (чтение и запись Unix-файлов) Преобразование BMP в JPEG в Delphi 3 Декомпиляция звукового файла формата Wave и получение звуковых данных Даты Вычисление даты Пасхи Дни недели Формат даты Функция DateSer Разное Ханойская башня Алгоритм (уравнение) для определения восхода/захода солнца и луны (BASIC) Автоматический формат даты в компоненте Edit Win API Переменные среды Получение переменных DOS Изменение системного времени из Delphi Завершение работы Windows События, происходящие в приложениях Delphi при завершении работы Windows Завершение работы Windows Режим энергосбережения (Power saver) Управление монитором Разное Как не допустить запуск второй копии программы? Каким образом, программным путем, можно узнать о завершении запущенной программы? Получение имени модуля Извлечение из EXE-файла иконки и рисование ее в TImage. Паскаль Массивы Динамические массивы Массив в Delphi Базы данных Создание Создание db-файла во время работы приложения Доступ Очень медленный доступ к таблице при первом обращении Поиск Поиск величины при вводе Быстрый поиск в базах данных Калькуляция Хитрость OnCalcFields dBASE Таблицы dBASE: Структура .DBF-файла Разное Сканирование версии структуры базы данных Перемещение таблиц Прокрутка таблицы: хитрость PeekMessage() BDE Псевдонимы Задание псевдонима программным путем Информация о псевдонимах BDE Мультимедиа Аудио-компакт Получение идентификатора диска Аппаратное обеспечение CD-ROM Открытие и закрытие привода CD-ROM Операционная система Буфер обмена Просмотр буфера обмена Копирование в буфер обмена Форма как графический объект Компоненты BitBtn Смена иконки BitBtn во время работы приложения DBGrid Использование опции MultiSelect в DBGRID Edit Массив Edit-компонентов Label 3D-рамка для текстовых компонентов ScrollBox Синхронизация двух компонентов Scrollbox Splitter Конструирование Splitter StatusBar Обработчик события OwnerDraw в компоненте StatusBar StringGrid Установка атрибутов –=Только для чтения=– у столбцов компонента StringGrid Помещение изображения в ячейку StringGrid Сохранение и чтение Tstringgrid TabbedNotebook Добавление элементов управления в TTabbedNotebook и TNotebook Недоступная закладка в компоненте Tabbednotebook Table Создание компонента TTable без формы TreeView Ускорение работы TreeView Разное Создание компонента во время работы приложения Получение индекса компонента в списке родителя Массив компонентов… Дублирование компонентов и их потомков во время выполнения приложения События Создание Создание события во время выполнения приложения Задержка выполнения Задержка выполнения OnChange (Delphi 2) Миграция Delphi3 Получение констант с определением ошибки функцией LoadStr Ошибки Delphi2 Ошибка в руководстве "Getting Started" на странице 42
Сканирование версии структуры базы данных Спасибо за идеи, высказанные в группах новостей и присланные по электронной почте. Я думаю, что нашел лучшее решение.
Очевидно, BDE содержит номер версии структуры, по крайней мере для файлов Paradox. (Я не могу поручиться за dBase и другие форматы.) Всякий раз при изменении структуры (например, в Database Desktop) BDE увеличивает номер версии. Следующий модуль содержит функцию, которая возвращает версию структуры базы данных:
(*****************************************************************************
* DbUtils.pas
*
* Утилита для работы с базами данных
*
* Создана 09/20/96
*****************************************************************************)
unit Dbutils;
(****************************************************************************)
(****************************************************************************)
interface
(****************************************************************************)
(****************************************************************************)
uses DbTables;
function DbGetVersion(table: TTable): LongInt;
(****************************************************************************)
(****************************************************************************)
implementation
(****************************************************************************)
(****************************************************************************)
uses Db, DbiProcs, DbiTypes, {DbiErrs,} SysUtils;
{---------------------------------------------------------------------------}
(*
* Цель: определение номера версии структуры таблицы
* Параметры: table (I) – интересующая нас таблица
* Возвращаемая величина: номер версии
* Исключительная ситуация: EDatabaseError
*)
function DbGetVersion(table: TTable): LongInt;
var
hCursor : hDBICur;
tableDesc: TBLFullDesc;
cName : array[0..255] of char;
begin
{ копируем имя таблицы в строку 'с' }
StrPCopy(cName, table.TableName);
{ просим BDE создать запись, содержащую информацию об определенной таблице }
Check(DbiOpenTableList(table.DBHandle, True, False, cName, hCursor));
{ получаем запись, содержащую информацию о структуре }
Check(DbiGetNextRecord(hCursor, dbiNOLOCK, @tableDesc, nil));
{ возвращаем поле записи, содержащее номер версии структуры нашей таблицы }
Result:= tableDesc.tblExt.iRestrVersion;
Check(DbiCloseCursor(hCursor));
end;
end.