19. Хотелось бы иметь для OLE объектов, сохраненных в базе данных, компонент вроде TDBImage.
В стандартном наборе такого компонента действительно нет. Возможно, кто-нибудь скоро напишет что-нибудь в этом роде. В принципе, можно обойтись и без данного компонента. Например, есть табличка .db с BLOB полем для OLE объекта. При движении по записям можно OLE сохранять в базе, уничтожать, создавать новый, считывать из базы.
Чтение/запись OLE:
• создать поток, связанный с BLOB полем
• для OLE контейнера выполнить чтение/запись с потоком (
Естественно, OLE объект должен быть Embedded.
20. Что нужно сделать, чтобы при открытии запароленной таблицы не появлялся диалог запроса пароля?
Просто дайте этот пароль объекту
Session.AddPassword('PASSWORD');
После закрытия таблицы, пароль можно удалить
Если ваш компонент доступа к данным (
21. Как определить реальный размер поля типа BLOB, которое сохранено в таблице?
Ниже приведена функция
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
Edit1.Text := IntToStr(GetBlobSize(Notes));
end;
22. Как осуществить поиск по неиндексированному полю в таблице?
Вы можете добавить следующую функцию в ваш модуль и вызвать, например:
Locate(Table1, Table1LName, 'Beman');
23. Как узнать, что изменилась текущая запись?
Событие
24. Как считать даты для вычисляемых полей?
При вычислении дат важно удостовериться в том, что все используемые значения подходят по типу. В документации не совсем явно отражен тот факт, что на самом деле тип
В примере,
procedure TForm1.Table1CalcFields(DataSet: TDataset);
var
T1, T2: TDateTime;
begin
Table1D1.AsDateTime := Date+2;
Table1D2.AsDateTime := Date-2;
T1 := Table1D1.AsDateTime;
T2 := Table1D2.AsDateTime;
Table1D3.AsInteger := Trunc(Double(T1) - Double(T2));
end;
Компоненты и VCL
1. Почему возникает ошибка компиляции при обращении к объекту Sender в обработчике события?
Я в обработчике события
Caption := Sender.Text;
Если вы рассматривали декларацию, объект
Caption := (Sender as TEdit).Text;