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

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

обновление dbcontrols [D6, sybase]


Страницы:   1 2

PavelB ©   (2002-06-06 09:16:00) 

Добое время суток уважаемые мастера
у меня возникла проблема суть ее в следующем :
я использую базу данных sybase и bde в delphi 6
у меня две таблицы связанные по типу master-detail в детальной таблице хранится некая цифровая информация а в master таблице сумма этой детатьной информации
при удалении записи из детальной в событии afterdelete таблицы выполняестя запрос типа select sum() и его результаты записываются в поле главной таблицы но контролы связанные с данным полем не обновляются, (обновление происходит только при получении фокуса) немогу понять почему.
Может подскажите заранее благодарен


pavelB   (2002-06-06 12:34:00) [1]

> AlexSV
Спасибо я нашел их в ftp.usaaa.ru/pub/Develop/Delphi/$updates/D6_upd1_ent.exe


AlexSV   (2002-06-06 11:20:00) [2]

> pavelB

Увы, ссылку потерял, даже не помню, где на нее упал,
но есть D6_upd1_ent (29.5 М). По мылу можем договориться как и куда.


Lusha   (2002-06-06 11:17:00) [3]

>pavelB (06.06.02 10:49)
Пожалста...
1. Убрать подсчет суммы в SELECT она и так известна Q1F1 - SMSTAGE разумеется определять его надо на BeforeDelete...
2. ApplyUpdates подвесить на отдельную клавишу для сохранения...
И разумеется этот q2.ApplyUpdates должен быть внутри блока StartTransaction .. Commit наряду с вызовом скрипта типа
UPDATE TABLE1 SET F1 = (SELECT SUM(SMSTAGE) FROM DOGSTAGE WHERE IDD = :param)... Правда придется переоткрывать master таблицу, но иначе нельзя, т.к пользователей может быть много...

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


pavelB   (2002-06-06 11:16:00) [4]

> AlexSV
нет если можно ссылку где можно скачать


AlexSV   (2002-06-06 11:14:00) [5]

> pavelB
Я имею ввиду Update1 на Delphi6.
повторю:
так как в update исправлен глюк в TFieldDataLink


pavelB   (2002-06-06 11:09:00) [6]

> AlexSV

вы имеете ввиду ApplayUpdates если его то не стоит т.к. сохранение идет при нажатии пользователем кнопки


AlexSV   (2002-06-06 11:03:00) [7]

Стоит ли update? Вопрос не праздный, так как в update исправлен глюк в TFieldDataLink, что и может являться причиной данной проблемы. Это присутствует у Delphi 5 и 6.
Либо править dbctrls.pas, подбрасывать в проект и забыть про эту проблему.


pavelB   (2002-06-06 10:49:00) [8]

> Lusha ©

ваши предложения


Lusha   (2002-06-06 10:43:00) [9]

>pavelB (06.06.02 10:28)
Нда-а-ас... Криминального ничего, вроде, нет... Я бы на Вашем месте использовал не Value, а, например, AsFloat... и уж точно не писал бы для сохранения изменений обработчик AfterDelete... Вы используете CachedUpdates - это мощнейшее средство и у него есть свои обработчики...

P.S. Код не оптимален и не корректен для использования в многопользовательском режиме...


pavelB   (2002-06-06 10:31:00) [10]

Lord Warlock ©
можно подробнее


pavelB   (2002-06-06 10:28:00) [11]

q2 - детальная таблица

procedure TdmAC.quStagesAfterDelete(DataSet: TDataSet);
begin
dmAC.ApplayUpdates([q2]);
q3.Close;
q3.SQL.Clear;
q3.SQL.Add("SELECT SUM(SMSTAGE) FROM dbo.DOGSTAGE WHERE IDD = "+ quDocListID.AsString);
q3.Prepare;
q3.Open;
q1.Edit;
q1F1.Value := q3.Fields[0].Value;
q1.Post;
ShowMessage(q1.AsString);// ввылено для теста здесь выводится все правильно
end;


Lusha   (2002-06-06 10:18:00) [12]

Может все таки покажете код... Все обработчики злополучной Q1... И процедуру занесения значения в деталях... Кстати, под Delphi6 никаких update-ов не выходило? :)


bpv   (2002-06-06 10:13:00) [13]

> Lusha ©
тогда почему после получения фокуса значения обновляются


WellSlava   (2002-06-06 10:11:00) [14]

Делается так:
quModify.SQL.Text := "...
quQuery.Close; - запрос с отображением данных
quModify.ExecSQL;
quQuery.Open;
quQuery.Locate(...); - если надо найти текущую запись


Lord Warlock   (2002-06-06 10:09:00) [15]


> bpv (06.06.02 10:04)


Ну тогда используй метод поля GetData


Lusha   (2002-06-06 10:08:00) [16]

>bpv (06.06.02 10:04)
Контрол отображает то значение, которое в настоящий момент находится в наборе данных DataSet... Раз значение не отображается, значит его не прописали в DataSet... Только и всего... И ничего другого... Хотя, нет... Можно еще сказать, что Borland лохи и нормальных Data Controls писать не могут.. :)


bpv   (2002-06-06 10:04:00) [17]

послушайте вы все говорите не о том данные в базу записываются причем правильно но не отображаются в контролах


Lord Warlock   (2002-06-06 10:03:00) [18]


> bpv (06.06.02 09:56)

обычно с CachedUpdates используют TUpdateSql


bpv   (2002-06-06 09:56:00) [19]

используется CachedUpdates


Lusha   (2002-06-06 09:54:00) [20]

>pavelB (06.06.02 09:44)
Q1.RequestLive = True или используется CachedUpdates? Не вижу Q1.Post...


Страницы:   1 2

Наверх

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