Вложенные наборы данных с TClientdatasets в более чем двух уровнях?
Я хотел бы знать, возможно ли вложить набор данных в набор данных, а затем вложить этот набор данных в другой набор данных. Таким образом, 3 уровня вложенности. В настоящее время мне удается вложить только один набор данных в другой. При попытке внедрить третий уровень база данных успешно запускается в первый раз, когда я компилирую свою программу и могу вводить данные. Затем, когда я пытаюсь запустить программу во второй раз, EDBClient вызывает исключение с сообщением "несоответствие в пакете данных".
Итак, я хотел бы знать, возможно ли вложить 3 уровня наборов данных друг в друга?
С наилучшими пожеланиями Riaan
2 ответа
Короткий рассказ:
Попробуйте это с Delphi XE... для моего сегодняшнего основного проекта это исправило ошибку.
Длинная история:
Я столкнулся с той же проблемой, что и у вас с 3 или более уровнями вложенных наборов данных, когда есть какая-либо ошибка на стороне базы данных в Delphi 2010.
Предыдущая последняя версия, которую я интенсивно использовал, была Delphi 2007 без проблем, поэтому есть вероятность, что плохое поведение было представлено в Delphi 2009 или Delphi 2010.
Я проследил эту проблему до midas.dll на стороне клиента, и это происходит независимо от того, статически ли вы связываете midas с помощью MidasLib. Midas "думает", что пакет, полученный от сервера, искажен и выдает исключение. Это исключение нарушает "нормальный" процесс согласования ошибок, поэтому нет способа попытаться восстановиться после ошибки: OnReconcileError никогда не запускался, и процесс прерывается из-за отсутствия блоков try/ исключением внутри этой части VCL.
Я уверен, что это была ошибка, но не в том случае, если это происходит на сервере или на стороне клиента. Когда я работал над созданием проекта, чтобы поместить заявку в службу поддержки, пытаясь уменьшить его до минимально возможного, это происходит в Delphi. XE был выпущен, и я нахожусь под SA, так что я получаю это в последнюю минуту.
Скачать, установить, настроить... затем я собрал свой для поддержки проекта, и все работало нормально. Я скомпилировал свой основной проект: тот, в котором я столкнулся с реальными проблемами с пользователями из-за этого и тем, что я использую, чтобы вызывать исключения в триггерах базы данных и хранимых процедурах из-за проверок последней секунды или изменений состояния / условия. Все работало нормально Пользователь получает значимые сообщения об ошибках, и приложение восстановило его способность выполнять преобразования данных и повторять попытки на лету, или спрашивать пользователя, что делать в некоторых обстоятельствах.
Извините, я не нашел обходного пути во время моих попыток диагностировать и сообщить об этой проблеме Embarcadero, возможно, кто-то может помочь вам лучше, не предлагая обновить.
Простой ответ - да, вы можете иметь три уровня наборов данных, вложенных друг в друга. У меня есть примеры ClientDataSets, где вложение понижается на 6 уровней. На самом деле, я не думаю, что есть предел глубины вложения, кроме того, который накладывается ограничениями памяти.