Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Зачем нужен метод Post? [D6, dBase, FoxPro]


Viacheslav ©   (2002-09-04 13:37:00) 

Мучает меня этот вопрос уже второй день)
Может он и глупый. В умных книгах по Делфи говорится что нужен Post для занесения изменённой методами EDIT, APPEND и INSERT записи в таблицу. А у меня, когда я добавляю запись методом Append, изменения записываются без Post. Так нужно применять этот Пост или нет?.
И ещё один вопрос.
Есть 3 таблицы (созданы на основе фокспро-совских баз данных) - одна главная и две ей подчинённые, связанные по одному и тому же полю.
Так вот вопрос - метод аппенд надо применять для всех трёх таблиц или достаточно для главной?. Я пробовал и так и эдак запись добавляется во все таблицы (вернее только в главную и одну подчинённую). Но при этом к главной прицеплены другие справочные таблицы и в них записи новые не добавляются.
Совета спросить больше не у кого, только у вас уважаемые мастера.)


Viacheslav   (2002-09-04 15:40:00) [1]

Ладно. Спасибо всем за советы и рекомендации.
Буду разбираться)


Mike Kouzmine   (2002-09-04 15:37:00) [2]

Смысл в след. Ты делаешь append вставляется запись и таблица переходит в режим редактирования, если не сделать пост явно или не явно (переход на другую запись, например), при закрытии таблицы, эти данные потеряются. Посмотри на свой код внимательно, чудес не бывает (как правило).


Mike Kouzmine   (2002-09-04 15:29:00) [3]

Мы говорим о принципах


Viacheslav   (2002-09-04 15:24:00) [4]

Ставил.
Что с Post-ом, что без него результат один и тот-же
Пробовал и
...
Table1.Post;
...
Во всех случаях - в Table1 и Table2 добавляются записи а в Table3 нет
Пробовал и так..
procedure TFormPytevoiList.BtnNewClick(Sender: TObject);
var ii : Integer;
begin
DMPytl.Table1.Append;
end;
Да, забыл сказать - при попытке
...
DMPytl.Table1.Post;
DMPytl.Table2.Post;
DMPytl.Table3.Post;
....
Делфи ругается что Table2 не находится в режиме вставки и редактирования, но изменённые данные по этой таблице записывает.
В варианте:
...
DMPytl.Table1.Post;
DMPytl.Table3.Post;
DMPytl.Table2.Post;
....
ругается соответственно на Table3, а данные во вторую таблицу записываются.


Reindeer Moss Eater   (2002-09-04 15:20:00) [5]

Зачем запоминать после чего надо делать Post, а после чего не надо? Не проще ли всегда делать так?
if Table1.State in dsEditModes then Table1.Post;


Mike Kouzmine   (2002-09-04 15:09:00) [6]

А ты после append поставь post и посмотри


Viacheslav   (2002-09-04 15:06:00) [7]

Главная таблица - Table1
Ключевое поле - NPytl
Подчиненные таблицы - Table2,Table3 так-же имеют поля NPytl
Связь, главная таблица - подчинённая, осуществляется через поля NPytl
Свойства - MasterSource подчинённых таблиц - DSTable1
MasterField подчинённых таблиц - NPytl
Все три таблицы используют индексы по полю NPytl.

Вставка новой записи я осуществляю нажатием соответствующей кнопки - BtnNew
procedure TFormPytevoiList.BtnNewClick(Sender: TObject);
var ii : Integer;
begin
DMPytl.Table1.Append;
DMPytl.Table2.Append;
DMPytl.Table3.Append;
end;
DMPytl - модуль данных где располагаются компоненты Table и DaraSource
Вот в принципе и всё


Mike Kouzmine   (2002-09-04 14:48:00) [8]

А ты напиши о связях, структуре и текст вставки


Viacheslav   (2002-09-04 14:40:00) [9]

>Mike Kouzmine (04.09.02 14:26)

но в одной из подчинённых таблиц запись добавляется вместе с главной а в другой нет, хотя Append я для них не делаю.
Если делаю Append и для подчинённых таблиц, ситуация никоим образом не меняется, что с аппендом, что без него((


Mike Kouzmine   (2002-09-04 14:26:00) [10]

После append в главной таблице (если нет обработчика на afterinsert или аналогичный) в подчиненных не появляются новые записи, просто грид показывает пустой набор. А если ты даешь append в подчиненных, то автоматически заполняются связанные поля значениями из главной. Но не более того.


Viacheslav   (2002-09-04 14:22:00) [11]

oss © (04.09.02 14:05)
Когда стану мастером - напишу))))
сейчас ещё рано - оххх как рано)


gek   (2002-09-04 14:21:00) [12]

> Mike Kouzmine
Да, конечно, именно после appendrecord
Прошу прощения за неточность


Viacheslav   (2002-09-04 14:20:00) [13]

>Mike Kouzmine
Так я и делаю - добавляю в главную таблицу запись Table1.Append,
после этого у меня появляются пустые записи в главной и в подчинённых таблицах. Потом делаю изменения в таблицах, но при этом в главной и в одной из подчинённых данные вносятся, а в другой нет словно она доступна только по чтению, хотя пустая строка появляется.
Данные внесенные в те две таблицы сохраняются и без метода Post.
В DBD32 , когда открываешь таблицы, в главной и одной из подчинённых есть новые введённые записи, а в третьей таблице нет.
Вот я и не пойму почему в одну подчинённую таблицу вводится запись а в другую нет и почему эта третья таблица получается доступной только по чтению, хотя все установки свойств для неё такие же как и для первой подчинённой таблице.


Mike Kouzmine   (2002-09-04 14:08:00) [14]

gek © -> после append надо, после appendrecord - нет


oss   (2002-09-04 14:05:00) [15]

думаю ты можешь написать и сам книгу :)


gek   (2002-09-04 14:05:00) [16]

после Append Post не надо делать
Для всех а лучше Insert для подчиненных


Mike Kouzmine   (2002-09-04 14:04:00) [17]

Он вызывается автоматически при переходе на другую запись. А ты попробуй отредактирую запись, а потом не вызывая post выйди из программы, тогда увидишь.
append надо применять там где надо.


Наверх

Титульная страница Поиск, карта сайта Написать письмо