Конференция "Базы" » ClientDataSet [D7, FB2.1]
 
  • VikOss © (28.12.12 10:10) [0]
    Есть два ClientDataSet-а , в связке мастер-деталь по ключевому полю. Всё работает красиво. Но! Только после "выхода" базы на "проектную мощность", выплыла одна неприятная вещь: вне зависимости от настроек провайдера и самого датасета, в таблицу деталей загружаются ВСЕ записи ! Чем это чревато, думаю объяснять не надо. Об этом написано "мелким шрифтом" в некоторых статьях, но вот как это обойти, авторы наверное сами не знают. На "буржуйских" ресурсах что-то проскакивало, но непонятное решение, что-то с параметрами связанное. Проблема ещё в том, что работать нужно именно с кэшем. Вложенный датасет тоже не подходит - при работе необходимо иногда просматривать все записи подчинённой таблицы.
    Кто сталкивался и нашёл решение ?
  • Сергей М. © (28.12.12 10:31) [1]

    > Всё работает красиво..Но..в таблицу деталей загружаются ВСЕ записи


    И это называется "работает красиво" ? Считай что вообще не работает, о какой уж тут "красоте" можно заявлять..


    > что-то с параметрами связанное


    Практически 100%-но с ними.
    Но вряд ли это связано с "глюками" самих компонентов - наверняка это ошибка в твоей прграмме.
  • VikOss © (28.12.12 11:06) [2]
    Нет никакой ошибки. Этот "глюк" даже задокументирован, я же писал.
  • Сергей М. © (28.12.12 11:07) [3]

    > Этот "глюк" даже задокументирован


    Так приведи ссылку на документ, если задокументирован ..
  • VikOss © (28.12.12 11:08) [4]
    Если вы хотите просто установить связи “один-ко-многим”, и вас не интересует модель “портфеля”, то для подчиненной таблицы присвойте значение PacketRecords 0, а для главной - -1. Эти установки вызывают все записи из главной таблицы и только метаданные - для подчиненной. После этого Delphi вызовет TClientDataSet.AppendData для получения только тех подчиненных записей, которые нужны при просмотре одной отдельной главной записи. Это удобно во многих случаях, но не то, что вам нужно, если вы используете модель “портфеля”. Вместо этого, при использовании модели “портфеля”, обычно нужно будет присваивать PacketRecords значение -1. При этом все останется по-прежнему и, кроме того, полный набор подчиненных данных на сервере будет доступен все время. Очевидно, что это непрактично при работе с очень большими наборами данных.

    Это просто к примеру, источник -http://www.interface.ru/magazine/tcs/Archive/298/midas2.htm
  • sniknik © (28.12.12 11:17) [5]
    > и вас не интересует модель “портфеля”
    а если интересует? то не будет ли все наоборот?
  • VikOss © (28.12.12 11:19) [6]
    Вот именно что интересует. Именно она и реализована. А что наоборот?
  • sniknik © (28.12.12 11:19) [7]
    > Это просто к примеру, источник -http://www.interface.ru/magazine/tcs/Archive/298/midas2.htm
    Для работы с моделью “портфеля” обычно следует работать с целым набором данных. Это значит, что вам следует присвоить PacketRecords значение -1. (Разумеется, запрос сервера сможет отфильтровать для вас большую часть таблицы, но присвоить PacketRecords -1 все равно нужно, чтобы при запросе получить все данные.)

    как вижу, спецом делают.
  • sniknik © (28.12.12 11:21) [8]
    > А что наоборот?
    ну, если есть модель со всеми записями, и описание как этого добиться, то логично предположить что есть альтернатива, с частичными поучениями записей.
  • Сергей М. © (28.12.12 11:22) [9]
    Что-то я не вижу там ничего именно про какой-то "глюк" ..
  • sniknik © (28.12.12 11:22) [10]
    > поучениями
    получениями...
    корректор исправил "ошибку".
  • VikOss © (28.12.12 11:25) [11]
    Частично записи получаются в запросе из "мастера", тут никаких проблем, получается только то что запросили, НО ! Мастер тащит не связанные по ключу записи из подчиненного, А ВСЕ ! Вот это проблема.
  • VikOss © (28.12.12 11:28) [12]

    > Сергей М. ©   (28.12.12 11:22) [9]
    >
    > Что-то я не вижу там ничего именно про какой-то "глюк" .
    > .

    Это скорее недоработка чем глюк. Просто логично было бы, чтобы в детали поступали данные только по ключу из мастера ? Это как раз реализовано во вложенном датасете, так что же помешало при обычной реализации сделать?
  • sniknik © (28.12.12 11:28) [13]
    > Мастер тащит не связанные по ключу записи из подчиненного, А ВСЕ ! Вот это проблема.
    "криво" настроен "мастер детайл"? на табличное соответствие... в ADO к примеру есть 2 варианта, по фильтру и по запросу, как работают можно догадаться... а как настроил ты?
  • sniknik © (28.12.12 11:30) [14]
    > Просто логично было бы, чтобы в детали поступали данные только по ключу из мастера ?
    логично. и это (настройка/программирование) делается программистом.
  • VikOss © (28.12.12 11:30) [15]

    > > А что наоборот?
    > ну, если есть модель со всеми записями, и описание как этого
    > добиться, то логично предположить что есть альтернатива,
    >  с частичными поучениями записей.

    Вот эту альтернативу я и ищу...
  • sniknik © (28.12.12 11:32) [16]
    +
    не помню точно (обычно с клиентдатасетом не работаю) но там есть параметр которым регламентируется прохождение запросов/параметров... смутно помню.
  • VikOss © (28.12.12 11:34) [17]

    > > Просто логично было бы, чтобы в детали поступали данные
    > только по ключу из мастера ?
    > логично. и это (настройка/программирование) делается программистом.
    >

    :-) Конечно логично. Попробуйте настроить . 1 ClientDataset -мастер, второй, соответственно - деталь. Связь - по ключу, стандартно. В мастере сделайте выборку, неважно - селект траляля вере то то. И посмотрите. В мастере как положено ваша выборка, ок. А вот в деталях - ВСЕЕЕЕ!
  • sniknik © (28.12.12 11:42) [18]
    > Попробуйте настроить . 1 ClientDataset -мастер, второй, соответственно - деталь. Связь - по ключу, стандартно.
    вопрос один: а нафига? оно мне зачем?
    вопрос два: есть 2 варианта (писал выше) какой из них "стандартно"?
  • VikOss © (28.12.12 11:42) [19]

    > +
    > не помню точно (обычно с клиентдатасетом не работаю) но
    > там есть параметр которым регламентируется прохождение запросов/параметров.
    > .. смутно помню.
    >

    Видел на "буржуйском" ресурсе, ссылку к сожалению потерял, но там совершенно непонятное объяснение, х.з. может для меня, поэтому и обратился сюда, мож кто разобрался.
 
Конференция "Базы" » ClientDataSet [D7, FB2.1]
Есть новые Нет новых   [134430   +2][b:0][p:0.001]