![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
КАК УЗНАТЬ, КАКАЯ ИЗ ЗАПИСЕЙ РЕДАКТИРУЕТСЯ В 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).