Данная процедура полезна для создания временных таблиц :

procedure MakeDataBase;
begin
with TTable.Create(nil) do
begin
DatabaseName := ‘c:\temp’; (* alias *)
TableName := ‘test.dbf’;
TableType := ttDBase;
with FieldDefs do
begin
Add(’F_NAME’, ftString,20,false);
Add(’L_NAME’, ftString,30,false);
end;
CreateTable;
{ create a calculated index }
with IndexDefs do
begin
Clear;
{ don’t forget ixExpression in calculated indexes! }
AddIndex(’name’,'Upper(L_NAME)+Upper(F_NAME)’,[ixExpression]);
end;
end;
end;

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

Ну и запросы у вас - сказала база данных и повисла.

Dbase является причиной бОльшего количества ’special case’ в BDE, чем таблицы SQL и Paradox из-за поддержки “Выражений в Индексах” (Expressions in indexes) и т.д., и т.п..

Создание/пересоздание индекса
DbiRegenIndexes( Table1.Handle ); { Регенерация всех индексов }
create index (зависит от существования выражения)

if (( Pos(’(',cTagExp) + Pos(’+',cTagExp) ) > 0 ) then
Table1.AddIndex( cTagName, cTagExp, [ixExpression]) // <- ixExpression - _литерал_
else
Table1.AddIndex( cTagName, cTagExp, []);

Мастер/Деталь связан с выражением дочернего индекса
вызов BDE процедуры DbiLinkDetailToExp() вместо обычной DbiLinkDetail()
Упаковка таблиц

with Table1 do
StrPCopy( TName, TableName );
Result := DBIPackTable( DbHandle, Handle, TName, szDBASE, TRUE );

Установка видимости удаленных записей, on/off (т.е. dBase SET DELETED ON/OFF)

DbiSetProp( hDBIObj(Table1.Handle), curSOFTDELETEON, LongInt(bValue));

Установка символа частичного/точного соответствия, on/off (т.е. dBase SET EXACT ON/OFF)

DbiSetProp( hDBIObj(Table1.Handle), curINEXACTON, LongInt(bValue));

{Извлекает физический номер записи xBase. Требует наличие модулей
DBITYPES, DBIPROCS, и DBIERRS в списке используемых модулей.
Функция требует на входе один аргумент типа TTable (например, Table1).}

function Form1.Recno(oTable: TTable): Longint;
var
rError: DBIResult;
rRecProp: RECprops;
szErrMsg: DBIMSG;
begin
Result := 0;
try
oTable.UpdateCursorPos;
rError := DbiGetRecord(oTable.Handle, dbiNOLOCK, nil, @rRecProp);
if rError = DBIERR_NONE then
Result := rRecProp.iPhyRecNum
else
case rError of
DBIERR_BOF: Result := 1;
DBIERR_EOF: Result := oTable.RecordCount + 1;
else
begin
DbiGetErrorString(rError, szErrMsg);
ShowMessage(StrPas(szErrMsg));
end;
end;
except
on E: EDBEngineError do
ShowMessage(E.Message);
end;
end;

Имеется несколько способов загрузки изображения в BLOB-поле таблицы dBASE или Paradox. Три самых простых метода включают в себя:

копирование данных из буфера обмена Windows в компонент TDBImage, связанный с BLOB-полем
использование метода LoadFromFile компонента TBLOBField Читать полностью…

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

dBASE и Paradox таблицы имеют в своем арсенале BLOB-поля, позволяющие хранить бинарные данные, в том числе bitmap-формат, отображаемый с помощью компонента TDBImage. В Database Desktop данный тип полей указан как Binary и Graphic (для dBASE и Paradox таблиц, соответственно). Тем не менее, процесс сохранения изображений в InterBase BLOB-полях и их использование в компонентах TDBImage не такой уж простой.

Таблицы InterBase не имеют простого типа BLOB-поля. Есть три варианта, или подтипа: тип 0, тип 1 и подтип, определенный пользователем. Типы 0 и 1 - “встроенные” типы. Тип 0 - BLOB-поля (тип по умолчанию) для хранения общих бинарных данных. Тип 1 - BLOB-поля для хранения текстовых BLOB-данных. Ни один из предопределенных типов не допускает автоматического извлечения данных изображения из BLOB-поля для его последующего отображения в компоненте TDBImage. BLOB-поля типа 0 могут использоваться для хранения данных bitmap-формата, но данные должны извлекаться и передаваться в объект типа TBitmap программным путем. Вот пример ручного извлечения данных изображения, хранящихся в BLOB-поле типа 0 (Table1BLOBField), и его показ в компоненте TImage (не предназначенным для работы с БД) :

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