Форум: "Базы";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];
ВнизПроблема с TClientDataSet Найти похожие ветки
← →
Loginov Dmitry © (2006-10-05 11:10) [0]Имеется система, разработанная по технологии MIDAS и состоящая из следующих звеньев :
- приложение-клиент на РМ оператора (используются компоненты TClientDataSet, TDCOMConnection)
- приложение-сервер (DCOM сервер) (используются компоненты TQuery, TDataSetProvider)
- BDE
Если в TClientDataSet на клиенте добавить к примеру 1000 записей, то вызов метода TClientDataSet.ApplyUpdates(-1) приводит к тому, что физически в базу данных добавляются первые 255 записей, и выдается Exception с текстом "Data structure corruption".
Как сделать, чтобы добавлялись все записи?
← →
Loginov Dmitry © (2006-10-05 11:55) [1]Кстати, база данных состоит из табличек Paradox.
← →
Sergey13 © (2006-10-05 12:00) [2]Боюсь соврать, но вроде тут мелькало недавно, что у парадокса какие то типа внутренние транзакции для таблицы поддерживают как раз 255 изменений.
← →
Loginov Dmitry © (2006-10-05 12:53) [3]Ой как нехорошо. Придется это исправлять. А это значит - копаться в данных Delta и передавать на сервер по 255 записей. Может у кого есть мысли, как это сделать по-проще?
← →
MsGuns © (2006-10-05 12:58) [4]>Loginov Dmitry © (05.10.06 12:53) [3]
>Ой как нехорошо. Придется это исправлять. А это значит - копаться в данных Delta и передавать на сервер по 255 записей. Может у кого есть мысли, как это сделать по-проще?
С парадоксом ? Разве что накапливать изменения в локальном файле-табличке, а потом гетерозапросом Insert добавлять в "основную".
← →
Loginov Dmitry © (2006-10-05 13:09) [5]А чем плох Delta? Я думаю сделать следующим образом:
создать новый TClientDataSet (второй), в который копирнуть свойство Delta.
У исходного датасета обнулить свойство Delta.
Далее создать еще DataSet (третий), в который копировать скажем по сотне записей из второго, после чего присваивать его свойство Delta свойству Delta исходного набора, и для исходного набора делать ApplyUpdates.
Мне кажется, должно прокатить.
← →
Sergey13 © (2006-10-05 13:12) [6]> [5] Loginov Dmitry © (05.10.06 13:09)
А велика ли система? Может проще переписать ее, чем так париться?
← →
Loginov Dmitry © (2006-10-05 15:03) [7]Sergey13 © (05.10.06 13:12) [6]
А велика ли система?
До меня ее уже лет 5 разрабатывали. Но там такие прогеры работали, что нет слов. Ну 255 записей сохранит, ну и фиг с ним - не ихнее это дело :).
А переписывание не катит - на это уйдет порядка года (с моим-то пол-ставочным графиком работы).
← →
Loginov Dmitry © (2006-10-06 09:42) [8]Блин! Вот влип! Свойство Delta оказывается - ReadOnly :(((
← →
Loginov Dmitry © (2006-10-12 11:56) [9]Все-таки решил эту проблему!
Способ следующий:
при нажатии кнопки "Принять" анализируются записи, хранящиеся в свойстве Delta. Формируется список изменений в строковом виде, затем полученная строка передается на сервер, а там уже работа с изменениями идет с помощью TQuery и без всяких транзакций. Весьма геморный способ, конечно (неделю долбил), зато вполне оправданный (проще, чем перейти к другой базе данных).
← →
Loginov Dmitry © (2006-10-17 09:39) [10]Очередные грабли при решении данной задачи:
Потребовалось вносить изменения в БД в рамках некой транзакции. Казалось бы самый простой вариант - имитировать ее с помощью CachedUpdates и CommitUpdates. Грабли в том, что функция CommitUpdates игнорит правила изменения полей, заданные при создании таблицы БД (в ДескТопе). Т.е. при добавлении записи игнорятся значения полей, заданные по умолчанию.
← →
Sergey13 © (2006-10-17 09:58) [11]> [10] Loginov Dmitry © (17.10.06 09:39)
На OnNewRecord вбивать эти значения. В "нормальных" БД эти значения можно вытащить и из самой БД. В парадоксе не знаю - возможно просто в код придется вводить.
← →
ANB © (2006-10-17 10:11) [12]Дополню - так же убедится в том, что при генерации SQL заранее присвоенные значения не затираются пустыми.
← →
Desdechado © (2006-10-17 10:36) [13]> а там уже работа с изменениями идет с помощью TQuery и без всяких транзакций
Если ты явно не указываешь транзакцию, то каждая команда неявно выполняется в отдельной транзакции.
Подразумевает ли это твоя бизнес-логика? Есть подозрения, что нет...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.046 c