Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / обновление DataSet другой формы / 20 сообщений из 20, страница 1 из 1
14.09.2003, 15:26
    #32264490
ded_matvey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление DataSet другой формы
Имеется база 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 -
получается.
Не понимаю что не так...
...
Рейтинг: 0 / 0
15.09.2003, 07:12
    #32264629
zDIV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление DataSet другой формы
...
Set.Edit; {Set.Insert;}
try
Set.Fields[0].As... := ...
...
{!!!}Set.Post{!!!};
except
if Set.State <> dsBrowse then Set.Cancel;
raise;
end;
...
Рейтинг: 0 / 0
15.09.2003, 09:36
    #32264719
ded_matvey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление DataSet другой формы
Я дико извиняюсь, но в приведенном мною коде ошибка. Я делал 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.
...
Рейтинг: 0 / 0
15.09.2003, 09:57
    #32264739
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление DataSet другой формы
Делайте Requery. Refresh не перечитывает информацию из базы.
...
Рейтинг: 0 / 0
15.09.2003, 10:04
    #32264752
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление DataSet другой формы
Либо просто Close; Open;
...
Рейтинг: 0 / 0
15.09.2003, 11:03
    #32264821
ded_matvey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление DataSet другой формы
Нда...
И опять я не все рассказал.
На все эти мои пырханься вылетает:

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 и т.д.
...
Рейтинг: 0 / 0
15.09.2003, 11:35
    #32264858
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление DataSet другой формы
Ну, а посмотреть состояние этого Form1.ADODataset1 перед выполнением дефективного оператора ? Не nil, правильные Name, State ? Проблема-то в чем ?
...
Рейтинг: 0 / 0
15.09.2003, 13:08
    #32265014
ded_matvey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление DataSet другой формы
У меня не получается обратиться вообще свойствам Form1.ADODataset (да и остальных компонент) из Form2, хотя в uses ссылка на модуль Fom1 есть, причем не важно в interface или в implementation.
Может это потому что Form1 owner для Fom2.
А если так, то как с этим бороться?
...
Рейтинг: 0 / 0
15.09.2003, 14:00
    #32265097
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление DataSet другой формы
Ну если нет явно объявленного экземпляра формы Form1, обратись как TForm1(Form2.Owner).ADODataset1 или там TForm1(Form2.Parent).ADODataset1.
Конечно тяжело решать задачу, если даже не иметь сведений для отладки :-)
...
Рейтинг: 0 / 0
15.09.2003, 15:00
    #32265175
ded_matvey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление DataSet другой формы
Результат тот же
...
Рейтинг: 0 / 0
15.09.2003, 17:38
    #32265459
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление DataSet другой формы
Ну, брось архив на мыло, гляну...
Но боюсь, что Вам, батенька, с первых шагов надо начинать - учить Паскаль и вообще, как программу отлаживают...
...
Рейтинг: 0 / 0
15.09.2003, 18:54
    #32265554
ded_matvey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление DataSet другой формы
намылил
...
Рейтинг: 0 / 0
16.09.2003, 09:46
    #32265916
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление DataSet другой формы
Решил обсуждать дальше на форуме - может еще кто-то из новичков для себя что-то выяснит, так как проблемы частые IMHO. Смотрим - реально есть :
Форма 1 (Tgood) - создается из главной формы :
Код: plaintext
1.
2.
3.
4.
5.
procedure TMainForm.N8Click(Sender: TObject); // название главной формы скорректировано в целях упрощения
var newF : Tgood;
begin
  newF:=Tgood.Create(Application);
  newF.Show;
end;

Для добавления записи в датасет кнопка "Добавить":
Код: plaintext
1.
2.
3.
4.
5.
6.
procedure Tgood.Button1Click(Sender: TObject); // Оставлены только строки по существу
var newF : Tnewgood;
begin
...
  newF:=Tnewgood.Create(self);
  newF.Show;
end;

Форма 2 (Tnewgood)- содержит датасет ADODataset4 и поля для редактирования одной записи, обработка кнопки "Сохранить":
Код: plaintext
1.
2.
3.
4.
5.
6.
procedure Tnewgood.Button1Click(Sender: TObject); // Оставлены только строки по существу
begin
...
      ADODataset4.Post;
      ADODataset4.Close;
      Close;
end;


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([]);
...
Рейтинг: 0 / 0
16.09.2003, 11:14
    #32266095
ded_matvey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление DataSet другой формы
Далаю по второму пункту (по крайней мере как понял его):

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 ?
...
Рейтинг: 0 / 0
16.09.2003, 14:47
    #32266583
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление DataSet другой формы
Угу. Я тоже не сразу понял фишку. Надо, чтобы все датасеты работали через один Connection. Иначе проходит какое-то время между отображением данных, введенных в другой сессии.
По третьему - именно так.
...
Рейтинг: 0 / 0
16.09.2003, 15:54
    #32266723
ded_matvey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление DataSet другой формы
ПОЛУЧИЛОСЬ!!!!
Я над этой штукой маялся в полтора раза больше чем над всем кодом.
Но не все... При редатировании все нормально, а при добавлении опять тоже самое.
Я дико признателен, но если у тебя есть на этот счет предположения поделись пожалуйста.
А на счет Tnewgood.Parent:=Tgood, то в каком месте это вставлять?
Я попробовал на нопку или на newgood.Create он меня послал... Оно конечно только подтверждает твои слова о Паскале, но не сочти за труд...
Еще раз БОЛЬШОЕ СПАСИБО!!!
...
Рейтинг: 0 / 0
16.09.2003, 16:35
    #32266808
ded_matvey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление DataSet другой формы
Виноват, что касается добавления, дело было в Refresh...
С Requery все работает.
...
Рейтинг: 0 / 0
17.09.2003, 06:36
    #32267160
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление DataSet другой формы
Tnewgood.Parent:=Tgood лучше всего ставить сразу после Tnewgood.Create
Но, разумеется, это должно выглядеть так :
Tnewgood.Parent:=Tgood(TMainForm.MDIChildren[..]);
Подумай, почему :-)
...
Рейтинг: 0 / 0
17.09.2003, 08:52
    #32267202
ded_matvey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление DataSet другой формы
Все таки так у меня не получается.
Получается:

NewF.Parent:=Tgood(MainFom.MDIChild[]);

Но я не заметил каких либо преимуществ родительства Tgood...
При щелчке на отце - дитя все равно пропадает, а закрывались они и так вместе, после

newF:=Tnewgood.Create( self )

Потому как тема с Dataset решена, предлагаю перенести обсуждение на тему "Для чего нужен отец?"
...
Рейтинг: 0 / 0
17.09.2003, 13:16
    #32267683
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление DataSet другой формы
Отец (Parent) не нужен. Извиняюсь, запарился.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / обновление DataSet другой формы / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]