Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];

Вниз

Refresh TClientDataSet по Master-Detail связке   Найти похожие ветки 

 
Ega23 ©   (2006-01-31 17:56) [0]

Вкратце, ситуация такова.
Есть Мастер-запрос (TADOQuery->TDataSource). На него смотрит грид.
Есть Деталь-запрос. Причём нужно, чтобы в конечном итоге данные из Detail-запроса оказались в TCleintDataSet.
Делаю стандартную связку TADOQuery->TDataSetProvider->TClientDataSet->TDataSource.
Для деталь-запроса поле в поле DataSource прописываю TDataSouce из мастер-запроса. Всё пучком.
НО. При обновлении данных в деталь-запросе данные в TClientDataSet НЕ ОБНОВЛЯЮТСЯ (да и не должны за просто так).
Вопрос: как мне лучше обновить TClientDataSet?


 
Johnmen ©   (2006-01-31 18:00) [1]

Refresh ?


 
Ega23 ©   (2006-01-31 18:09) [2]


> Refresh ?


В том-то и дело, что нифига...  :-(
Я уже и Master-Detail заменил на вызов обработчика в MasterDataSource.OnDataChange:

procedure TGUIAccRolePropsFrame.dsAccRolesDataChange(Sender: TObject;
 Field: TField);
var
RoleID:Integer;
ss:String;
begin
 RoleID:=aqAccRoles.FieldByName("ObjID").AsInteger;
 ss:="exec  S_TAccessRole @ActNam=""ACCMETPL.SEL"","+
     " @RoleID="+ValX(RoleID);
 aqAllObjects.Close;
 aqAllObjects.SQL.Add(ss);
 aqAllObjects.Open;
 if not cdsAllObjects.Active then
   cdsAllObjects.Open
  else
   cdsAllObjects.Refresh;
end;

aqAccRoles:TADOQuery (Мастер-запрос)
aqAllObjects:TADOQuery (Detail-запрос)
cdsAllObjects:TClientDataSet


 
sniknik ©   (2006-01-31 18:14) [3]

> как мне лучше обновить TClientDataSet?
может лучше им вообще не пользоваться? при такой то связке в одном приложении.


 
Johnmen ©   (2006-01-31 18:18) [4]

>В том-то и дело, что нифига...  :-(

Т.е. TClientDataSet.Refresh нифига?


 
Ega23 ©   (2006-01-31 18:18) [5]


> Т.е. TClientDataSet.Refresh нифига?


Угу...


 
Johnmen ©   (2006-01-31 18:20) [6]

Интересная загогулина...:)


 
Johnmen ©   (2006-01-31 18:21) [7]

Close-Open?


 
Ega23 ©   (2006-01-31 18:21) [8]


> может лучше им вообще не пользоваться? при такой то связке
> в одном приложении.


Дело в том, что он мне возвращает достаточно большую "деревянную" выборку, где надо данные подготовить на клиенте, и потом одной пачкой отправить на сервер. Пользование чем-либо, типа TTable не катит, т.к. захватит таблицу в экслюзив. А свою структуру "наворачивать" - средства отображения НД не увидят изменений.


 
Ega23 ©   (2006-01-31 18:23) [9]


> Close-Open?


Да пробовал. И с разными выкрутасами, типа EmptyDataSet, и без них.
Не обновляется, скотина...


 
Johnmen ©   (2006-01-31 18:25) [10]

>Не обновляется, скотина...

Это о-о-очень странно... М.б. повнимательней код поковырять?


 
Ega23 ©   (2006-01-31 18:30) [11]


> Это о-о-очень странно... М.б. повнимательней код поковырять?


Так. Похоже это деталь-запрос не обновляется. Сейчас ещё помучаю...


 
Ega23 ©   (2006-01-31 18:41) [12]

ЕДРИТЬ ТВОИ ЛАПТИ!!!

aqAllObjects.Close;
aqAllObjects.SQL.Add(ss);
aqAllObjects.Open;


А SQL.Clear  конечно, Дядя Вася делать будет...

Тьфу, блин, на такой ерунде пол-дня потерял...


 
sniknik ©   (2006-01-31 19:57) [13]

> Дело в том, что он мне возвращает достаточно большую "деревянную" выборку, где надо данные подготовить на клиенте, и потом одной пачкой
> отправить на сервер. Пользование чем-либо, типа TTable не катит ...
"катит" пользоваться TADODataSet c установденным LockType в ltBatchOptimistic (батч апдейте режим - аналог клиентского датасета)
посмотри. всяко проще будет без "левых" длинных связок.


 
msguns ©   (2006-02-01 10:09) [14]

Мне тоже не понятно, зачем для "закачки" дерева и пакетного его обновления юзать CDS. Почему нельзя дерево держать в TList и пересоздавать его (все или начиная с соотв.узла) при перечитке детала.
А уже TList можно отображать в том же стрингриде (если, конечно, там не сотни тыщ записей) как таблицу


 
Ega23 ©   (2006-02-01 10:45) [15]


> Почему нельзя дерево держать в TList и пересоздавать его
> (все или начиная с соотв.узла) при перечитке детала.
> А уже TList можно отображать в том же стрингриде (если,
> конечно, там не сотни тыщ записей) как таблицу


Потому, что
a) На CDS смотрит DBTreeView
б) Нафига создавать дополнительные структуры, если уже готовые решения есть?
в) Ошибка была тривиальная. Всё уже прекрасно работает.


 
msguns ©   (2006-02-01 11:01) [16]

>Ega23 ©   (01.02.06 10:45) [15]

ok



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.042 c
2-1142336458
Fenix
2006-03-14 14:40
2006.03.26
TreeView.


2-1142067307
dabreezy
2006-03-11 11:55
2006.03.26
Как правильно запускать несколько потоков?


2-1142238022
Arazel
2006-03-13 11:20
2006.03.26
Отучить систему от Internet(a)


9-1126594429
WondeRu
2005-09-13 10:53
2006.03.26
OpenGL. Вывод одновременно растрового и векторного шрифтов. Как?


2-1141894640
nap<>
2006-03-09 11:57
2006.03.26
Про формы :)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский