Конференция "Базы" » 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]

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

    Видел на "буржуйском" ресурсе, ссылку к сожалению потерял, но там совершенно непонятное объяснение, х.з. может для меня, поэтому и обратился сюда, мож кто разобрался.
  • VikOss © (28.12.12 11:45) [20]

    > > Попробуйте настроить . 1 ClientDataset -мастер, второй,
    >  соответственно - деталь. Связь - по ключу, стандартно.
    > вопрос один: а нафига? оно мне зачем?
    > вопрос два: есть 2 варианта (писал выше) какой из них "стандартно"?
    >

    ??? Не понял немного. Что значит зачем? Что бы не вводить доп. признаков для фильтрации подчинённого, мастер итак знает какие детали нужны, да вот только не работает как надо.
  • sniknik © (28.12.12 11:46) [21]
    > мож кто разобрался.
    с ЧЕМ? проблема возможно у тебя только в голове. где инфа как ТЫ делаешь?
    какой у тебя запрос в "детали"? в мастере?
  • VikOss © (28.12.12 11:48) [22]

    > > вопрос два: есть 2 варианта (писал выше) какой из них
    > "стандартно"?

    Пользуется IB, связка настраивается в самих ClientDataSet.
  • VikOss © (28.12.12 11:49) [23]

    > с ЧЕМ? проблема возможно у тебя только в голове. где инфа
    > как ТЫ делаешь?
    > какой у тебя запрос в "детали"? в мастере?

    Вы невнимательно прочитали?
  • sniknik © (28.12.12 11:49) [24]
    > Что значит зачем?
    зачем, значит, зачем. какой смысл мне делать проект, писать что-то свое чтобы убедится что у не работает у тебя? а если у меня заработает? ну вот давай проверим как будто я сделал, и говорю "все ок сделал стандартно, проблемы нет!". и?
  • sniknik © (28.12.12 11:50) [25]
    > Вы невнимательно прочитали?
    а ты?
  • VikOss © (28.12.12 11:51) [26]

    > с ЧЕМ? проблема возможно у тебя только в голове. где инфа
    > как ТЫ делаешь?
    > какой у тебя запрос в "детали"? в мастере?

    ClientDataset -мастер, второй, соответственно - деталь. Связь - по ключу, стандартно. В мастере сделайте выборку, неважно - селект траляля вере то то. И посмотрите. В мастере как положено ваша выборка, ок. А вот в деталях - ВСЕЕЕЕ! (Разумеется отображаться будут только привязанные к мастеру данные, просто отключите связь, да и по размеру выкачанных данных видно будет сразу)
  • VikOss © (28.12.12 11:55) [27]

    > зачем, значит, зачем. какой смысл мне делать проект, писать
    > что-то свое чтобы убедится что у не работает у тебя? а если
    > у меня заработает? ну вот давай проверим как будто я сделал,
    >  и говорю "все ок сделал стандартно, проблемы нет!". и?

    Согласен, тогда чем же вы помочь хотели? Проблему я уже тут расписал подробнее некуда. Запросы в мастере и деталях не имеют значения, ибо проблема НЕ В НИХ. Проблема, ещё раз, в том, что мастер тянет ВСЕ данные из подчинённой, а не только привязанные по ключу.
  • Сергей М. © (28.12.12 11:58) [28]

    > В мастере сделайте выборку, неважно - селект траляля вере
    > то то


    Какой может быть селект для уже полученных и находящихся в локальном кеше данных ?


    > А вот в деталях - ВСЕЕЕЕ


    Значит по каким-то причинам подчиненный CDS у тебя либо

    - не получает от главного CDS значение вторичного ключа для фильтрации кешированного НД
    - не находит/не использует требуемый для фильтрации индекс
  • MsGuns © (28.12.12 12:01) [29]
    Два вопроса:
    1. Чем вызвано использование именно TClientDataSet, а не, допустим, TADODataSet ? Не есть ли это выдергивание гвоздей из доски сенокосилкой ?
    2. Если "глюк" "фильтрации" мастер-детал в кишках VCL, то что мешает организовать правильную подкачку деталей ручками (по AfterScroll например) вместо того чтобы упорно трясти грушу ?
  • Сергей М. © (28.12.12 12:05) [30]

    > по AfterScroll например


    ..что есть самое простое решение: получил текущее значение мастер-ключа и тут же отфильтровал подчиненный набор по соответствующему вторичному ключу
  • VikOss © (28.12.12 12:06) [31]

    > > В мастере сделайте выборку, неважно - селект траляля вере
    > > то то
    >
    >
    > Какой может быть селект для уже полученных и находящихся
    > в локальном кеше данных ?
    >
    >
    > > А вот в деталях - ВСЕЕЕЕ
    >
    >
    > Значит по каким-то причинам подчиненный CDS у тебя либо
    >
    > - не получает от главного CDS значение вторичного ключа
    > для фильтрации кешированного НД
    > - не находит/не использует требуемый для фильтрации индекс

    1. Селект - это и есть самое первое получение записей в кэш на клиента. С ним проблем нет. Сказал что надо - то и пришло.
    2. тут и есть проблема, что он там не получает и почему... связь мастер-деталь работает правильно, просто набор данных в кэш подчинённого заливается ЦЕЛИКОМ, игнорируя все связи...
  • VikOss © (28.12.12 12:11) [32]

    > Два вопроса:
    > 1. Чем вызвано использование именно TClientDataSet, а не,
    >  допустим, TADODataSet ? Не есть ли это выдергивание гвоздей
    > из доски сенокосилкой ?
    > 2. Если "глюк" "фильтрации" мастер-детал в кишках VCL, то
    > что мешает организовать правильную подкачку деталей ручками
    > (по AfterScroll например) вместо того чтобы упорно трясти
    > грушу ?
    >

    1. Не понял смысла. зачем мне АДО, он что, лучше? Проект на IB + FB, устраивает полностью, без привязки к АДО.
    2. Отключить связку, закачать детали, включить? Возможно, но думал что стандартными методами есть решение.
  • Сергей М. © (28.12.12 12:13) [33]

    > что он там не получает и почему


    Ну так выясни состав индексов и текущий индекс в подчиненном CDS сразу после позиционирования мастер-CDS на записи, например, в событии AfterScroll ..
  • VikOss © (28.12.12 12:14) [34]

    > ..что есть самое простое решение: получил текущее значение
    > мастер-ключа и тут же отфильтровал подчиненный набор по
    > соответствующему вторичному ключу

    А не многовато запросов на сервер будет?
  • VikOss © (28.12.12 12:19) [35]

    > Ну так выясни состав индексов и текущий индекс в подчиненном
    > CDS сразу после позиционирования мастер-CDS на записи, например,
    >  в событии AfterScroll ..

    Вы не поняли - всё он правильно позиционирует. Проблема именно при "закачке" данных с сервера. Если кто не работал с ClientDataSet-ом : Провайдер мастера сам формирует необходимый запрос на получение данных с подчинённого, там и настройки все есть. Только пофигу это всё, работает только на вложенных датасетах :-(
  • MsGuns © (28.12.12 12:25) [36]
    >VikOss ©   (28.12.12 12:11) [32]
    >1. Не понял смысла. зачем мне АДО, он что, лучше? Проект на IB + FB, устраивает полностью, без привязки к АДО.

    Бегло прочитал, не обратил внимание на интербэйз. Ну так замените на TIBDataSet/TFIBPlusDataSet

    >2. Отключить связку, закачать детали, включить? Возможно, но думал что стандартными методами есть решение.

    Оно есть, но у Вас почему-то глючит, очевидно из-за "плавающей" ошибки. Можно долго искать этот глюк, копаясь в особенности реализации связи мастер-детал в VCL например, а можно выкинуть весь этот сбоящий снегоход и просто встать на лыжи.
    Кстати, а почему Вы работая с FB,игнорите фибплас ?
  • sniknik © (28.12.12 12:26) [37]
    > ну вот давай проверим как будто я сделал, и говорю "все ок сделал стандартно, проблемы нет!". и?
    ну все, написал пример, проблемы нет. все как предполагал (или не вижу).

    > Не понял смысла. зачем мне АДО, он что, лучше?
    там точно есть 2 стиля мастер детайл про которые писал. не можешь найти у себя/используемых компонентах переходи. раз нужно, лучше не лучше вопрос лишний. раз надо...

    > Провайдер мастера сам формирует необходимый запрос на получение данных с подчинённого, там и настройки все есть.
    ???
    а зачем я его пишу? (вопрос в стиле ветки, только к автору ;))
  • VikOss © (28.12.12 12:29) [38]

    > Кстати, а почему Вы работая с FB,игнорите фибплас ?

    Дак они ж вроде платные, нет?
  • sniknik © (28.12.12 12:30) [39]
    +
    запрос "мастера"
    SELECT * FROM Reestr WHERE ID < 4726
    запрос "детайля"
    SELECT * FROM ReestrResp WHERE ReestrID = :ReestrID
    связка ReestrID -> ID, усе Ок.
  • VikOss © (28.12.12 12:30) [40]

    > а зачем я его пишу? (вопрос в стиле ветки, только к автору
    > ;))

    Вы с ClientDataSet ом вообще работали? :-)
  • MsGuns © (28.12.12 12:31) [41]
    >VikOss ©   (28.12.12 12:14) [34]
    >А не многовато запросов на сервер будет?

    :)

    Хе-хе, Вы разберитесь что Вы хотите. Если тянуть сразу все детали и ФИЛЬТРОВАТЬ их по мастер-ключу (типа щадить сервер), то это как бэ и не мастер-детал, как я понимаю, а фильтрация (делается ручками), а если тянуть с сервера только детали одной мастер-записи перезапуском запроса на выборку (типа классической мастер-детал), то тогда другой дело.

    Я не знаю особенностей Вашей задачи, но ИМХО, второй способ для больших объемов куда предпочтительнее. А насчет нагрузки на сервер, еще раз хехе. Для того, чтобы пользователь глянул ОДНУ мастер-запись за сеанс, сервер вытянет все 100500 деталей. Это Вы считаете "щадящим" режимом ?
  • sniknik © (28.12.12 12:32) [42]
    > Вы с ClientDataSet ом вообще работали? :-)
    давно, уже забывать начал... вон сколько времени на банальный тест потратил. ;(
  • MsGuns © (28.12.12 12:34) [43]
    >VikOss ©   (28.12.12 12:30) [40]
    >Вы с ClientDataSet ом вообще работали? :-)

    Я еще раз спрашиваю - что послужило причиной выбора именно этой компоненты (намек на сенокосилку) ? Что-то мне подсказывает, что Вы используете его совершенно не по делу.
  • VikOss © (28.12.12 12:36) [44]

    > +
    > запрос "мастера"
    > SELECT * FROM Reestr WHERE ID < 4726
    > запрос "детайля"
    > SELECT * FROM ReestrResp WHERE ReestrID = :ReestrID
    > связка ReestrID -> ID, усе Ок.

    :-) Открываем мастера - закачали, ок. Открываем Подчинённого - ID мастера текущий? не? -> качаем в кэш данные подчинённого только для одной записи из мастера НЕ?
  • sniknik © (28.12.12 12:37) [45]
    > а зачем я его пишу? (вопрос в стиле ветки, только к автору ;))
    да ладно, "зачем пишу", а вот зачем mssql/судя по профайлеру его исполняет!!!??? нужно жалобу в мелкософт написать, по VikOss он этого делать не должен...
  • VikOss © (28.12.12 12:38) [46]

    > Я еще раз спрашиваю - что послужило причиной выбора именно
    > этой компоненты (намек на сенокосилку) ? Что-то мне подсказывает,
    >  что Вы используете его совершенно не по делу.

    Блин, ну независимое от сети приложение, сохранение данных в файло на диске, типа "портфеля", я ж написал...
  • sniknik © (28.12.12 12:39) [47]
    > качаем в кэш данные подчинённого только для одной записи из мастера НЕ?
    а у тебя кэш параллельно = рабочий рекордсет?
    ССЗБ
  • VikOss © (28.12.12 12:40) [48]

    > да ладно, "зачем пишу", а вот зачем mssql/судя по профайлеру
    > его исполняет!!!??? нужно жалобу в мелкософт написать, по
    > VikOss он этого делать не должен...
    >

    Ниче не понял, какой mssql ?
    Не надо тему во флуд спускать, ок?
  • sniknik © (28.12.12 12:46) [49]
    > Ниче не понял, какой mssql ?
    а по твоему, я для теста твоей "проблемы" (вернее чтобы убедится в ее отсутствии)  должен FB поставить? на чем есть на том и пробую. кстати в плане инструментов попонятнее будет (вот профайлер, посмотреть что приходит, в FB есть?)
    +
    проблему ты видишь в клиентском датасете, какая разница где исходные данные лежат?
  • sniknik © (28.12.12 12:47) [50]
    > Не надо тему во флуд спускать, ок?
    она изначально такая... все темы без кода в первых постах = флуд.
  • VikOss © (28.12.12 12:48) [51]
    Я так понял, нужно ещё "разжевать".
    Программа делает следующее: при первом подключении к серверу, закачивает данные (не все, а по выборке, типа невыполненные задания) на комп юзера. Далее он может ОТКЛЮЧИТЬСЯ и спокойно работать хоть до посинения, с выключением компа. Потом подключается и обновляет данные на сервере - выполненные задания остаются на сервере, а пользователю они более не нужны.
    Всё работает уже 2 года без проблем. Заметил на появившееся притормаживания и рост локальных файлов, без существенного изменения кол-ва текущих записей. Далее читаем на старте топика...
  • MsGuns © (28.12.12 12:54) [52]
    На [41] отвечать не будем ?
    Уверен, что "глюк" в программе. Оттого, что он проявляется при определеных обстоятелствах, перкладывать "вину" на VCL не стоит. "Два года без проблем" - не аргумент, просто не возникало тех самых "обстоятельств"
  • MsGuns © (28.12.12 13:01) [53]
    Насколько я понял из [51] нужно чтобы приложение считывало с сервера ВСЮ информацию, сохраняло его локально и затем могло работать автономно (без сервера) в режима один-ко-многим. В данном случае применение TClientDataSet, конечно, обосновано (хотя и не есть лучший вариант решения подобной проблемы). Но в этом случае Вам предпочтительнее использовать простую фильтрацию вместо мастер-детал (как было указано выше).
  • VikOss © (28.12.12 13:02) [54]

    > На [41] отвечать не будем ?
    > Уверен, что "глюк" в программе. Оттого, что он проявляется
    > при определеных обстоятелствах, перкладывать "вину" на VCL
    > не стоит. "Два года без проблем" - не аргумент, просто не
    > возникало тех самых "обстоятельств"

    Извините, не понял на что отвечать. О выборе компоненты? А "кто" ещё умеет работать с файлами локально, да ещё без глюков?
    Без проблем - значит без проблем. И ничего не возникло. Просто на малых объёмах базы этот недостаток, очевидно, не заметен. Начала расти база - стало очевидно, что подчинённые данные качаются в файл целиком, не смотря ни на что...
  • VikOss © (28.12.12 13:04) [55]

    > Хе-хе, Вы разберитесь что Вы хотите. Если тянуть сразу все
    > детали и ФИЛЬТРОВАТЬ их по мастер-ключу (типа щадить сервер),
    >  то это как бэ и не мастер-детал, как я понимаю, а фильтрация
    > (делается ручками), а если тянуть с сервера только детали
    > одной мастер-записи перезапуском запроса на выборку (типа
    > классической мастер-детал), то тогда другой дело.
    >
    > Я не знаю особенностей Вашей задачи, но ИМХО, второй способ
    > для больших объемов куда предпочтительнее. А насчет нагрузки
    > на сервер, еще раз хехе. Для того, чтобы пользователь глянул
    > ОДНУ мастер-запись за сеанс, сервер вытянет все 100500 деталей.
    >  Это Вы считаете "щадящим" режимом ?

    Я ж описал задачу и проблему.
  • VikOss © (28.12.12 13:05) [56]

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

    Вот тут можно поподробнее?
  • VikOss © (28.12.12 13:09) [57]

    > Насколько я понял из [51] нужно чтобы приложение считывало
    > с сервера ВСЮ информацию, сохраняло его локально и затем
    > могло работать автономно (без сервера) в режима один-ко-
    > многим. В данном случае применение TClientDataSet, конечно,
    >  обосновано (хотя и не есть лучший вариант решения подобной
    > проблемы). Но в этом случае Вам предпочтительнее использовать
    > простую фильтрацию вместо мастер-детал (как было указано
    > выше).

    Не ВСЮ !!! ИМЕННО НЕ ВСЮ ! Внимательней - выполненные задания не нужны, они и не качаются, качаются ВСЕ ПОДЧИНЕННЫЕ данные в том числе из уже ВЫПОЛНЕННЫХ.
  • VikOss © (28.12.12 13:11) [58]
    > Не ВСЮ !!! ИМЕННО НЕ ВСЮ ! Внимательней - выполненные задания
    > не нужны, они и не качаются, качаются ВСЕ ПОДЧИНЕННЫЕ данные
    > в том числе из уже ВЫПОЛНЕННЫХ - а этого, разумеется не надо! Вот тут и вся проблема. Буржуины, судя по Гуглу, то ж эту проблему решить не могут.
  • sniknik © (28.12.12 13:16) [59]
    > Я ж описал задачу и проблему.
    задача (по описанию) - скачать и работать на клиенте со всеми записями... проблема - все это очень много...

    вызывай Хотабыча, он поможет. :)

    ты либо качаешь все, либо часть, все - таблица (табличный метод), часть - запрос. а запроса у тебя даже и нет (судя по одному ответу выше).
    уж действительно определись чего хочешь. ну, или Хотабычь, как вариант.
  • sniknik © (28.12.12 13:17) [60]
    > качаются ВСЕ ПОДЧИНЕННЫЕ данные в том числе из уже ВЫПОЛНЕННЫХ.
    ПОКАЗЫВАЙ ЗАПРОС! и без нервов.
  • VikOss © (28.12.12 13:20) [61]

    > > Я ж описал задачу и проблему.
    > задача (по описанию) - скачать и работать на клиенте со
    > всеми записями... проблема - все это очень много...
    >
    > вызывай Хотабыча, он поможет. :)
    >
    > ты либо качаешь все, либо часть, все - таблица (табличный
    > метод), часть - запрос. а запроса у тебя даже и нет (судя
    > по одному ответу выше).
    > уж действительно определись чего хочешь. ну, или Хотабычь,
    >  как вариант.

    Прочтите ещё раз. НЕ СО ВСЕМИ ЗАПИСЯМИ. Ну почему тут упорно читают ЧЕРЕЗ строчку? Уже ж разжевал так что бабка соседская поймёт...Уффф..
  • VikOss © (28.12.12 13:26) [62]

    > ПОКАЗЫВАЙ ЗАПРОС! и без нервов.

    Ещё раз, в 100 наверное- вы работали с ClientDataset ? КАКОЙ ЗАПРОС ? Его формирует ПРОВАЙДЕР АВТОМАТИЧЕСКИ ! Запрос пишется только в мастере, подчиненные записи вызываются АВТОМАТИЧЕСКИ, я могу даже запросить просто одну запись из мастера - он на автомате начинает тянуть детали, ТОЛЬКО вот он тянет их ЦЕЛИКОМ... Уффф...
  • sniknik © (28.12.12 13:36) [63]
    > Ещё раз, в 100 наверное- вы работали с ClientDataset ? КАКОЙ ЗАПРОС ?
    да, твоими стараниями прямо сегодня последний раз. и запросы там прекрасно работают. если поддерживает "та" сторона, по другую сторону датасетпровайдера.

    > Запрос пишется только в мастере, подчиненные записи вызываются АВТОМАТИЧЕСКИ, я могу даже запросить просто одну запись из мастера - он на автомате начинает тянуть детали
    а вот теперь мой черед, а вы работали с ClientDataset? (удивленно)

    > ТОЛЬКО вот он тянет их ЦЕЛИКОМ... Уффф...
    табличные методы без указания запроса предполагают SELECT * FROM TableName без условий, если они нужны об этом заботится программист.
  • VikOss © (28.12.12 13:41) [64]

    > да, твоими стараниями прямо сегодня последний раз. и запросы
    > там прекрасно работают. если поддерживает "та" сторона,
    > по другую сторону датасетпровайдера.

    Ну так и приведите своё работающее решение, чего зря переписываться? Если, конечно реально хотите помочь.
  • VikOss © (28.12.12 13:43) [65]

    > табличные методы без указания запроса предполагают SELECT
    > * FROM TableName без условий, если они нужны об этом заботится
    > программист.

    Приведите пример, каким может быть запрос на "подчиненном" ? Нет, правда. Только в контексте данной задачи, разумеется.
  • MsGuns © (28.12.12 13:49) [66]
    >VikOss ©   (28.12.12 13:26) [62]
    >Ещё раз, в 100 наверное- вы работали с ClientDataset ? КАКОЙ ЗАПРОС ? Его >формирует ПРОВАЙДЕР АВТОМАТИЧЕСКИ ! Запрос пишется только в мастере, >подчиненные записи вызываются АВТОМАТИЧЕСКИ, я могу даже запросить >просто одну запись из мастера - он на автомате начинает тянуть детали, >ТОЛЬКО вот он тянет их ЦЕЛИКОМ...

    Вы не понимаете сущности технологии мастер-детал, полагаясь на его "автоматичность", а потом удивляетесь когда вместо поворота налева (или куда Вам там надо) Ваша сенокосилка врезается в дерево.

    Вместо истерики Вам надо было бы просто описать какую задачу Вы пытаетесь решить, потому что судя по [57],[58],[61] Вы изобретаете восьмиколесный велосамоцикл с тремя рулями и шестью педалями.

    Вам тут намекали что некисло бы дать код сюда, который, судя по Вашему "автоматическому" подходу к проектированию, не должен быть чрезмерно объемным (по крайней мере в части открытия файла и чтению деталей)
  • sniknik © (28.12.12 13:49) [67]
    > Ну так и приведите своё работающее решение, чего зря переписываться? Если, конечно реально хотите помочь.
    я не помогаю... а развлекаюсь, смотрю чужие баги, учусь, и т.д..
    т.е. у меня свои цели не связанные с помощью (как у всех в общем то, "чистых" альтруистов с помощью ради помощи не бывает), но часто как побочный эффект и помощь получается.

    вот "кино" снял -
    http://www.fayloobmennik.net/2484214
    думаю тут очевидно про запросы.
  • sniknik © (28.12.12 13:50) [68]
    > каким может быть запрос на "подчиненном" ?
    приводил вариант выше. думаешь если параметр будет константой, а связка не назначена, не сработает?
  • sniknik © (28.12.12 13:55) [69]
    > думаю тут очевидно про запросы.
    также очевидно, что "повторы" не качаются, только то, что новое используется. если нужно не так, а сразу все используемое (и если известно заранее) "куском"  ну так указать условие, а разделять фильтром. не вижу проблемы.
  • VikOss © (28.12.12 14:00) [70]

    > Вы не понимаете сущности технологии мастер-детал, полагаясь
    > на его "автоматичность", а потом удивляетесь когда вместо
    > поворота налева (или куда Вам там надо) Ваша сенокосилка
    > врезается в дерево.
    >
    > Вместо истерики Вам надо было бы просто описать какую задачу
    > Вы пытаетесь решить, потому что судя по [57],[58],[61] Вы
    > изобретаете восьмиколесный велосамоцикл с тремя рулями и
    > шестью педалями.

    Что я непонятно написал? Вы читать разучились? Задача достаточно проста, скажите просто, вы сами не понимаете этой технологии. Про механизмы мастер-деталь - не смешите мои тапочки, я вам книгу написать могу. Просто вижу уже во флуд всё скатывается по причине элементарной - вы не знаете как решить эту проблему. Ну так не сорите, может кто реально помочь сможет. А то много слов, а конкретно написать вот пример - закачиваются только нужные данные - сохраняются на диск - отключаемся - всё работает...Много строк для этого не нужно...
  • VikOss © (28.12.12 14:03) [71]

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

    Стоп, чет не совсем понял, повторите, если не затруднит. Какая константа?
  • sniknik © (28.12.12 14:06) [72]
    обычная, циферками, символами, в "зависимости от" прямо в запрос в условии вместо параметра вбитая.
    "стандартная" можно сказать... :)
  • VikOss © (28.12.12 14:08) [73]

    >  (и если известно заранее) "куском"  ну так указать условие,
    >  а разделять фильтром. не вижу проблемы.

    И тут подробнее. Не это ли вы имеете ввиду: Select ID_Detal,p1,p2,p3 from Detal were ID_Detal in (select ID_Master from Master where pm1='Не выполнено')? Фигня, верно? Не мож я не правильно понял...
  • sniknik © (28.12.12 14:09) [74]
    > вы не знаете как решить эту проблему.
    скорее не видим проблемы... и "пена" не очень помогает в визуализации, в отличие от кода/примера.
  • VikOss © (28.12.12 14:10) [75]
    кстати этот запрос отработает правильно :-)))
  • sniknik © (28.12.12 14:12) [76]
    > Фигня, верно?
    почему фигня? обычный запрос. а если определить можно только по полю pm1 мастере, то еще и единственно возможный (+ варианты-аналоги с джойном например).
  • VikOss © (28.12.12 14:12) [77]

    > в отличие от кода/примера

    Да я не могу понять какой код вам привести???? Как значения переменных считаются или что? Вы понимаете что данный пример можно сделаеть вообще практически без единой строки кода? Откройте пример "портфель", может поймёте.
  • VikOss © (28.12.12 14:16) [78]

    > почему фигня? обычный запрос. а если определить можно только
    > по полю pm1 мастере, то еще и единственно возможный (+ варианты-
    > аналоги с джойном например).

    Ну вот тут мне не нравится, что я сначала выбрал все нужные записи в мастер, а потом опять по ним же бегаю (правда не я а сервер) в поисках ключа, хотя...время надо проверить, если вы считаете что это приемлемо, то попробую.
  • sniknik © (28.12.12 14:17) [79]
    > Да я не могу понять какой код вам привести????
    dfm тоже код.

    > Откройте пример "портфель", может поймёте.
    а нафига? сам "кино" посмотри, может дойдет. только сначала помедитируй на - "опен можно и в дизайн тайм сделать" (в начале строчки кода "мелькают").

    нужно то тебе. почему ты не хочешь "суетится"/понимать собеседников, почему считаешь что другие тебе обязаны?
  • sniknik © (28.12.12 14:19) [80]
    > мне не нравится, что я сначала выбрал все нужные записи в мастер
    а кто говорил что именно это и нужно, типа клиент все нужное к себе сразу тянет, а после отключается.
    ???
    Пушкин наверное.
  • sniknik © (28.12.12 14:25) [81]
    > мне не нравится, что я сначала выбрал все нужные записи в мастер
    и кстати никто не заставляет выбирать все, что в мастер (хотя тут не уверен, но... но смотреть проверять уже нет интереса), что в детайл, по "фильму" видно что там есть буфер скачанного, т.е. новое просто докачиваеться. в "стандартном" варианте.
  • MsGuns © (28.12.12 14:39) [82]
    >VikOss ©   (28.12.12 14:00) [70]
    >Что я непонятно написал? Вы читать разучились?

    Ткните носом где читать. Вы пишете что у вас "два года работало, а сейчас глючит" и "подтягивает ВСЕ записи вместо тех, которые к мастеру".

    >Задача достаточно проста

    Для Вас, конечно. Для меня полный мрак и Вы так и не удосужилсиь ее озвучить

    >скажите просто, вы сами не понимаете этой технологии.

    Конечно, не понимаю я Вашей технологии. Поэтому и спрашиваю. К сожалению тщетно

    >Про механизмы мастер-деталь - не смешите мои тапочки, я вам книгу написать могу.

    А если знаете, то как понимать вот это Ваше:

    VikOss ©   (28.12.12 13:26) [62]
    КАКОЙ ЗАПРОС ? Его формирует ПРОВАЙДЕР АВТОМАТИЧЕСКИ ! Запрос пишется только в мастере, подчиненные записи вызываются АВТОМАТИЧЕСКИ, я могу даже запросить просто одну запись из мастера - он на автомате начинает тянуть детали, ТОЛЬКО вот он тянет их ЦЕЛИКОМ...


    >Просто вижу уже во флуд всё скатывается по причине элементарной - вы >не знаете как решить эту проблему. Ну так не сорите, может кто реально >помочь сможет. А то много слов, а конкретно написать вот пример - >закачиваются только нужные данные - сохраняются на диск - отключаемся >- всё работает...Много строк для этого не нужно...

    Вам нужно объяснять, что здесь никто никому ничего не должен ?
    Вам не известно, что телепаты здесь не частые гости ?
    Для Вас секрет, что непонимание рождается от нежелания/неумения выражать свои мысли, но никак не наоборот ?

    Впрочем, надоело. Видимо, не в коня корм :)
  • VikOss © (28.12.12 15:07) [83]

    > MsGuns ©

    Смотрим начало топика и [51], более подробно описывать даже не знаю...
    В общем с вами всё ясно, слив...

    Вот

    > sniknik

    Уже навёл на правильные мысли, ему видно понятно в чём задача...


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

    сейчас просматриваю и переделываю, результат обязательно отпишу.
  • VikOss © (28.12.12 15:13) [84]

    >  sniknik ©   (28.12.12 12:30) [39]
    >
    > +
    > запрос "мастера"
    > SELECT * FROM Reestr WHERE ID < 4726
    > запрос "детайля"
    > SELECT * FROM ReestrResp WHERE ReestrID = :ReestrID
    > связка ReestrID -> ID, усе Ок.

    В видео это реализовано ?
  • sniknik © (28.12.12 15:34) [85]
    > В видео это реализовано ?
    нет, я спецом пять примеров написал, и выбрал рандомно, что "снимать", а что сюда показывать, сам не знаю где что... (сарказм)
  • VikOss © (28.12.12 15:58) [86]

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

    В общем, пока что я пришёл к следующему:
    1. Мастер-деталь между 2 ClientDataset возможна только путём вложенных датасетов, по сути 1 ClientDataset 2ой вложенный.
    2. "Пудрящие" мозги настройки мастер-деталь в ClientDataSet - просто фильтр.
    3. Благодаря ВАМ , реализовал полноценную загрузку доп. данных по моему же запросу из [73], надо только его к "человеческому" виду доделать, но даже в таком виде-объём данных уменьшился в 5 раз ! И скорость загрузки, обновления в х.з. сколько, но значительно!
    4. всё равно не до конца доволен см.- [78], мне кажется? можно лучше реализовать (не запрос, это понятно, а сам принцип два раза заставлять сервер перебирать записи, но тут уже чистое ИМХО)
    Пока всё, но результат положительный.
    Вам отдельное спасибо за "наводки" мозгов.
    Всем участникам спасибо.
  • Anatoly Podgoretsky © (28.12.12 18:31) [87]
    Похоже на допрос партизана в гестапо, а он не сдается, отбрехивается.
  • VikOss © (29.12.12 09:58) [88]

    > Похоже на допрос партизана в гестапо, а он не сдается, отбрехивается.

    Просто захотелось что-то сказать? :-)
  • VikOss © (30.12.12 09:59) [89]
    Нашёл "буржуйские" ссылки, сам так и "не врубился", может у кого с инглишом получше? Там вроде по теме:
    http://docwiki.embarcadero.com/RADStudio/XE3/en/Supporting_Master/detail_Relationships
    оттуда есть переход сюда:
    http://docwiki.embarcadero.com/RADStudio/XE3/en/Limiting_Records_with_Parameters
  • sniknik © (31.12.12 01:31) [90]
    > Там вроде по теме:
    про те же самые 2 подхода формирования "детали" - "табличный" и "запросный". можешь, по русски, эту тему сначала почитать...
 
Конференция "Базы" » ClientDataSet [D7, FB2.1]
Есть новые Нет новых   [119624   +37][b:0.001][p:0.002]