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

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

Paradox [D5, Paradox]


Олег219 ©   (2002-04-23 23:08:00) 

Минуточку внимания...
Табличка парадоксовская, маленькая, чуть более 1000 записей, работало все долго, потом что-то кряк.. Теперь она великолепно смотрится DBD, или просто в гриде, но при попытке наложить фильтр, или применить locate, вся прога виснет намертво. Сношу индекс первичный (других нет, но он сложный), пытаюсь в DBD создать новый, после некоторого раздумия заявляется, что некий стек (и что за стек?) переполнен и неплохо бы сходить к врачу (в смысле - abort:-)
Кто подскажет, как лечить, или, хотя бы, в чем проблема здесь? В какой области искать, как защититься на будущее?
Заранее благодарен.


sniknik   (2002-04-25 23:53:00) [1]

ну зашли и мне посмотреть.


Олег219   (2002-04-25 23:36:00) [2]

Ребяты, я не совсем уж... Все это и пробовал, DBD и ругается на стек. Мне пофигу, я табличку очищу (на горе юзерам:)), просто любопытно, что же такого интересного могло произойти.


Erlend   (2002-04-25 09:39:00) [3]

Удали с диска все файлы table.*, а оставь table.db. Потом
открой в DBD. Он выругается и перестроит таблицу.


Lusha   (2002-04-25 09:16:00) [4]

Но вот что за стек переполнен?
Представьте себе картинку: два блока с данными внутри таблички имеют ссылки друг на друга... Как Вы думаете, что произойдет если где то в коде программы используется рекурсия при перемещении по данным?

Листать пробовал
То есть долистал от начала до конца?

И вообще, не создаются новый праймари индекс - это как, почему?
А что DBD по этому поводу ничего не говорит? Просто не создает?


В "кладовке" посмотрите программы восстановления Paradox структур...


Олег121   (2002-04-25 00:23:00) [5]

Листать пробовал, копировать (с помощью DBD) пробовал, эту большую штуковину попробую, если предварительно пойму.
Но вот что за стек переполнен? И вообще, не создаются новый праймари индекс - это как, почему? Насколько я разумею, при логической ошибке она просто выдаст проблемы в отдельной табличке (она - в смысле DBD).


sniknik   (2002-04-24 15:21:00) [6]

что поделаеш у людей похоже поиск не работает. :-(
если надоело могу перестать.


VAleksey   (2002-04-24 14:35:00) [7]


> sniknik © (24.04.02 11:55)
:)))
Ты вы каждом ответе теперь подобные примеры намерен приводить ?


sniknik   (2002-04-24 11:55:00) [8]

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

procedure TDatMod.PackTable(Table: TTable);
var
Props: CURProps;
hDb: hDBIDb;
TableDesc: CRTblDesc;
begin
if not Table.Active then raise EDatabaseError.Create("Table must be opened to pack");
if not Table.Exclusive then raise EDatabaseError.Create("Table must be opened exclusively to pack");
Check(DbiGetCursorProps(Table.Handle, Props));
if (Props.szTableType = szPARADOX) then begin
FillChar(TableDesc, sizeof(TableDesc), 0);
Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb)));
StrPCopy(TableDesc.szTblName, Table.TableName);
StrPCopy(TableDesc.szTblType, Props.szTableType);
TableDesc.bPack := True;
Table.Close;
Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False));
end else
if (Props.szTableType = szDBASE) then Check(DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBASE, True))
else raise EDatabaseError.Create("Table must be either of Paradox or dBASE type to pack");
Table.Open;
end;


IPisk   (2002-04-24 10:53:00) [9]

Попробовать скопировать данные в новую таблицу,
т.е. как бы пересоздать старую.


Lusha   (2002-04-24 09:21:00) [10]

Для начала попробуйте пролистать ее в DBD до самого конца... Необходимо убедиться, что данные действительно целы...


Наверх

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