Нет способа сделать это в пределах Delphi VCL. Кажется, это довольно серьезное упущение. Однако, есть возможность сделать это напрямую через Borland Database Engine через интерфейс предоставляемый модулями DBIPROCS.DCU и DBITYPES.DCU () или BDE.DCU (). Нужно использовать функцию DbiDoRestructure .
14. Есть ли какая-нибудь процедура для перестройки разрушенного индекса, типа TUTILITY.EXE из PdoxWin?
BDE включает функцию для этого — DbiRegenIndexes .
15. Есть ли какая-нибудь процедура для упаковки таблицы dBase?
В BDE есть функция DbiPackTable .
16. Как для .dbf таблицы создать индекс по выражению?
Нужно использовать процедуру AddIndex с параметром ixExpression , например:
Table1.AddIndex( 'NewIndex', 'Field1 * Field2 + Field3', [ixExpression]);
17. Как создать в Paradox вторичный индекс с упорядочиванием по убыванию?
Используйте флаг ixDescending :
Table1.AddIndex( 'NewIndex', 'CustNo;CustName', [ixDescending]);
18. Хочу узнать номер текущей записи, как это сделать?
В общем случае — никак. В случае таблицы Paradox — есть в BDE функция DbiGetSeqNo , которая возвращает логический номер записи. Но при использовании на форме TDBGrid она может давать не всегда правильные значения.
19. Как посмотреть удаленные записи в таблице .dbf? А как их восстановить?
Для того, чтобы удаленные записи были доступны, нужно установить соответствующее свойство для курсора с помощью функции BDE DbiSetProp :
DbiSetProp(hObj(Table1.Handle), curSoftDeleteOn, 1);
Проверка удалена запись или нет производится через функцию чтения записи DbiGetRecord . Для восстановления записи применяется функция DbiUndeleteRecord .
20. Упаковка таблицы.
Упаковать таблицу DBF можно открыв ее компонентом TTable и вызвав функцию BDE DbiPackTable :
Result := DbiPackTable(Table1.DbHandle, Table1.Handle, nil, szDBase, True);
21. Почему я получаю ошибку 'Index out of range' когда использую TTable.FindNearest и TTable.FindKey для таблицы dBase с индексом по выражению?
Методы TTable.FindKey и TTable.FindNearest не могут работать с таким видом индексов. Вместо этих методов используйте TTable.GotoKey и TTable.GotoNearest , которые прекрасно работают с ними.
22. Как программным образом создать таблицу Paradox с автоинкрементным полем?
Вам следует использовать компонент TQuery и SQL-предложение типа:
CREATE TABLE "PDoxTbl.db" (ID AUTOINC, Name CHAR(255), PRIMARY KEY(ID));
23. Почему я не могу использовать опцию ixUnique при создании индекса в таблице Paradox с помощью метода AddIndex компонента TTable?
Опции, используемые в методе AddIndex компонента TTable зависят от типа таблиц. Например, опция ixUnique работает с таблицей dBase, но не с Paradox. Следующая таблица показывает, как эти опции используются для таблиц dBase и Paradox.
Index Options |
dBase |
Paradox |
ixUnique |
* |
|
ixExpression |
* |
|
ixDescending |
* |
* |
ixNonMaintained |
* |
* |
ixPrimary |
|
* |
ixCaseInsensitive |
|
* |
24. Генерация уникальных идентификаторов для таблиц.
Для более полного ознакомления с этим вопросом рекомендуется обратится к статье Максима Михеенкова в 1-ом номере российского журнала СУБД за 1995 год. А коротко можно сказать следующее.
Для таблиц Paradox вы можете пользоваться специальными типами полей, гарантирующими уникальность значения поля в записи — типы AutoIncrement и TimeStamp (с использованием функций DateXXX — модуль SysUtils).
Для Interbase вы можете использовать генераторы, которые возвращают уникальное значение.
Если же такое решение вам не подходит, то можно перед помещением записи в таблицу отыскивать максимальное уже имеющееся в таблице значение этого поля и заполнять поле в записи значением, на единицу больше. Для разграничения пользователей при одновременном доступе можно хранить это значение в отдельной таблице и открывать ее эксклюзивном режиме.
25. Можно ли использовать Crystal Report с таблицами формата Paradox 5.0?
Да, можно, только если вам удастся получить ODBC-драйвер для таблиц Paradox. Во всяком случае на Crystal BBS находится файл bde.zip, который и содержит этот драйвер.
26. Как открыть таблицу dBase, у которой поврежден (утерян) индексный MDX файл?
Как я могу использовать таблицу dBase без необходимого для нее MDX файла?
При создании таблицы dBASE с индексным файлом MDX в заголовке DBF файла устанавливается байт со смещением 28 (десятичное) от начала файла. При открытии таблицы, у которой данный байт установлен, также происходит попытка открыть MDX файл; если это не удается, то возникает исключение (exception). Для решения проблемы достаточно прописать в DBF файл 0 по указанному смещению.
Читать дальше