Читать «Виртуальная библиотека Delphi» онлайн - страница 95

Unknown

16. Как установить фокус на определенное поле в TDBGrid?

Используйте код:

DBGrid1.SelectedField := Table1SomeField;

DBGrid1.SetFocus;

17. Как создать обработчик события OnClick для TDBGrid?

Как и всякий TControl (иерархия наследования TControl→TWinControl→TCustomControl→TCustomGrid→TCustomDBGrid→TDBGrid) у TDBGrid есть событие OnClick, но оно protected. Так что можно либо создать новый класс, производный от TDBGrid, в котором объявить это свойство как published, либо использовать другой вариант. Например, вы можете использовать событие OnColEnter.

18. Как создать маску для TDBEdit?

Маска относится к полю в таблице (компонент TField) а не к самому TDBEdit. Дважды щелкните мышкой на TTable и в FieldEditor'е добавьте все нужные вам поля. Когда поле выбрано в списке, его свойства показаны в Object Inspector, включая маску ввода. Связывание TDBEdit и любых других компонентов с этим TTable будет вызывать наложение маски на соответствующее поле.

19. Хотелось бы иметь для OLE объектов, сохраненных в базе данных, компонент вроде TDBImage.

В стандартном наборе такого компонента действительно нет. Возможно, кто-нибудь скоро напишет что-нибудь в этом роде. В принципе, можно обойтись и без данного компонента. Например, есть табличка .db с BLOB полем для OLE объекта. При движении по записям можно OLE сохранять в базе, уничтожать, создавать новый, считывать из базы.

Чтение/запись OLE:

• создать поток, связанный с BLOB полем

• для OLE контейнера выполнить чтение/запись с потоком (SaveToStream и LoadFromStream)

Естественно, OLE объект должен быть Embedded.

20. Что нужно сделать, чтобы при открытии запароленной таблицы не появлялся диалог запроса пароля?

Просто дайте этот пароль объекту Session перед открытием таблицы:

Session.AddPassword('PASSWORD');

После закрытия таблицы, пароль можно удалить RemovePassword('PASSWORD'), можно удалить все пароли: RemoveAllPasswords.

Если ваш компонент доступа к данным (TTable или TQuery) связан с сессий, отличной от той, которая выставляется по умолчанию, то добавлять пароль нужно именно у этого компонента TSession.

21. Как определить реальный размер поля типа BLOB, которое сохранено в таблице?

Ниже приведена функция GetBlobSize, которая возвращает размер данного BLOB или MEMO поля.

function GetBlobSize(Field: TBlobField): Longint;

begin

  with TBlobStream.Create(Field, bmRead) do

  try

    Result := Seek(0, 2);

  finally

    Free;

  end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

{ This sets the Edit1 edit box to display the size of }

{ a memo field named Notes.                           }

  Edit1.Text := IntToStr(GetBlobSize(Notes));

end;

22. Как осуществить поиск по неиндексированному полю в таблице?