![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте.
У меня есть dbedit который связан с одной таблицей, и нужно чтобы эти данные из этого dbedit'а заносились в ДРУГУЮ таблицу при нажатии на dbnavigator. Какую процедуру нужно прописать для dbedit'a , или как еще можно сделать,но без лишних кнопок, а с помощью navigator'a. |
#2
|
||||
|
||||
![]() Можно использовать AfterPost или BeforePost для первой таблицы.
Они вызываются После сохранения записи и до сохранения записи в таблицу соответственно. From VasYa with LoVe... |
#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
|
|||
|
|||
![]() Навигатор привязан к первой таблице. Нужно чтобы данные брались из второй таблицы поля Оклад и заносились в поле Оклад первой таблицы.
Подскажи что нужно изменить. |