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

ЖАНРЫ

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

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

Шрифт:

if Table1.Fields[i].IsIndexField then begin

Indx := Table1.IndexDefs.Indexof(Table1.Fields[i].Name);

if Indx > -1 then if ixPrimary in Table1.IndexDefs[Indx].Options then Definition := Definition + ' (Первичный)';

end;

Listbox1.Items.Add(Definition);

 end;

end;

Приведенная

выше версия не работает в 32-битной среде, поскольку в ней присутствуют дополнительные типы полей. Вот версия, которая работает в 32-битной среде:

procedure TForm1.Button1Click(Sender: TObject);

const

 MyFielddefs: array[ftUnknown..ftTypedBinary] of string [11] =('Unknown', 'String', 'Smallint', 'Integer','Word', 'Boolean', 'Float', 'Currency', 'BCD','Date', 'Time', 'DateTime', 'Bytes', 'VarBytes','AutoInc', 'Blob', 'Memo', 'Graphic', 'FmtMemo','ParadoxOle', 'DBaseOle', 'TypedBinary');

var

 i, Indx: integer;

 Definition: string;

begin

 for  i := 0 to Table1.FieldCount - 1 do begin

Definition := Table1.Fields[i].DisplayLabel;

Definition := Definition + ' ' +MyFieldDefs[Table1.Fields[i].DataType];

Table1.IndexDefs.Update;

if Table1.Fields[i].IsIndexField then begin

Indx := Table1.IndexDefs.Indexof(Table1.Fields[i].Name);

if Indx > -1 thenif ixPrimary in Table1.IndexDefs[Indx].Options then Definition := Definition + ' (Первичный)';

end;

Listbox1.Items.Add(Definition);

 end;

end;
 

Создание индексного файла из Delphi

Delphi 1 

Если вы используете таблицы dBASE или Paradox, то для создания нового индекса воспользуйтесь методом AddIndex. Для примера: 

Table1.AddIndex('Articles','Title', []);

создаст индексный файл с именем ARTICLES с использованием поля TITLE в качестве индексного ключа. При создании вы можете воспользоваться различными индексными опциями (например, уникальность, необслуживаемый и пр.) – для получения дополнительной информации обратитесь к электронной справке по Delphi. ПРИМЕЧАНИЕ: Ваша таблица должна быть открыта исключительно для того, чтобы только воспользоваться методом AddIndex.

Поддержка/обновление индексного файла, если только при создании вы не выставили флаг «необслуживаемый», происходит автоматически.

Контекстное меню на основе базы данных

var

 m:TMenuItem;

 navidummy:TComponent;

…………………………………………………

procedure TMyForm.CreatePopUpMM(Sender: TObject);

begin

 Navidummy.free;

 Navidummy:=TComponent.create(self);

 While not NaviT.EOF do

 begin

m := TMenuItem.create(navidummy);

II:=II+1;

with m do begin

name :='MM'+IntToStr(II);

caption := NaviT.Fieldbyname('MyWHAT').AsString;

tag := NaviT.Fieldbyname('MyTAG').AsInteger;

visible:=True;

OnClick:= NaviExec;

end;

MyMenuItem.add(m);

NaviT.Next;

 end;

 NaviT.Close;

end;

procedure TMyForm.NaviExec(Sender:TObject);

begin

 What.text := (Sender as TMenuItem).Caption;

 {
Здесь я получаю то, что хочу ! }

 Key:= (Sender as TMenuItem).Tag;

end;
 

Корректное закрытие базы данных приложением Delphi

Delphi 1 

Очень интересный и полезный вопрос!! Я сам так с ним до конца и не разобрался! Но я попробую систематизировать события, происходящие при запросе на завершение работы Windows:

Windows посылает сообщение WM_QUERYENDSESSION главным окнам всех запущенных приложений, при этом приложения должно сообщить свою готовность к завершению работы.

Если при этом хотя бы одно из приложений ответит отрицательно, Windows прерывает процесс завершения работы.

Delphi перехватывает это сообщение, и, в свою очередь, вызывает метод TForm.CloseQuery, (в главной форме, естественно), который генерирует событие OnCloseQuery, в обработчике которого можно указать на неготовность завершения приложения и отмены завершения работы Windows.

Если я правильно понимаю, если ваше приложение «не мешает» Windows завершить свою работу, Windows нормально НЕ завершает работу приложения, поскольку для этого нет необходимости, не нужно освобождать память, ресурсы и пр. Так, если это утверждение верно (это легко можно проверить, но я слишком ленив сейчас), то событие OnCloseQuery – ваш единственный шанс сохранения данных на диске. Я не думаю что эта логика слишком плоха, просто это одна из тех причуд Windows, которую нужно знать и пользоваться ею. Что может произойти в описанном выше сценарии: редактируемая в настоящий момент запись не будет отправлена (Post) в базу данных, но та же самая вещь может случиться и при нормальном завершении приложения.

Поделиться с друзьями: