Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

КАК УЗНАТЬ, КАКАЯ ИЗ ЗАПИСЕЙ РЕДАКТИРУЕТСЯ В DBGrid? [D6, ACCESS-XP]


-=DeMoH=- ©   (2003-05-04 12:41:00) 

Проблема состоит в следующем: мне нужно узнавать номер записи, которую в данный момент редактирует пользователь в DBGrid"е, чтобы корректно вызывать метод ADOTable1AfterPost (он выполняет определенные действия после изменения какого-либо поля в БД).


MsGuns   (2003-05-04 13:20:00) [1]

>=DeMoH=- © (04.05.03 13:03)
>У компонента DataSourceесть такие понятия как DataSource1.DataSet.MoveBy
Методы MoveBy и прочие перечисленные есть не у DataSource, а у "папы" многих датасетов (в т.ч. и TADOTable) - TDataSet

Если узер редактирует запись в гриде, не надо давать никаких Edit,- Grid+DataSource сами переводят НД в режим редактирования.
Точно также измененная запись и постируется автоматически, стоит узеру перейти с измененной записи в другую. Методы Edit/Insert/Append/Post/Cancel используются для программныхмодификаций датасетов (например, если узер вводит данные не в грид, а в контролы типа TEdit, а потом нажимает кнопку, по которой прога заносит изменения в НД, но не в грид). Некоторые из них могут использоваться также в обработчиках событий НД (After/BeforeXXXX)


JibSkeart   (2003-05-04 13:15:00) [2]

MsGuns © (04.05.03 12:45)
Есть


-=DeMoH=-   (2003-05-04 13:03:00) [3]

У компонента DataSource есть такие понятия как DataSource1.DataSet.MoveBy(...);
DataSource1.DataSet.First;
DataSource1.DataSet.Next;
DataSource1.DataSet...
и так далее.
Сначала я думал, что после изменения поля в DBGrid изменяется и значение DataSet, но как показала практика, при вызове следующего кода

DataSource1.DataSet.Edit;
...
DataSource1.DataSet.Post;

постоянно редактируется ПЕРВАЯзапись, а мне нужно редактировать именно ту запись, изменения в которой сделал пользователь с помощью DBGrid !!!


MsGuns   (2003-05-04 13:02:00) [4]

interfase
...

var
Fio: String;
BhDay: TDate;
rcn: integer;

implementation
...

procedure Form1.Button1Click(Sender: TObject);
// Забрать в переменные значения ТЕКУЩЕЙ записи НД (грида)
begin
with ADOTable1 do
begin
Fio := FileByName("FIO").AsString;
BhDay := FileByName("BIRTHDAY").AsDateTime;
rcn := RecNo;
end;
end;


jack128   (2003-05-04 12:57:00) [5]

нет такого понятия, как номер записи. По крайней мере в реляционных БД. Можешь записывать primary key, если он есть конечно


-=DeMoH=-   (2003-05-04 12:52:00) [6]

А где это? (Нужно просто каким-либо способом занести в каку-нибудь переменную номер записи)


MsGuns   (2003-05-04 12:45:00) [7]

В DBGrid`е всегда редактируется текущая запись КУРСОРА НД, номер которой относительно КУРСОРА можно узнать в RecNo (правда, не уверен, есть ли такое Property у компонент ADO).


Наверх

Титульная страница Поиск, карта сайта Написать письмо