Читаем Виртуальная библиотека Delphi полностью

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. Как осуществить поиск по неиндексированному полю в таблице?

Вы можете добавить следующую функцию в ваш модуль и вызвать, например:

Locate(Table1, Table1LName, 'Beman');

Table1 — компонент TTable, Table1LName — TField, который вы добавили с помощью Fields Editor и 'Beman' - имя, которое вы хотите найти.

23. Как узнать, что изменилась текущая запись?

Событие TDataSource.OnDataChange когда State=dsBrowse.

24. Как считать даты для вычисляемых полей?

При вычислении дат важно удостовериться в том, что все используемые значения подходят по типу. В документации не совсем явно отражен тот факт, что на самом деле тип TDataTime эквивалентен типу Double, который можно использовать далее.

В примере, D1 и D2 (поля в Table1) могут быть типа или Date, или TDateTime, а D3 — поле типа Integer.  

procedure TForm1.Table1CalcFields(DataSet: TDataset); 

var 

  T1, T2: TDateTime; 

begin 

  Table1D1.AsDateTime := Date+2; 

{ or Table1D1.Value := Date+2; } 

  Table1D2.AsDateTime := Date-2; 

  T1 := Table1D1.AsDateTime; 

  T2 := Table1D2.AsDateTime; 

  Table1D3.AsInteger := Trunc(Double(T1) - Double(T2)); 

end

<p>Компоненты и VCL</p>

1. Почему возникает ошибка компиляции при обращении к объекту Sender в обработчике события?

Я в обработчике события OnChange для компонента TEdit пытаюсь получить содержимое его текстового буфера. Однако, следующая конструкция вызывает ошибку компиляции 'неизвестный идентификатор':

Caption := Sender.Text;

Если вы рассматривали декларацию, объект Sender имеет тип TObject, который является классом, который наследуется почти всеми остальными объектами. Вы, вероятно, пробуете обращаться к свойству, которое не определено в TObject, вроде Text или Caption. По этой причине, выражение Sender.Text вызовет ошибку, но если (для примера) вы знаете, что Sender имеет тип TEdit, тогда вы можете использовать выражение:

Caption := (Sender as TEdit).Text;

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных