Чтение онлайн

на главную - закладки

Жанры

Советы по Delphi. Версия 1.0.6

Озеров Валентин

Шрифт:

 end;

 ftMemo: begin

SFor[Ord(SFor[0]) + 1]:= #0;

PChForMemo:= GrabMemoFieldAsPChar(TMemoField(TheField));

StrUpper(PChForMemo);

if not (StrPos( PChForMemo, @SFor[1] ) = nil) then Result:= True;

FreeMem(PChForMemo, StrLen(PChForMemo + 1));

 end;

 end;

end;

function FindIt(TheTable: TDataSet; TheFields: array of integer; SearchBackward: Boolean; FromBeginning: Boolean; SFor: String): boolean;

var

 i, HighTheFields, LowTheFields: integer;

 BM: TBookmark;

begin

 TheTable.DisableControls;

 BM:= TheTable.GetBookmark;

 try

LowTheFields:= Low(TheFields);

HighTheFields:= High(TheFields);

SFor:= UpperCase(SFor);

Result:= False;

if FromBeginning then TheTable.First;

if SearchBackwardthen begin

TheTable.Prior;

while not TheTable.BOF do begin

for i:= LowTheFields to HighTheFields do begin

if DoFindIn(TheTable.Fields[TheFields[i]], SFor) then begin

Result := True;

Break;

end;

end;

if Result then Break else TheTable.Prior;

end;

end else begin

TheTable.Next;

while not TheTable.EOF do begin

for i:= LowTheFields to HighTheFields do begin

if DoFindIn(TheTable.Fields[TheFields[i]], SFor) then begin

Result:= True;

Break;

end;

end;

if Result then Break else TheTable.Next;

end;

end;

 finally

TheTable.EnableControls;

if not Result then TheTable.GotoBookmark(BM);

TheTable.FreeBookmark(BM);

 end;

end;

end.

Калькуляция

Хитрость OnCalcFields

Событие OncalcFields

генерится ОЧЕНЬ часто и может быть необязательным и занимать большое количество времени, например, у вас есть таблица с неким вычисляемым полем, и при каждом редактировании таблицы вызывается следующий код:

MyCalcField.AsInteger:= Table1Field1.AsInteger + 10;

Теперь, если Вы решили пройти последовательно каждую запись огромной таблицы, вы можете представить, какое количество таких событий будет сгенерировано! Они будут необязательны в случае, если вы сделаете обработку полей в отдельной процедуре.

Мой совет следующий: выключите генерацию события OnCalcFields, обработайте все поля и снова включите генерацию данного события, к примеру так:

Procedure TForm1.BigProcessingFunction;

begin

 Table1.OnCalcFields:= nil;

 <Включите любые по сложности вычисления в этом месте!>

 Table1.OnCalcFields:= Table1OnCalcFields;

end;

Поля не вычисляются в течение времени обработки, которое может быть достаточно велико, но при наличие громоздких вычислений специфического поля (или даже нескольких полей), все вычисляется за один проход!

Данный метод позволяет исключить необязательный код и может быть использован повсюду, где применяются большие таблицы или сложный алгоритм калькуляции поля. Разница в скорости обработки таблицы довольно ощутима.

dBASE

Таблицы dBASE:

Структура .DBF-файла

Иногда возникает необходимость поработать с таблицей dBASE напрямую, без Borland Database Engine (BDE). К примеру, если .DBT-файл (содержащий MEMO-данные) для данной таблицы безвозвратно потерян, .DBF-файл становится абсолютно непригодным, поскольку байт в заголовке .DBF-файла указывает, что таблица должна содержать соответствующий MEMO-файл. Решение этой проблемы потребует обнуление этого байта, для того чтобы таблица не указывала на сопутствующий MEMO-файл. Или, если Вам захотелось написать собственную программу для работы с данными.

Ниже приводяся структуры .DBF-файлов для таблиц dBASE. Представлены структуры файлов для различных версий dBASE: dBASE III PLUS 1.1, dBASE IV 2.0, dBASE 5.0 под DOS и dBASE 5.0 для Windows.

Структура заголовка файла данных для таблицы dBASE III PLUS.
Заголовок табличного файла
Байт Содержание Описание
0 1-й байт Определение наличия MEMO-файла в таблице dBASE III PLUS (03h без MEMO-файла (.DBT-файл;) 83h с MEMO-файлом).
1-3 3 байта Дата последнего обновления в формате YYMMDD
4-7 32-битное число Количество записей в таблице
8-9 16-битное число Количество байтов, занимаемых заголовком
10-11 16-битное число Количество байтов, занимаемых записью
12-14 3 байта Зарезервированная область
15-27 13 байт Зарезервировано для сетевой версии dBASE III PLUS
28-31 4 байта Зарезервированная область
32-n 32 байта Массив с описаниями полей (структура каждого такого описания показана ниже)
n+1 1 байт Хранится значение 0Dh, выполняющее роль терминатора описаний полей

n – последний байт массива с описаниями полей. Размер массива зависит от количества полей в табличном файле.

Описание поля таблицы
Байт Содержание Описание
0-10 11 байт Имя поля в ASCII (заполнено нулями).
11 1 байт Тип поля в ASCII (C, D, L, M или N)
12-15 4 байта Адрес данных поля (ссылка на память, а не на диск)
16 1 байт Размер поля в бинарном формате
17 1 байт Порядковый номер поля в бинарном формате
18-19 2 байта Зарезервировано для сетевой версии dBASE III PLUS
20 1 байт ID рабочей области
21-22 2 байта Зарезервировано для сетевой версии dBASE III PLUS
23 1 байт Флаг установки поля
24-31 1 байт Зарезервированная область
Поделиться:
Популярные книги

Гарем вне закона 18+

Тесленок Кирилл Геннадьевич
1. Гарем вне закона
Фантастика:
фэнтези
юмористическая фантастика
6.73
рейтинг книги
Гарем вне закона 18+

Законы Рода. Том 6

Flow Ascold
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 6

Санек

Седой Василий
1. Санек
Фантастика:
попаданцы
альтернативная история
4.00
рейтинг книги
Санек

Ярость Богов

Михайлов Дем Алексеевич
3. Мир Вальдиры
Фантастика:
фэнтези
рпг
9.48
рейтинг книги
Ярость Богов

Третье правило дворянина

Герда Александр
3. Истинный дворянин
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Третье правило дворянина

Ученик. Книга третья

Первухин Андрей Евгеньевич
3. Ученик
Фантастика:
фэнтези
7.64
рейтинг книги
Ученик. Книга третья

Кодекс Охотника. Книга XV

Винокуров Юрий
15. Кодекс Охотника
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XV

Большая Гонка

Кораблев Родион
16. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Большая Гонка

Краш-тест для майора

Рам Янка
3. Серьёзные мальчики в форме
Любовные романы:
современные любовные романы
эро литература
6.25
рейтинг книги
Краш-тест для майора

Дикая фиалка Юга

Шах Ольга
Фантастика:
фэнтези
5.00
рейтинг книги
Дикая фиалка Юга

Идеальный мир для Социопата 4

Сапфир Олег
4. Социопат
Фантастика:
боевая фантастика
6.82
рейтинг книги
Идеальный мир для Социопата 4

Вперед в прошлое 6

Ратманов Денис
6. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 6

Специалист

Кораблев Родион
17. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Специалист

Жена по ошибке

Ардова Алиса
Любовные романы:
любовно-фантастические романы
7.71
рейтинг книги
Жена по ошибке