|
Вопрос # 1 806/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Подскажите , как можно сделать так чтобы при изменении в gride записи она автомотически изменялась во всех таблицах где она встречается .... я предпринимала некоторые попытки но выскакивает сообщение: resultat : Dataset not in edit or insert mode --- > это при попытке № раз (код №1)
Либо вообще ничего не происходит (Код №2)
Приложение: Переключить в обычный режим-
- i:integer;
- begin
- for i:=1 to DM.resultat.RecordCount do
- begin
- if dm.resultat.FieldByName('ID_D').AsInteger=DM.dogovor.FieldByName('ID_D').AsInteger then
-
- if dm.resultat.FieldByName('ID_C').AsInteger=DM.klient.FieldByName('ID_C').AsInteger then
-
- end;
-
-
- If DM.klient.FieldByName('id_c')=dm.resultat.FieldByName('id_c') then
-
-
 |
Вопрос задала: Танюшка (статус: Посетитель)
Вопрос отправлен: 7 августа 2008, 10:56
Состояние вопроса: открыт, ответов: 3.
|
Ответ #1. Отвечает эксперт: Помфюк Владимир Степанович
Здравствуйте, Танюшка!
перед изменением таблицы надо бы её перевести в режим редактирования:
dm.resultat.edit;
Ответ #2. Отвечает эксперт: ANBsoft
Здравствуйте, Танюшка!
А по окончании редактирования записи нужно выполнить
dm.resultat.post;
это для сохранения сделанных изменей.
Каким гридом пользуемся?
При использовании TDBGrid все действия происходят автоматически.
Чтобы его подключить к запросу, ставим на форма TDataSource, в поле DataSet указываем свой запрос.
После этого ставим TDBGrid и в поле DataSource указываем описанный TDataSource.
Это намного удобнее чем делать через обычные гриды.
 |
Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 7 августа 2008, 11:13
Оценка за ответ: 5
|
Ответ #3. Отвечает эксперт: Шичко Игорь
Здравствуйте, Танюшка!
А Вы не пробовали при анализе таблиц dogovor и klient воспользоваться SQL-запросами.
Мне кажется это будет немного попроще:
i, temp:integer;
begin
DM.resultat.First; //переходим на первую запись
for i:=1 to DM.resultat.RecordCount do
begin
temp:= dm.resultat.FieldByName('ID_D').AsInteger;
SQLdogovor.SQL.Text:= "Select ID_D, Fields[1] from dogovor where ID_D = temp;
SQLdogovor.Open; SQLdogovor.First; // считываем запись из dogovor по ID_D
SQLclient.SQL.Text:= "Select ID_D, Fields[1] from client where ID_D = temp;
SQLclient.Open; SQLclient.First; // считываем запись из client по ID_D
dm.resultat.edit; // редактирование
dm.resultat.FieldByName('Наименование').AsString:=SQLdogovor.Fields.Fields[1].AsString;
dm.resultat.FieldByName('ФИО').AsString:=SQLclient.Fields.Fields[1].AsString;
dm.resultat.post;
SQLdogovor.Close;
SQLclient.Close;
DM.resultat.Next;
end;
end;
SQLclient и SQLdogovor - TADOQuery
 |
Ответ отправил: Шичко Игорь (статус: 9-ый класс)
Время отправки: 7 августа 2008, 12:05
|
Мини-форум вопроса
Всего сообщений: 23; последнее сообщение — 7 августа 2008, 20:05; участников в обсуждении: 5.
Страницы: [« Предыдущая] [1] [2]
|
ANBsoft (статус: Студент), 7 августа 2008, 17:18 [#21]:
По поводу количества записей, не знаю как в ADO и прочих (я с ними не работал), но в палитре компонентов DataAccess и InterBase (стандартные компоненты Делфи) свойство RecordCount возвращает количество полученных от сервера данных и зависит от того к каким данным ранее обращались, для получения реального количества нужно выполнить Last или FetchAll.
|
|
Вадим К (статус: Академик), 7 августа 2008, 18:00 [#22]:
вот, сами и написали. если надо пройтись по всему набору записей, то делать это надо без for, а методом, который я написал.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
ANBsoft (статус: Студент), 7 августа 2008, 20:05 [#23]:
то Вадим К
А я и не писал что нужно использовать FOR.
Я писал что если отношение записей 1 к 1, то все делается через Locate, если 1 ко многим то или перебирать записи (LocateNext или "while Not DataSet.eof do"), или массовый апдейт описанный Владимиром Степановичем (при условии что нет дополнительных изменений при изменении каждой записи или это реализовано средствами базы данных).
В данном случае автору похоже лучше всего подойдет массовый апдейт, особенно если база достаточно большая и вдвойне если работа идет с SQL сервером, который сам сделает все обновления, не перекачивая все данные на клиента.
|
Страницы: [« Предыдущая] [1] [2]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|