Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.05.2008, 22:23
James0109 James0109 вне форума
Прохожий
 
Регистрация: 12.05.2008
Сообщения: 13
Репутация: 10
Вопрос Вывод из dbedit в таблицу

Здравствуйте.

У меня есть dbedit который связан с одной таблицей, и нужно чтобы эти данные из этого dbedit'а заносились в ДРУГУЮ таблицу при нажатии на dbnavigator. Какую процедуру нужно прописать для dbedit'a , или как еще можно сделать,но без лишних кнопок, а с помощью navigator'a.
Ответить с цитированием
  #2  
Старый 25.05.2008, 14:16
Аватар для Appolon
Appolon Appolon вне форума
Новичок
 
Регистрация: 10.01.2008
Адрес: гЕйск
Сообщения: 76
Репутация: 16
По умолчанию

Можно использовать AfterPost или BeforePost для первой таблицы.
Они вызываются После сохранения записи и до сохранения записи в таблицу соответственно.
__________________
From VasYa with LoVe...
Ответить с цитированием
  #3  
Старый 25.05.2008, 21:18
James0109 James0109 вне форума
Прохожий
 
Регистрация: 12.05.2008
Сообщения: 13
Репутация: 10
По умолчанию

А можно пожалуйста по подробнее...
Что такое AfterPost и BeforePost и что с ними делать?
Ответить с цитированием
  #4  
Старый 25.05.2008, 22:24
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Цитата:
Сообщение от James0109
А можно пожалуйста по подробнее...
Что такое AfterPost и BeforePost и что с ними делать?
Это события набора данных (например Table).
AfterPost - возникает после сохранения
BeforePost - перед сохранением.
Когда вы нажимаете на сохранение в DBNavigator-е срабатывает событие BeforePost соответствующей таблицы. В это событие и можно вписать код для записи значений этой таблицы в другую.
Ответить с цитированием
  #5  
Старый 26.05.2008, 00:12
James0109 James0109 вне форума
Прохожий
 
Регистрация: 12.05.2008
Сообщения: 13
Репутация: 10
По умолчанию

Цитата:
Сообщение от MegaPiha
Это события набора данных (например Table).
AfterPost - возникает после сохранения
BeforePost - перед сохранением.
Когда вы нажимаете на сохранение в DBNavigator-е срабатывает событие BeforePost соответствующей таблицы. В это событие и можно вписать код для записи значений этой таблицы в другую.


А можете привести примерный код?
Ответить с цитированием
  #6  
Старый 26.05.2008, 01:27
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
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  
Старый 26.05.2008, 19:46
James0109 James0109 вне форума
Прохожий
 
Регистрация: 12.05.2008
Сообщения: 13
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Код:
procedure TForm1.Table1AfterPost(Sender : TObject);
begin
  If Table2.State <> dsEdit Then Table2.Edit;
  Table2.FieldByName('...').Value := Table1.FieldByName('...').Value; // но так нельзя для Memo полей (BLOB).
  Table2.Post;
end;

А можно тот же самый код, только с комментариями, а то у меня ничего не получается. И нужно это писать в AfterPost или в BeforePost?
Ответить с цитированием
  #8  
Старый 26.05.2008, 20:01
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Код:
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  
Старый 26.05.2008, 20:21
James0109 James0109 вне форума
Прохожий
 
Регистрация: 12.05.2008
Сообщения: 13
Репутация: 10
Печаль

Ошибка какая то ! В чем дело?
Изображения
Тип файла: gif Безымянный.GIF (9.1 Кбайт, 10 просмотров)

Последний раз редактировалось James0109, 26.05.2008 в 20:37.
Ответить с цитированием
  #10  
Старый 26.05.2008, 20:43
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Нарушается уникальность ключевого поля по видимому.
Ответить с цитированием
  #11  
Старый 26.05.2008, 20:53
James0109 James0109 вне форума
Прохожий
 
Регистрация: 12.05.2008
Сообщения: 13
Репутация: 10
По умолчанию

Цитата:
Сообщение от MegaPiha
Нарушается уникальность ключевого поля по видимому.

И что c этим делать?
Ответить с цитированием
  #12  
Старый 26.05.2008, 21:02
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

При копировании записи из одной таблицы в другую не надо копировать ключевое поле.
Ответить с цитированием
  #13  
Старый 26.05.2008, 21:15
James0109 James0109 вне форума
Прохожий
 
Регистрация: 12.05.2008
Сообщения: 13
Репутация: 10
По умолчанию

А как надо? У меня вот че получилось :

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  
Старый 26.05.2008, 22:28
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Все верно. А навигатор то к какой таблице привязан? Исходя из задачи должен к Table2.
Единственное этот код вносит изменения в поле "оклад" текущей записи table1. Если надо добавлять то используй не Edit, а Insert.
Ответить с цитированием
  #15  
Старый 26.05.2008, 22:36
James0109 James0109 вне форума
Прохожий
 
Регистрация: 12.05.2008
Сообщения: 13
Репутация: 10
По умолчанию

Навигатор привязан к первой таблице. Нужно чтобы данные брались из второй таблицы поля Оклад и заносились в поле Оклад первой таблицы.

Подскажи что нужно изменить.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:55.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025