Виртуальная библиотека Delphi
- Название:Виртуальная библиотека Delphi
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Виртуальная библиотека Delphi краткое содержание
Виртуальная библиотека Delphi - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Для подсчета сумм правильнее использовать событие TQuery.OnCalcFields . Хорошим примером является X:\DELPHI\DEMOS\DB\MASTAPP\MASTAPP.DPR.
8. Использование кавычек в параметризированном запросе.

Мой запрос получает параметр. Проблема в том, что строка параметра содержит " (двойную кавычку), которая приводит к Runtime Error.

Вам необходимо использовать динамический SQL-запрос, иначе при указании например
WHERE TABLE.FIELD = 'let"ter'
вы получите ошибку.
9. Как создать отдельный компонент TTable?
Легко и просто — точно также как и обычный компонент. При этом в качестве параметра конструктору можно передавать значение nil.
var
MyTable: TTable;
begin
MyTable := TTable.Create( nil);
try
MyTable.DatabaseName := 'MyDB';
MyTable.TableName := 'MyTable.db';
Mytable.IndexName := 'MyIndex';
MyTable.Open;
{ делать то, что надо }
finally
MyTable.Free;
end;
end;
10. Как узнать, какая ячейка при просмотре TDBGrid текущая?
Здесь процедура для сохранения текущего номера строки и колонки. Следующий код в методе MyDBGridDrawDataCell обновляет переменные Col и Row (которые не должны быть локальными для этого метода) каждый раз, когда таблица перерисовывается. Используя этот код, вы можете считать, что Col и Row указывают на текущую колонку и строку соответственно.
var
Col, Row: Integer;
procedureTForm1.MyDBGridDrawDataCell(Sender: TObject; constRect: TRect;
Field: TField; State: TGridDrawState);
var
RowHeight: Integer;
begin
ifgdFocused inState then
begin
RowHeight := Rect.Bottom - Rect.Top;
Row := (Rect.Top divRowHeight) - 1;
Col := Field.Index;
end;
end;
11. Как выделить цветом текущую строку в TDBGrid?
Для TDBGrid в свойстве Options установите dgRowSelect в True .
12. Как изменить цвет ячейки в TDBGrid?
Введите следующий код в обработчике события OnDrawDataCell :
procedureTForm1.DBGrid1DrawDataCell(Sender: TObject; constRect: TRect;
Field: TField; State: TGridDrawState);
begin
ifgdFocused inState then
with(Sender asTDBGrid).Canvas do
begin
Brush.Color := clRed;
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, Field.AsString);
end;
end;
Установите свойство DefaultDrawing в True . Здесь перерисовывается только выделенная ячейка. Если установить DefaultDrawing в False , то вы должны самостоятельно перерисовать все ячейки аналогично примеру.
13. Как узнать, что пользователь перешел на другую запись, например, в TDBGrid?
Переход на новую запись — это событие, которое относится не к визуальному компоненту, а к источнику данных. Соответствующее событие называется OnDataChange и имеется у компонента TDataSource .
14. Как устанавливать собственный цвет или шрифт для столбца TDBGrid?

Выключите property DefaultDrawing , и обрабатывайте событие OnDrawDataCell :
procedureTForm1.DBGrid1DrawDataCell(Sender: TObject; constRect: TRect;
Field: TField; State: TGridDrawState);
begin
ifField.FieldName = 'Name' thenDBGrid1.Canvas.Font.Style := [fsBold];
DBGrid1.DefaultDrawDataCell(Rect, Field, State);
end;
Это приведет к тому, что содержимое столбца 'Name' будет показываться жирным шрифтом.

В Delphi 2.0 вы можете использовать редактор столбцов для той же самой цели.
15. Почему указатель ползунка в TDBGrid не показывает текущее положение в таблице?
Дело в том, что TDBGrid предполагает многопользовательский доступ к таблице. В этом случае другие пользователи этой же таблицы могут добавлять или удалять записи, в результате информация о количестве записей на текущий момент становится неопределенной.
Конечно, в однопользовательском варианте количество записей всегда известно, но поскольку TDBGrid работает через промежуточный источник данных DataSource , ему неизвестен конкретный способ доступа к данным — навигационный или SQL. Например, для SQL существует только один способ узнать количество записей — выполнить специальный запрос с их подсчетом, а на это может потребоваться значительное время.
По всем этим причинам TDBGrid является универсальным средством для просмотра таблиц, которое работает во всех случаях и с любыми источниками данных.
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 .
Читать дальшеИнтервал:
Закладка: