Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
обновление DataSet другой формы
|
|||
|---|---|---|---|
|
#18+
Имеется база Access. Просматриваю ее таблицу в DBGride формы 1, строки редактирую в форме 2, которую вызываю из первой. По сохранению, результат в форме 1 не появляется. Помогает ее открыть-закрыть, что ессно не пойдет. Использую ADO... procedure Form2.Button1Click(Sender: TObject); begin with ADODataset1 do begin Edit; Fields.Fields.AsString:=Edit1.Text; Fields.Fields.AsString:=Edit1.Text; Fields.Fields.AsString:=Edit1.Text; end; {!!!!НЕ ПРОХОДИТ!!!!} Form1.ADODataset1.Refresh; Close; end Пытался привязать Form1.ADODataset1.Refresh к OnAction Form1 - не проходит. Причем если отрыть другую форму проги и перейти в Form1 - получается. Не понимаю что не так... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 15:26 |
|
||
|
обновление DataSet другой формы
|
|||
|---|---|---|---|
|
#18+
... Set.Edit; {Set.Insert;} try Set.Fields[0].As... := ... ... {!!!}Set.Post{!!!}; except if Set.State <> dsBrowse then Set.Cancel; raise; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 07:12 |
|
||
|
обновление DataSet другой формы
|
|||
|---|---|---|---|
|
#18+
Я дико извиняюсь, но в приведенном мною коде ошибка. Я делал Post: procedure Form2.Button1Click(Sender: TObject); begin with ADODataset1 do begin Edit; Fields.Fields.AsString:=Edit1.Text; Fields.Fields.AsString:=Edit1.Text; Fields.Fields.AsString:=Edit1.Text; Post end; {!!!!НЕ ПРОХОДИТ!!!!} Form1.ADODataset1.Refresh; Close; end Проблема в том, что результаты Form2 должны моментально отображаться в Form1.Grid, а он отобаражется только при повторном открытии формы, что не естьть good. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 09:36 |
|
||
|
обновление DataSet другой формы
|
|||
|---|---|---|---|
|
#18+
Делайте Requery. Refresh не перечитывает информацию из базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 09:57 |
|
||
|
обновление DataSet другой формы
|
|||
|---|---|---|---|
|
#18+
Либо просто Close; Open; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 10:04 |
|
||
|
обновление DataSet другой формы
|
|||
|---|---|---|---|
|
#18+
Нда... И опять я не все рассказал. На все эти мои пырханься вылетает: Project apteka.exe raised exception class EAccessViolation with message 'Access violation at address 004A9D78 in module 'apteka.exe'. Read of address 000002F8'. Process stopped. Use Step or Run to continue. Т.е. на попытку refresh, close, request и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 11:03 |
|
||
|
обновление DataSet другой формы
|
|||
|---|---|---|---|
|
#18+
Ну, а посмотреть состояние этого Form1.ADODataset1 перед выполнением дефективного оператора ? Не nil, правильные Name, State ? Проблема-то в чем ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 11:35 |
|
||
|
обновление DataSet другой формы
|
|||
|---|---|---|---|
|
#18+
У меня не получается обратиться вообще свойствам Form1.ADODataset (да и остальных компонент) из Form2, хотя в uses ссылка на модуль Fom1 есть, причем не важно в interface или в implementation. Может это потому что Form1 owner для Fom2. А если так, то как с этим бороться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 13:08 |
|
||
|
обновление DataSet другой формы
|
|||
|---|---|---|---|
|
#18+
Ну если нет явно объявленного экземпляра формы Form1, обратись как TForm1(Form2.Owner).ADODataset1 или там TForm1(Form2.Parent).ADODataset1. Конечно тяжело решать задачу, если даже не иметь сведений для отладки :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 14:00 |
|
||
|
обновление DataSet другой формы
|
|||
|---|---|---|---|
|
#18+
Результат тот же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 15:00 |
|
||
|
обновление DataSet другой формы
|
|||
|---|---|---|---|
|
#18+
Ну, брось архив на мыло, гляну... Но боюсь, что Вам, батенька, с первых шагов надо начинать - учить Паскаль и вообще, как программу отлаживают... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 17:38 |
|
||
|
обновление DataSet другой формы
|
|||
|---|---|---|---|
|
#18+
намылил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 18:54 |
|
||
|
обновление DataSet другой формы
|
|||
|---|---|---|---|
|
#18+
Решил обсуждать дальше на форуме - может еще кто-то из новичков для себя что-то выяснит, так как проблемы частые IMHO. Смотрим - реально есть : Форма 1 (Tgood) - создается из главной формы : Код: plaintext 1. 2. 3. 4. 5. Для добавления записи в датасет кнопка "Добавить": Код: plaintext 1. 2. 3. 4. 5. 6. Форма 2 (Tnewgood)- содержит датасет ADODataset4 и поля для редактирования одной записи, обработка кнопки "Сохранить": Код: plaintext 1. 2. 3. 4. 5. 6. 1) Tgood создается динамически, следовательно, находясь в отладке формы Tnewgood всякие good.Name или Tgood.Name в окне Watch набирать бесполезно - таких переменных нет. Из Tnewgood Tgood может быть доступен только через главную форму : TMainForm.MDIChildren[..], надо еще искать по имени или по типу класса, т.к. MDIChild форма может быть не одна. 2) Поскольку для открытия формы Tnewgood используется Show, после нее бесполезно ставить ADODataset1.Requery для отображения введенной записи в гриде, т.к. Tnewgood.Show вернет управление сразу, не дожидаясь действий в форме Tnewgood и обновление датасета будет вхолостую. Надо либо делать ShowModal, после обновлять грид Requery, либо в обработчике кнопки "Сохранить" Tnewgood.Button1Click делать Tgood(TMainForm.MDIChildren[..]).ADODataset1.Requery([]); 3) Надо отметить, что при невыставлении свойства формы Tnewgood.Parent := Tgood, форма Tnewgood может быть легко потеряна пользователем (клик на форме с гридом Tgood - и Tnewgood уже под ней). Дополнительное удобство, при установке Parent, можно обращаться к родительской форме так: Tgood(Parent).ADODataset1.Requery([]); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 09:46 |
|
||
|
обновление DataSet другой формы
|
|||
|---|---|---|---|
|
#18+
Далаю по второму пункту (по крайней мере как понял его): procedure Tnewgood.Button1Click(Sender: TObject); // Оставлены только строки по существу begin ... ADODataset4.Post; ADODataset4.Close; for i:=0 to Form1.MDIChildCount-1 do if Form1.MDIChildren .Name='good' then Tgood(Form1.MDIChildren).ADODataSet1.Refresh; Close; end; При первом редактировании результат ноль, при втором вижу результат первого. С Requery([]) еще интересней: с теми лючами с которыми оно вообще работает, при отладке по F7 - прокатывает, по нормальному никак?????? Это как? А третьему пункту, как это сделать: Tnewgood.Parent := Tgood ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 11:14 |
|
||
|
обновление DataSet другой формы
|
|||
|---|---|---|---|
|
#18+
Угу. Я тоже не сразу понял фишку. Надо, чтобы все датасеты работали через один Connection. Иначе проходит какое-то время между отображением данных, введенных в другой сессии. По третьему - именно так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 14:47 |
|
||
|
обновление DataSet другой формы
|
|||
|---|---|---|---|
|
#18+
ПОЛУЧИЛОСЬ!!!! Я над этой штукой маялся в полтора раза больше чем над всем кодом. Но не все... При редатировании все нормально, а при добавлении опять тоже самое. Я дико признателен, но если у тебя есть на этот счет предположения поделись пожалуйста. А на счет Tnewgood.Parent:=Tgood, то в каком месте это вставлять? Я попробовал на нопку или на newgood.Create он меня послал... Оно конечно только подтверждает твои слова о Паскале, но не сочти за труд... Еще раз БОЛЬШОЕ СПАСИБО!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 15:54 |
|
||
|
обновление DataSet другой формы
|
|||
|---|---|---|---|
|
#18+
Виноват, что касается добавления, дело было в Refresh... С Requery все работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 16:35 |
|
||
|
обновление DataSet другой формы
|
|||
|---|---|---|---|
|
#18+
Tnewgood.Parent:=Tgood лучше всего ставить сразу после Tnewgood.Create Но, разумеется, это должно выглядеть так : Tnewgood.Parent:=Tgood(TMainForm.MDIChildren[..]); Подумай, почему :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2003, 06:36 |
|
||
|
обновление DataSet другой формы
|
|||
|---|---|---|---|
|
#18+
Все таки так у меня не получается. Получается: NewF.Parent:=Tgood(MainFom.MDIChild[]); Но я не заметил каких либо преимуществ родительства Tgood... При щелчке на отце - дитя все равно пропадает, а закрывались они и так вместе, после newF:=Tnewgood.Create( self ) Потому как тема с Dataset решена, предлагаю перенести обсуждение на тему "Для чего нужен отец?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2003, 08:52 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=32264719&tid=2116858]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 397ms |

| 0 / 0 |
