![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при откате БД [D7, Paradox]
Couter Terranist © (2006-07-26 01:07:00)Во время отката бази (Rollback) викидывает ошибку "Data Structure corruption". Commit оно нормально воспринимает. В даной трансакции производятсяя пару запросов и операции с новосозданной таблицей (временной). НО таблица создаётся перед началом трансакции а удаляется после.
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EDBEngineError with message 'Data structure corruption.'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Виталий Панасенко (2006-07-28 15:59:00) [1]
> Desdechado © (28.07.06 15:50) [13]
> >> И зачем на временную таблицу ролбаки и коммиты?
> > Результат работы (размышления пользователя
> Размышления - это процесс, а не результат. А процесс принято
> хранить в локальном кэше компонетов. А вот когда размышляния
> закончились, нажата кнопка "сохранить", тогда сохраняем
> в БД, в нормальную, а не временную таблицу.
В принципе, вариант !!! Сделать кешированные обновления - тогда временная таблица нахрен не нужна !
Desdechado (2006-07-28 15:50:00) [2]>> И зачем на временную таблицу ролбаки и коммиты?
> Результат работы (размышления пользователя
Размышления - это процесс, а не результат. А процесс принято хранить в локальном кэше компонетов. А вот когда размышляния закончились, нажата кнопка "сохранить", тогда сохраняем в БД, в нормальную, а не временную таблицу.
Виталий Панасенко (2006-07-27 16:28:00) [3]это уже тебе решать. Ты работал с БДЕ, а придется через АДО.. и многое другое. тут встречный вопрос - а так ли это все важно, что даже для временной таблицы что-то нужно выдумывать ? Один совет - пропробуешь клиент-сервер(FireBird например) от локалок будешь плеваться в дальнейшем. Даже для написания простого платежного поручения...:-))
Couter Terranist (2006-07-27 16:16:00) [4]стоит ли браться за передеку проги с парадокса на акцесс (с смысле обьема роботы)?
Виталий Панасенко (2006-07-27 14:47:00) [5]ПРАКТИЧЕСКИ НИКАК. "Садись" на более продвинутые движки - MS Access, FireBird. У этих "ребят" транзакции настоящие, в любом(ну, практически в любом - падает все абсолютно. зависит от условий окружающего мира :- )) случае будет обеспечена целостность данных.
Couter Terranist (2006-07-27 12:56:00) [6]> [8]
Так как лутче уберечся в Парадоксе от неполного заполнения таблиц и стохранения целосности при падении системы?
Скажем как уберечь этот кусок кода?
NewFlowForm.TempTable1.First;
for i:=1 to NewFlowForm.TempTable1.RecordCount do
begin
DataModule2.StoreOutProdTable.Append;
DataModule2.StoreOutProdTable.FieldByName('OP_Date').AsDateTime:=NewFlowForm.Tem pTable1.FieldByName('Date').AsDateTime;
DataModule2.StoreOutProdTable.FieldByName('OP_Zm').AsInteger:=NewFlowForm.TempTa ble1.FieldByName('Zmina').AsInteger;
DataModule2.StoreOutProdTable.FieldByName('OP_Arthicul').AsString:=NewFlowForm.T empTable1.FieldByName('Arthicle').AsString;
DataModule2.StoreOutProdTable.FieldByName('OP_Count').AsFloat:=NewFlowForm.TempT able1.FieldByName('Count').AsFloat;
DataModule2.StoreOutProdTable.FieldByName('OP_Rem').AsString:=NewFlowForm.TempTa ble1.FieldByName('Remark').AsString;
DataModule2.StoreOutProdTable.Post;
DataModule2.StoreTable.Edit;
DataModule2.StoreTable.Locate('S_Arthicul',NewFlowForm.TempTable1.FieldByName('A rthicle').AsString,[]);
if DataModule2.StoreTable.FieldByName('S_Count').AsFloat-NewFlowForm.TempTable1.FieldByName('Count').AsFloat>=0
then DataModule2.StoreTable.FieldByName('S_Count').AsFloat:=DataModule2.StoreTable.Fi eldByName('S_Count').AsFloat-NewFlowForm.TempTable1.FieldByName('Count').AsFloat
else
begin
beep;
MessageDlg('Ââåäåíà ê³ëüê³ñòü âèâåçåíîãî òîâàðó "'+NewFlowForm.TempTable1.FieldByName('Arthicle').AsString+' '+NewFlowForm.TempTable1.FieldByName('Name').AsString+'" ïåðåâèùóº éîãî íàÿâíó ê³ëüê³ñòü íà ñêëàä³!',mtError,[mbOk],0);
DataModule2.StoreOutProdTable.EnableControls;
Exit;
end;
DataModule2.StoreTable.Post;
NewFlowForm.TempTable1.Next;
end;
Виталий Панасенко (2006-07-27 12:23:00) [7]Зря ты с транзакциями под Парадоксом связался. толку от них - 0.Упадет система, вырубится свет - все изменения будут внесены все равно. Транхакции в Парадоксе - блокируются записи на изменение. и в каком-то служебном файле держатся старые данные.
Couter Terranist (2006-07-27 11:54:00) [8]> [6] Romkin © (27.07.06 11:21)
В чем недостатки dirty read? У моей программы все виды работы з базой (назначение, з/п, отчет и т.п) разбросаны по TabSheet'ам. В каждом на OnShow и OnHide отркиваесться и закрывается трансакция. Будут неполадки при таком розкладе?
Romkin (2006-07-27 11:21:00) [9]У db в транзакции - не более 256 записей. Ошибки не будет, но что откатится, а что нет - неизвестно, только по факту. Кстати, транзакции только dirty read. Так что нафиг, отдельная таблица - и все ручками.
Couter Terranist (2006-07-27 11:08:00) [10]> И зачем на временную таблицу ролбаки и коммиты? Дропни ее и все дела.
Результат работы (размышления пользователя выставлять сегодня Петрова в третью бригаду (вписал) или же не выставлять (опять стёр)) с временной таблицей добавляесться в основную таблицу - а она приличного размера и ненужные операции будут подтормаживать (+применяю фильтры).
> Ограничение на кол-во записей при откате.
А я хотел одну трансакцию на временную таблицу+запросы для ее заполнения+запись в основную. И дествительно, можно только на запись... Спасибо
Anatoly Podgoretsky (2006-07-26 20:39:00) [11]Опять парадокс и порушеная структура.
atruhin (2006-07-26 17:41:00) [12]Ограничение на кол-во записей при откате.
Desdechado (2006-07-26 11:30:00) [13]Sergey13 © (26.07.06 08:12) [1]
AFAIR, пытается. Вроде ограничение было на количество записей. Но врать не буду, совсем склероз замучил...
> с новосозданной таблицей (временной).
И зачем на временную таблицу ролбаки и коммиты? Дропни ее и все дела.
Sergey13 (2006-07-26 08:12:00) [14]А что, Парадокс разве работает с транзакциями?