Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];




Вниз

Помогите советом, сломалась таблица parodox. 


xim   (2002-03-17 15:47) [0]

Дохожу до определённой записи и возникает сообщение Corrupt file, other then header.
Удалил все файлы с индексами, оставил только .db и .mb.
Открыв эту таблицу в DBD, пытатся её сохранить в галочкой PACK, но выскакивало все то

же сообщение, Save as также не работает! В таблице всего 464 записи.
Во время работы, когда таблица ещё была жива, по непонятным причинам иногда выводилось

сообщение Key Violation, программу пригодилось перегружать.
Есть шансы спасти таблицу? Может быть стоит перейти на Interbase или ADO?



sniknik   (2002-03-17 22:25) [1]

Часто ломаются индексы и сами таблици нередко. Спасти таблицу скорей всего можно, чаще частично но только не с помощью Database Desktop, а скорее програмно используя функции Dbi. (у меня получалось). А вот переходить на другую платформу, это дело личных предпочтений, но попробовать стоит.



xim   (2002-03-18 09:23) [2]

Кто виноват в поломке таблицы? BDE? paradox?
Какой бы кривой не была моя программа, она не могла сломать всю таблицу, т.к. работает с ней чрез стандартные компоненты.
User в тот злополучный момент просто вставлял новые записи.
На форуме кто-то сказал о какой- то "tutility от Borland",
которая может починить таблицу, но в helpe Delpi ничего такого найти не удалось.
в DBD при просмотре таблицы, начало её видно, конец тоже, но только если я резко ставлю scroll в конец, а если идти к концу последовательно то, как только приближаюсь к
х-дцатой записи, вижу серое поле, scroll в середине, и ни вверх ни вниз не двигается, пока таблицу заново не откроешь. Выдаётя всё то же сообщение
"Corrupt file, other then header, Table: X:\Dir\Table1.db"
Операционка wk2, довольно стабильная, на винте никаких бедов в принципе быть не может, delphi 6 с SP1;
Где найти информацию о функциях dbi?

> но попробовать стоит

Что вы порекомендуете попробовать?
Планируется небольшая(по количеству записей) локальная БД,
но большая по объёму (около 35 Gb), напичканная графикой в BLOB формате.



Alexandr   (2002-03-18 09:27) [3]

виновато скорее всего питание.
На втором месте аппаратный сбой в памяти, винде
да и много чего еще. Файловая система-то NTFS?

А ты уверен, что тебе именно база данных нужна? По-моему тут лучше в файлах свои BLOB хранить...



deleon   (2002-03-18 10:12) [4]

В составе RX есть такая программка DbExplorer.
Попробуй с помощью нее поремонтировать базу - иногда помогает, она как раз работает на основе tutil32.dll



sniknik   (2002-03-18 10:51) [5]

В Delphi просто положи на форму DbGreed,Table,DataSource свяжи их и открой таблицу Это уже больше покажет чем в Database Desktop. Дальше проверь может в таблице есть пропуски или дублированные поля (при имеющихся в таблици автоинкрементных полях это смертельно для индексов - > может быть "Key Violation"). Дальше функция востанавливающая индексы
(просто на кнопку повесь)
Check(DbiRegenIndexes(Table.Handle));
возможно до этой функции любое действие ~(удаление Ctrl+Del) будет давать ошибку.

и под занавес чтобы физически удалить удаленные записи (почистить таблицу)
procedure TForm1.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;

функции стандартные взяты из хелпа делфи. таблици должны быть открыты в монопольном режиме. (не получится шли мне попробую чтонибудь сделать)

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



xim   (2002-03-18 15:47) [6]

Спасибо всем за ответы!

> Alexandr © (18.03.02 09:27)
> виновато скорее всего питание.

Это вряд ли. С питанием проблем не бывает,
питаемся от пилота + SmartUps.

> На втором месте аппаратный сбой в памяти, винде

С памятью проблем тоже не было никогда,
память протестирована вдоль и поперёк,
да и за W2K с SP2 сбоев не замечалось.

> да и много чего еще. Файловая система-то NTFS?

Система на FAT поставлена, а база на сжатом NTFS,
может быть из-за сжатия?

> А ты уверен, что тебе именно база данных нужна? По-моему
> тут лучше в файлах свои BLOB хранить...

Беда в том, что в одной записи как правило от 10 до 50 картинок, с комментариями и thumbnail"ами,
в файлах пробовал хранить, но это оказалось неудобным,
вдруг юзеру понадобится грохнуть 25-ю картинку из 40-ка
или вставить между десятой и 11-ой ещё какую-нибудь + картинки должны быть осортированы.
+ Необходима возможность поиска по комментариям к картинке
а они могут быт довольно большими, в Exif не загонишь.
Ну я вышел из положения так:
вместе с новой записью создаю к этой записи
дополнительную таблицу методом createtable, с именем файла = ключевым полям этой записи.
И наплодилось у меня этих файлов около 3-х тысяч,
не знаю во что это превратиться когда в базе будет 12.4 тыс.
записей. (А их будет ровно столько)
Среди BDE компонентов виднеется нечто
с названием NestedTable. Что это такое?
Кажется это то что мне нужно: таблица в таблице,
но как это приделать к Pradox"у?



Shaman_Naydak   (2002-03-18 18:45) [7]

>>xim

в парадоксовых таблицах постоянно слетают ключи при попытке одновременной работы с таблицей из нескольких приложений..
ну не скл сервер тебе это..
Нет, в парадоксе этой штуки нет и не будет, я так думаю :)
Это серьезная такая хренька для Oracle 8 или при использовании MIDAS :))
Если нужен tutility - могу выслать, вроде валялся у меня, пиши мыло.
Я в свое время тоже своей программкой лечил такие таблицы, но исходников уже нет :(




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.75 MB
Время: 0.054 c
1-22746           Barmutik              2002-03-25 18:42  2002.04.08  
Помогите с TRegistry.SaveKey


1-22653           Chistyakov Victor     2002-03-28 10:42  2002.04.08  
Delphi&Word


6-22784           Kirill_               2002-01-25 00:47  2002.04.08  
Net


3-22576           Zloy                  2002-03-18 07:03  2002.04.08  
Приветствую!!! Подскажите плиз, как сделать так чтобы таблица после каждого заполнения или редактирования какого-то поля 100% сохраналась


1-22717           Great                 2002-03-25 19:34  2002.04.08  
Так что, никто не знает ? Ttabsheet и Drag & Drop