Аналогично и для других драйверов.
Перед изменения реестра нужно выгрузить все
программы использующие BDE. BDE administrator не сможет
использовать этот параметр , а вот все другие
программы (sqlexplorer, ...) - ДА.
Как заставить
клавишу "Enter" вести себя как "Tab" в DBGrid?
Следующий пример включает также обработку "Enter"
для всей формы, включая поля и т.д. Часть,
относящаяся к DBGrid обрабатывается в секции Else.
Приведенный код не полностью копирует поведение "Tab"
в DBGrid, с последней колонки фокус переходит на
первую без перехода на следующую запись.
procedure TForm1.FormKeyPress(Sender: TObject; i Key: Char);
{ Это обработчик события OnKeyPress для
ФОРМЫ! }
{ Требуется так же установить св-во
KeyPreview в True }
begin
if Key=#13then{ клавиша }
if not (ActiveControl is TDBGrid) then
begin{ если не в TDBGrid }
Key :=#0;{
убрать }
Perform(WM_NEXTDLGCTL, 0, 0);
{ перейти дальше }
end
else
if (ActiveControl is TDBGrid) then{
если в TDBGrid }
with TDBGrid(ActiveControl) do
if SelectedIndex < (FieldCount - 1) then{ следующее поле }
Как узнать, какая ячейка при просмотре TDBGrid
текущая?
Здесь процедура для сохранения текущего номера
строки и колонки. Следующий код в методе MyDBGridDrawDataCell
обновляет переменные Col и Row (которые не
должны быть локальными для этого метода) каждый
раз, когда таблица перерисовывается. Используя
этот код, Вы можете считать, что Col и Row
указывают на текущую колонку и строку
соответственно.
Как изменить цвет фона и
шрифта в TDBGrid в зависимости от содержимого? Kuznetsov Anatoly 5
января 1999 г
triton@cs.sibgarw.nsk.su
Для изменения в TDBGrid цвета фона и шрифта в
зависимости от содержимого определенного поля
(ячейки) необходимо воспользоваться
обработчиком события onDrawColumnCell. Представим
что мы хотим чтобы все записи где сумма=0
высвечивались на красном фоне синим курсивом.
Для этого в обработчик onDrawColumnCell добавляем
следующий код:
Установите свойство DefaultDrawing в True. Если
установить DefaultDrawing в False, то Вы должны
самостоятельно перерисовать все ячейки
аналогично примеру.
Как с помощью TDBGrid.RowSelected
получить доступ к записям TTable, соответствующим
строкам, помеченным в TDBGrid? Michail Alyavdin 17
декабря 1998 г
boss@vast.spb.su
Предлагаю
часть из своей работающей процедуры:
Пользователь отмечает (или нет) на DBGrid
некоторое число записей, а эта процедура
перегоняет их в структуру SData.
with CData.SpTable, SData do
begin
nSpData :=DBGrid1.SelectedRows.Count;
if nSpData > MaxnSpData then nSpData :=MaxnSpData;
if nSpData=0 then
begin
nSpData :=1;
GetSpectr(1, SData);
end
else
begin
DisableControls;
try
for I :=nSpData downto 1 do
begin
Bookmark :=DBGrid1.SelectedRows.Items[I - 1];
GetSpectr(I, SData);
end;
finally
EnableControls;
end;
end;
end;
Можно ли задать формат/маску
вывода числа в столбце DBGrid? Ivanuts Vasiliy 6
декабря 1998 г
ivanuts@altavista.net
По скольку речь идет о компоненте TDBGrid, то
нельзя забывать что, ячейки этого компонента
заполняются данными из полей таблицы базы данных
через компонент TDataSource. А именно составляющими
являются автоматически созданные по "подобию
и количеству" полей таблицы - компоненты TField. В
свою очередь, компонент TField имеет унаследованое
от класса TCustomMaskEdit свойство DisplayFormat, которое и
отвечает за форматное представление данных в
других визуальных компонентах, в том числе и в
TDBGrid. Важно знать что, для настройки этого
свойства средствами визуальной разработки -
необходимо явно создать в классе Вашей формы
поля типа TField. Это можно сделать при помощи
Редактора полей компонентов TTable или TQuery.
Форматная строка в этом свойстве может быть
выбрана по правилам форматирования данных, на
пример: '#,##0.00' выдаст результат=94 256,00
Обработка исключительных
ситуаций (exceptions) EDBEngineError.
Информация об ошибке BDE может быть получена для
использования в приложении из EDBEngineError.
Исключительная ситуация EDBEngineError обрабатывается
в программе с помощью конструкции try ... except.
Когда возникает исключительная ситуация BDE, то
может быть создан объект EDBEngineError и различные
поля этого объекта могут быть использованы для
программного определения, что не в порядке и что
требуется для исправления ситуации. Далее, для
данной исключительной ситуации может быть
сгенерировано несколько сообщений об ошибках.
Это требует организации перебора сообщений об
ошибках для получения нужной информации. Поле,
наиболее важное для данного контекста - ErrorCount :
Integer; показывает количество ошибок в свойстве
Errors; счет начинается с нуля. Errors : TDBError; набор
записей, которые содержат информацию о каждой
полученной ошибке; доступ к записям происходит
по индексу типа Integer. Errors.ErrorCode : DBIResult;
показывает номер ошибки BDE для текущей записи об
ошибках в свойстве Errors. Errors.Category : Byte;//категория ошибки,
относящаяся к полю ErrorCode. Errors.SubCode : Byte;//подкод (subcode) для
значения в ErrorCode. Errors.NativeError : LongInt;//код удаленной
ошибки, возвращаемый сервером; если ноль, то это
ошибка не сервера; возвращаемое SQL запросом
значение появляется в данном поле. Errors.Message : TMessageStr; //сообщение об
ошибке, сервера или BDE
В конструкции try..exceptобъект создается
напрямую в разделе except. После создания можно
работать поля обычным образом или передавать
объект в другую роцедуру для исследования
ошибки. Кроме того, можно создать свой
собственный компонент для использования в
данных целях; его набор функциональных
возможностей можно легко переносить между
приложениями. В примере ниже во время
возникновения исключительной ситуации BDE
создается объект DBEngineError, передается в процедуру
и анализируется для выделения информации об
ошибке. В конструкции try..except, объект DBEngineError
можно создать с помощью синтаксиса, приведенного
ниже:
В этой процедуре делается попытка изменить
значение поля в таблице и затем вызывается метод
Post соответствующей таблицы. В конструкцию try..except
заключается только попытка Post. Если при этом
возникает ошибка BDE, то выполняеся секция except,
в которой создается объект E типа EDBEngineError и затем
E передается в процедуру ShowError. Заметьте, что
только EDBEngineError учитывается в данной конструкции.
В реальной ситуации нужно, скорее всего,
проверять и другие виды исключительных ситуаций.
Процедура ShowError принимает объект EDBEngineError,
передаваемый в качестве параметра и исследует
содержащиеся сообщения об ошибках. В данном
примере информация об ошибках показывается в
компоненте TMemo. Первый шаг состоит в определении
количества действительно возникших ошибок. Для
этого служит свойство ErrorCount. После того, как
стало известно количество ошибок, можно
использовать цикл для доступа к каждой записи об
ошибке в свойстве Error и помещению информацию о
них в TMemo.