Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка при откате БД [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]

А что, Парадокс разве работает с транзакциями?


Наверх

Титульная страница Поиск, карта сайта Написать письмо