Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DBGrid, считать значение 
:(
    Опции темы
Лена
Дата 2.11.2006, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: 11
Всего: 11



Как реализовать следующее:
При щелчке на полосе прокрутки в DBGrid соответственно перемещается и dbIndicator напротив строк. Как считать значение из строки, на которую указывает индикатор после щелчка на полосе прокрутки? (см.рис).
Считывать так:
Int ParamForSQL1 = DataModule2->ClientDataSetDoors->FieldByName("id")->Value;
Однако в каком событии отслеживать указатель dbIndicator при прокрутке?



Присоединённый файл ( Кол-во скачиваний: 18 )
Присоединённый файл  1.gif 13,73 Kb
PM MAIL   Вверх
SPrograMMer
Дата 2.11.2006, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Спамер :)
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 5.11.2004
Где: Краснодар

Репутация: нет
Всего: 6



OnAfterScroll ?


--------------------
животное = зверь
законченный гентушник
PM MAIL ICQ Jabber   Вверх
Лена
Дата 3.11.2006, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: 11
Всего: 11



Цитата(SPrograMMer @  2.11.2006,  23:53 Найти цитируемый пост)
OnAfterScroll ? 


Такого события у DBGrid нет.  smile 

P.S.
Cпасибо, разобралась. Это событие нашла у ClientDataSet. Сейчас попробую.


Это сообщение отредактировал(а) Лена - 3.11.2006, 10:10
PM MAIL   Вверх
VitasDeWind
Дата 3.11.2006, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 2.11.2006

Репутация: нет
Всего: нет



А тебе нужно считать значение из строчки, или получить номер по порядку в индикаторе?

Добавлено @ 10:13 
sorry, не дочитал...

Нужно считать значение из поля, когда юзэр отпустил левую кнопу мышки после перемещения полосы прокрутки. ТАК ?
PM MAIL   Вверх
Vyacheslav
Дата 3.11.2006, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Я предпочитал пользоваться событием TDataSource::OnDataChange
Если Field == NULL, то это означает, что  произошло смена текущей записи
Код

void __fastcall TForm1::DataSource1DataChange(TObject *Sender,
      TField *Field)
{
      if(!Field) {
          ParamForSQL1 = DataModule2->ClientDataSetDoors->FieldByName("id")->Value;
      }   

}



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Лена
Дата 3.11.2006, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: 11
Всего: 11



Цитата(Vyacheslav @  3.11.2006,  10:27 Найти цитируемый пост)
Если Field == NULL, то это означает, что  произошло смена текущей записи


Тут мне не совсем понятно. Тип Field это тип TField колонки. Почему проверка (!Field) означает, что произошла смена записи?

Еще вопрос:
Поле "id" имеет тип int. Переменная ParamForSQL1 имеет тоже тип int. Когда написала так:
ParamForSQL1 = DataModule2->ClientDataSetDoors->FieldByName("id")->Value; получила исключение на рисунке.
Когда написала так:
ParamForSQL1 = DataModule2->ClientDataSetDoors->FieldByName("id")->AsInteger; все стало нормально.
Я проверила что в момент исключения ParamForSQL1 равно нулю и поэтому исключение. Я посмотрела таблицу, там нет id со значеним ноль. Рисунок прилагаю. Запрос к таблице такой: select * from groups order by name 
Определение таблицы в базе:
CREATE TABLE groups
(
  id int4 NOT NULL DEFAULT nextval('groups_id_seq'::regclass),
  name varchar(50) NOT NULL,
  enabled bool NOT NULL,
  stime timestamp NOT NULL, 
  etime timestamp NOT NULL, 
  CONSTRAINT pk_groups PRIMARY KEY (id)
) 
 Cама таблица в базе на прилагаемом рисунке. Откуда ноль берется при генерации исключения?


Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  1.gif 13,00 Kb
PM MAIL   Вверх
Vyacheslav
Дата 3.11.2006, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Цитата(Лена @  3.11.2006,  12:01 Найти цитируемый пост)
Тут мне не совсем понятно. Тип Field это тип TField колонки. 

Забудте про грид. Когда работаете с БД  для Вас должно быть только одно: DataSet и соответственно TField - это Field от DataSet. 

Цитата(Лена @  3.11.2006,  12:01 Найти цитируемый пост)
Почему проверка (!Field) означает, что произошла смена записи?

Цитата из хелпа
Цитата

typedef void __fastcall (__closure *TDataChangeEvent) (TObject* Sender, TField* Field);
__property TDataChangeEvent OnDataChange = {read=FOnDataChange, write=FOnDataChange};
...
Methods that can trigger this event include the Next or Prior methods for the dataset. Data-aware controls notify a data source of a data change when:

Scrolling to a new record.
Modifications to a field’s data.

The Field parameter is NULL if the change can affect more than one field value (for example when moving to a new record or refreshing a record buffer).  If only one field is affected, Field indicates the edited field.


Добавлено @ 13:32 
Цитата(Лена @  3.11.2006,  12:01 Найти цитируемый пост)
Откуда ноль берется при генерации исключения

Ноль не берется. Почему Вы предположили, что преобразование  от Variant к integer, сделанное по умолчанию будет корректно.



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Лена
Дата 3.11.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: 11
Всего: 11



Цитата(Vyacheslav @  3.11.2006,  13:27 Найти цитируемый пост)
Забудте про грид. Когда работает с БД есть для Вас должно быть только одно: DataSet и соответственно TField - это Field от DataSet. 


Cпасибо. Теперь понятно.  smile 



Это сообщение отредактировал(а) Лена - 3.11.2006, 14:29
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.