![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
обновление dbcontrols [D6, sybase]
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...