Автор: admin | 14.12.2007 в 2:14 | Рубрики: BDE, Базы данных

Автор: Mark Edington

Если вы хотите узнать, как работает программа, а деморолика и описания нет. Просто посадите за клавиатуру кошку - вы узнаете все документированные и недокументированные возможности.

Существует обратный вызов (callback) BDE, который вы можете использовать для получения уведомлений об изменении таблиц Paradox. Тем не менее от вас все же потребуется использование таймера. Функция обратного вызова инициируется при вызове функций, осуществляющих доступ к таблице. Ниже приведен код, демонстрирующий технику работы с описанным выше обратным вызовом:
Читать полностью…

Автор: admin | в 2:14 | Рубрики: BDE, Базы данных

Автор: Eryk Bottomley

Возможно ли установить параметр MAXFILEHANDLES в IDAPI.CFG посредством Delphi?

Да. Следующий компонент показывает как это можно сделать (а также изменить другие параметры):

Читать полностью…

Автор: admin | в 2:14 | Рубрики: BDE, Базы данных

Автор: Rob Edgar

…из исходного кода VCL я обнаружил, что при назначении значения DB-полю, имеющему строковый тип, значение “проходит” через функцию ANSItoNative, что может привести к изменению (порче) ASCII-данных. Вот так…

Как 16-, так и 32-битные версии IDAPI.CFG устанавливаются с драйвером языка Paradox ‘ascii’.

Я создал простое приложение, записывающее в db-поле значения ASCII в диапазоне 0-255 и затем проверяющее их на предмет появившихся различий….. различия между 16- и 32-битной версией не так велики… для примера… в первых 130 значениях получается следующее преобразование:

16-бит: 21->182 22->167 31->33 130->128
32-бит: 130->128
Очевидно достаточно просто “исправить” 32-битные приложения, чтобы добиться такого же результата, что и получаемые 16-битными приложениями, НО я не уверен что решив проблему на моем PC, я решу ее у остальных пользователей, поскольку могут отличаться установки, драйверы языка… и пр.
После того как я проверил все возможные варианты, я составил таблицу и занес туда пять возможных значений, которые могут отличаться под Delphi2 и Delphi1:

Значение ASCII Delphi1 Delphi2
21 182 21
22 167 22
33 31 33
132 102 132
255 121 255

Автор: admin | в 2:14 | Рубрики: BDE, Базы данных

Данный пример удаляет таблицу, достаточно только указать каталог и имя таблицы, остальное сделает BDE, удалит таблицу, все индексы и связанные файлы.

uses
DB, DBTables, DbiProcs, DbiErrs, DbiTypes;

procedure DeleteTable(Dir, TblName: String);
var
DBHandle: HDBIDB;
ResultCode: DBIResult;
tbl, Err: Array[0..255] of Char;
SrcTbl: TTable;
begin
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 <> DBIERR_NONE then
begin
DbiGetErrorString(ResultCode,Err);
raise EDatabaseError.Create(’While deleting ‘ +
Dir + ‘\’ + TblName + ‘, the database ‘ +
‘engine generated the error ”’ + StrPas(Err) + ””);
end;
finally
SrcTbl.Free;
end;
end;

Error 109: Error 108.

Информация, описывающая условия возникновения ошибки BDE, может быть получена приложением с помощью исключения EDBEngineError. Перехват и обработка в приложениях исключений EDBEngineError осуществляется с помощью конструкции try..except. При наступлении исключения EDBEngineError должен быть создан объект EDBEngineError, различные поля в котором могут быть использованы программистом для определения источника ошибки и принятия решения по исправлению ситуации. Для данного типа исключения может генерироваться более чем одно сообщение об ошибке. Для получения нужной информации необходимо “проиграть” все сообщения.
Читать полностью…