Обзор Введение Лицензионное соглашение Рассылка Цены Ссылки Разработчик 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
Перемещение таблиц Здесь я привожу примеры программ, которые я использую для копирования и удаления таблиц. Необходимые для работы модули: DB, DBTables, DbiProcs,DbiErrs, и DbiTypes. Вам всего лишь необходимо указать каталог расположения, исходное имя таблицы, каталог назначения и имя таблицы, куда будет скопирована исходная таблица и BDE скопирует таблицу целиком со всеми индексами. Процедура удаления в качестве входных параметров использует каталог расположения и имя таблицы, при этом BDE удаляет как саму таблицу, так и все файлы, связанные с ней (индексы и т.п.). Для тестирования данные процедуры были помещены в новое приложение и мне пришлось их немного отредактировать, чтобы удалить некоторые зависимости, которые были связаны с главной формой приложения. Теперь процедуры являются полностью автономными и могут быть помещены в отдельный модуль. (Не забудьте включить его в список используемых модулей). Пользуйтесь на здоровье!
procedure TConvertForm.CopyTable(FromDir, SrcTblName, ToDir, DestTblName: String);
var
DBHandle: HDBIDB;
ResultCode: DBIResult;
Src, Dest, Err: Array[0..255] of char;
SrcTbl, DestTbl: TTable;
begin
SrcTbl:= TTable.Create(Application);
DestTbl:= TTable.Create(Application);
try
SrcTbl.DatabaseName:= FromDir;
SrcTbl.TableName:= SrcTblName;
SrcTbl.Open;
DBHandle:= SrcTbl.DBHandle;
SrcTbl.Close;
ResultCode:= DbiCopyTable(DBHandle,false,
StrPCopy(Src,FromDir + '\' + SrcTblName), nil, StrPCopy(Dest,ToDir + '\' + DestTblName));
if (ResultCode lt;gt; DBIERR_NONE) then begin
DbiGetErrorString(ResultCode,Err);
raise EDatabaseError.Create('При копировании ' + FromDir + '\' + SrcTblName + ' в ' + ToDir + '\' + DestTblName + ' ,' + 'BDE сгенерировал ошибку ''' + StrPas(Err) + '''');
end;
finally
SrcTbl.Free;
DestTbl.Free;
end;
end;
procedure TConvertForm.DeleteTable(Dir, TblName: String);
var
DBHandle: HDBIDB;
ResultCode: DBIResult;
tbl, Err: Array[0..255] of char;
SrcTbl, DestTbl: TTable;
SrcTbl:= TTable.Create(Application);
try
SrcTbl.DatabaseName:= Dir;
SrcTbl.TableName:= TblName;
SrcTbl.Open;
DBHandle:= SrcTbl.DBHandle;
SrcTbl.Close;
ResultCode:= DbiDeleteTable(DBHandle, StrPCopy(Tbl,Dir + '\' + TblName), nil);
if (ResultCode lt;gt; DBIERR_NONE) then begin
DbiGetErrorString(ResultCode,Err);
raise EDatabaseError.Create('Удаляя ' + Dir + '\' + TblName + ', BDE ' + 'сгенерировал ошибку ''' + StrPas(Err) + '''');
end;
finally
SrcTbl.Free;
end;
end;