![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте.
У меня есть dbedit который связан с одной таблицей, и нужно чтобы эти данные из этого dbedit'а заносились в ДРУГУЮ таблицу при нажатии на dbnavigator. Какую процедуру нужно прописать для dbedit'a , или как еще можно сделать,но без лишних кнопок, а с помощью navigator'a. |
|
#2
|
||||
|
||||
|
Можно использовать AfterPost или BeforePost для первой таблицы.
Они вызываются После сохранения записи и до сохранения записи в таблицу соответственно. |
|
#3
|
|||
|
|||
|
А можно пожалуйста по подробнее...
Что такое AfterPost и BeforePost и что с ними делать? |
|
#4
|
|||
|
|||
|
Цитата:
AfterPost - возникает после сохранения BeforePost - перед сохранением. Когда вы нажимаете на сохранение в DBNavigator-е срабатывает событие BeforePost соответствующей таблицы. В это событие и можно вписать код для записи значений этой таблицы в другую. |
|
#5
|
|||
|
|||
|
Цитата:
А можете привести примерный код? |
|
#6
|
|||
|
|||
|
Код:
procedure TForm1.Table1AfterPost(Sender : TObject);
begin
If Table2.State <> dsEdit Then Table2.Edit;
Table2.FieldByName('...').Value := Table1.FieldByName('...').Value; // но так нельзя для Memo полей (BLOB).
Table2.Post;
end; |
|
#7
|
|||
|
|||
|
Цитата:
А можно тот же самый код, только с комментариями, а то у меня ничего не получается. И нужно это писать в AfterPost или в BeforePost? |
|
#8
|
|||
|
|||
|
Код:
procedure TForm1.Table1AfterPost(Sender : TObject);
begin
If Table2.State <> dsEdit Then Table2.Edit;//если table2 не находится в режиме редактирования то перевести ее в режим редиктирования
Table2.FieldByName('name').asString := Table1.FieldByName('name').AsString; // записываем в поле name Table2 соответствующее поле name Table1
Table2.Post;//сохраняем изменения в Table2.
end; |
|
#9
|
|||
|
|||
|
Ошибка какая то ! В чем дело?
Последний раз редактировалось James0109, 26.05.2008 в 20:37. |
|
#10
|
|||
|
|||
|
Нарушается уникальность ключевого поля по видимому.
|
|
#11
|
|||
|
|||
|
Цитата:
И что c этим делать? |
|
#12
|
|||
|
|||
|
При копировании записи из одной таблицы в другую не надо копировать ключевое поле.
|
|
#13
|
|||
|
|||
|
А как надо? У меня вот че получилось :
procedure TDataModule1.ADOTable2AfterPost(DataSet: TDataSet); begin If DataModule1.ADOTable1.State <> dsEdit Then DataModule1.ADOTable1.Edit; DataModule1.ADOTable1.FieldByName('Оклад').asStrin g := DataModule1.ADOTable2.FieldByName('Оклад').AsStrin g; DataModule1.ADOTable1.Post; end; Может перепутал таблицы или еще че нибудь? |
|
#14
|
|||
|
|||
|
Все верно. А навигатор то к какой таблице привязан? Исходя из задачи должен к Table2.
Единственное этот код вносит изменения в поле "оклад" текущей записи table1. Если надо добавлять то используй не Edit, а Insert. |
|
#15
|
|||
|
|||
|
Навигатор привязан к первой таблице. Нужно чтобы данные брались из второй таблицы поля Оклад и заносились в поле Оклад первой таблицы.
Подскажи что нужно изменить. |