Валентин Озеров - Советы по Delphi. Версия 1.0.6

Здесь есть возможность читать онлайн «Валентин Озеров - Советы по Delphi. Версия 1.0.6» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Советы по Delphi. Версия 1.0.6: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Советы по Delphi. Версия 1.0.6»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Советы по Delphi. Версия 1.0.6 — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Советы по Delphi. Версия 1.0.6», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

function DoFindIn(TheField: TField; SFor: String): Boolean;

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

{применение функции FindIt – if FindIt(NotesSearchT, [NotesSearchT.FieldByName('Leadman').Index], False, True, SearchText.Text) then DoSomething; }

implementation

function GrabMemoFieldAsPChar(TheField: TMemoField): PChar;

begin

with TBlobStream.Create(TheField, bmRead) do begin

GetMem(Result, Size + 1);

FillChar(Result^, Size + 1, #0);

Read(Result^, Size);

Free;

end;

end;

function DoFindIn(TheField : TField; SFor : String): Boolean;

var

PChForMemo: PChar;

begin

Result:= False;

case TheField.DataType of

ftString: begin

if (Pos(SFor, UpperCase(TheField.AsString))> 0) then Result := True;

end;

ftInteger: begin

if (Pos(SFor, TheField.AsString)> 0) then Result:= True;

end;

ftBoolean: begin

if SFor = UpperCase(TheField.AsString) then Result:= True;

end;

ftFloat: begin

if (Pos(SFor, TheField.AsString) > 0) then Result := True;

end;

ftCurrency: begin

if (Pos(SFor, TheField.AsString) > 0) then Result := True;

end;

ftDate..ftDateTime: begin

if (Pos(SFor, TheField.AsString) > 0) then Result := True;

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.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Советы по Delphi. Версия 1.0.6»

Представляем Вашему вниманию похожие книги на «Советы по Delphi. Версия 1.0.6» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Советы по Delphi. Версия 1.0.6»

Обсуждение, отзывы о книге «Советы по Delphi. Версия 1.0.6» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x