Форум: "Базы";
Текущий архив: 2002.07.01;
Скачать: [xml.tar.bz2];
Внизобновление dbcontrols Найти похожие ветки
← →
PavelB (2002-06-06 09:16) [0]Добое время суток уважаемые мастера
у меня возникла проблема суть ее в следующем :
я использую базу данных sybase и bde в delphi 6
у меня две таблицы связанные по типу master-detail в детальной таблице хранится некая цифровая информация а в master таблице сумма этой детатьной информации
при удалении записи из детальной в событии afterdelete таблицы выполняестя запрос типа select sum() и его результаты записываются в поле главной таблицы но контролы связанные с данным полем не обновляются, (обновление происходит только при получении фокуса) немогу понять почему.
Может подскажите заранее благодарен
← →
Lord Warlock (2002-06-06 09:24) [1]Table.Refresh или Close, Open после запроса
← →
PavelB (2002-06-06 09:27) [2]таблица довольно большая и исользуется ТQuery поэтому ни Refresh ни Close, Open не поддходит
← →
Johnmen (2002-06-06 09:31) [3]Тогда тебе нечем помочь........
← →
Lord Warlock (2002-06-06 09:36) [4]
> PavelB (06.06.02 09:27)
деело в том, что данные отображает один комронент, а изменения вностит другой. Первый об этом ничего не знает.
Можешь попробовать компонент UpdateSql в детальной таблице, впихай теда свой sql-код
← →
Lusha (2002-06-06 09:37) [5]>PavelB (06.06.02 09:16)
Попробуйте изменять значения поля непосредственно в том DataSet, к которому эти контролы подцеплены... И все дела...
← →
Lord Warlock (2002-06-06 09:39) [6]
> Lusha © (06.06.02 09:37)
неплохой вариант
← →
pavelB (2002-06-06 09:44) [7]Lusha ©
я в принципе так и делаю
к Tdbedit подключено поле F1 набора Q1:TQuare я и пишу
Q1F1.value := q3.field[0].value где q3.field[0] - сумма
a что самое интересное в afterpost прописан тотже код и это работает правильно
← →
Lusha (2002-06-06 09:54) [8]>pavelB (06.06.02 09:44)
Q1.RequestLive = True или используется CachedUpdates? Не вижу Q1.Post...
← →
bpv (2002-06-06 09:56) [9]используется CachedUpdates
← →
Lord Warlock (2002-06-06 10:03) [10]
> bpv (06.06.02 09:56)
обычно с CachedUpdates используют TUpdateSql
← →
bpv (2002-06-06 10:04) [11]послушайте вы все говорите не о том данные в базу записываются причем правильно но не отображаются в контролах
← →
Lusha (2002-06-06 10:08) [12]>bpv (06.06.02 10:04)
Контрол отображает то значение, которое в настоящий момент находится в наборе данных DataSet... Раз значение не отображается, значит его не прописали в DataSet... Только и всего... И ничего другого... Хотя, нет... Можно еще сказать, что Borland лохи и нормальных Data Controls писать не могут.. :)
← →
Lord Warlock (2002-06-06 10:09) [13]
> bpv (06.06.02 10:04)
Ну тогда используй метод поля GetData
← →
WellSlava (2002-06-06 10:11) [14]Делается так:
quModify.SQL.Text := "...
quQuery.Close; - запрос с отображением данных
quModify.ExecSQL;
quQuery.Open;
quQuery.Locate(...); - если надо найти текущую запись
← →
bpv (2002-06-06 10:13) [15]> Lusha ©
тогда почему после получения фокуса значения обновляются
← →
Lusha (2002-06-06 10:18) [16]Может все таки покажете код... Все обработчики злополучной Q1... И процедуру занесения значения в деталях... Кстати, под Delphi6 никаких update-ов не выходило? :)
← →
pavelB (2002-06-06 10:28) [17]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;
← →
pavelB (2002-06-06 10:31) [18]Lord Warlock ©
можно подробнее
← →
Lusha (2002-06-06 10:43) [19]>pavelB (06.06.02 10:28)
Нда-а-ас... Криминального ничего, вроде, нет... Я бы на Вашем месте использовал не Value, а, например, AsFloat... и уж точно не писал бы для сохранения изменений обработчик AfterDelete... Вы используете CachedUpdates - это мощнейшее средство и у него есть свои обработчики...
P.S. Код не оптимален и не корректен для использования в многопользовательском режиме...
← →
pavelB (2002-06-06 10:49) [20]> Lusha ©
ваши предложения
← →
AlexSV (2002-06-06 11:03) [21]Стоит ли update? Вопрос не праздный, так как в update исправлен глюк в TFieldDataLink, что и может являться причиной данной проблемы. Это присутствует у Delphi 5 и 6.
Либо править dbctrls.pas, подбрасывать в проект и забыть про эту проблему.
← →
pavelB (2002-06-06 11:09) [22]> AlexSV
вы имеете ввиду ApplayUpdates если его то не стоит т.к. сохранение идет при нажатии пользователем кнопки
← →
AlexSV (2002-06-06 11:14) [23]> pavelB
Я имею ввиду Update1 на Delphi6.
повторю:
так как в update исправлен глюк в TFieldDataLink
← →
pavelB (2002-06-06 11:16) [24]> AlexSV
нет если можно ссылку где можно скачать
← →
Lusha (2002-06-06 11:17) [25]>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 таблицу, но иначе нельзя, т.к пользователей может быть много...
Еще более красиво... Отказаться от поля суммы в мастер таблице... Нет ничего хуже, чем заниматься синхронизацией одних и тех же данных...
← →
AlexSV (2002-06-06 11:20) [26]> pavelB
Увы, ссылку потерял, даже не помню, где на нее упал,
но есть D6_upd1_ent (29.5 М). По мылу можем договориться как и куда.
← →
pavelB (2002-06-06 12:34) [27]> AlexSV
Спасибо я нашел их в ftp.usaaa.ru/pub/Develop/Delphi/$updates/D6_upd1_ent.exe
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.07.01;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.007 c