Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-1001
KIR
2002-06-20 12:53
2002.07.01
Сохранение типа TString и TExtended в один файл


1-955
аак
2002-06-19 14:07
2002.07.01
Как скопиравть папку со всем содержимым?


1-1067
Rival
2002-06-18 23:59
2002.07.01
Помогите плз...


1-975
tovSuhov
2002-06-20 10:19
2002.07.01
Люди! Как юзать Splitter?


14-1176
VID
2002-05-30 18:40
2002.07.01
Давайте по-быстрому обсудим эту тему





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский