Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.01;
Скачать: CL | DM;

Вниз

обновление 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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.014 c
14-1184
Sejatel
2002-05-27 04:08
2002.07.01
Не


4-1262
Nickyboy
2002-04-30 17:52
2002.07.01
ПЛЗ, дайте примерчик нажатия кнопки, я уже больше не могу:)))


1-1072
Sniffer
2002-06-17 11:53
2002.07.01
BitBtn


1-1092
Tornado
2002-06-19 13:14
2002.07.01
Помогите, плиз


3-913
shulc
2002-06-04 19:17
2002.07.01
Поле типа CHAR, для тех, кто работает с ADS