Создание индексного файла в программе

  • Автор темы nataly_ukr
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

nataly_ukr

Выдает File busy на ******* Никак не пойму почему занят
Form15.Table1.TableName:='otcet5.dbf';
Form15.Table1.Active:=False;
if FileExists('nfio.mdx') Then
begin
ShowMessage('g1');
DeleteFile('nfio.mdx');
end
else
begin
DeleteFile('nfio.mdx');
ShowMessage('ggg');
end;
AssignFile(F,'otcet5.dbf');
Reset(F);
Seek(F, 28);
value:=0;
Write(F, value);
CloseFile(F);
Form15.Table1.AddIndex('nfio.mdx','nfio',[]); *******
Form15.Table1.IndexName:='nfio.mdx';
Form15.Table1.Active:=True;
end;
 
L

LAW

Код:
Form15.Table1.Active:=False;
Form15.Table1.ReadOnly:=False;
Form15.Table1.Exclusive:=True;
Form15.Table1.Active:=True;
// Создаём индекс
Form15.Table1.Active:=False;
Form15.Table1.Exclusive:=False;
Form15.Table1.Active:=True;

Поидее всё.
Удачи.
 
N

nataly_ukr

Изменила программу результат тот же Люди помогите Горят сроки задачи
Выдает ошибку File busy на строке //*************** Первоначально выдает ggg , т е индексный файл не создается
А как еще можно упорядочить, пименить Select c сортировкой Подскажите

begin
Form15.Table1.TableName:='e:\delphi\salon\otcet5.dbf';
Form15.Table1.Active:=False;
Form15.Table1.ReadOnly:=False;
Form15.Table1.Exclusive:=True;
if FileExists('nfio.mdx') Then
begin
ShowMessage('g1');
DeleteFile('e:\delphi\salon\nfio.mdx');
end
else
begin
DeleteFile('e:\delphi\salon\nfio.mdx');
ShowMessage('ggg');
end;
Form15.Table1.Active:=False;
Form15.Table1.Exclusive:=False;
Form15.Table1.IndexName:='';
Form15.Table1.AddIndex('e:\delphi\salon\nfio.mdx','nfio',[]);
Form15.Table1.Active:=False; //*******
Form15.Table1.Exclusive:=False;
Form15.Table1.Active:=True;
// Form15.Table1.IndexName:='nfio.mdx';
Form15.Table1.Active:=True;
end;
 
S

SNike

Следует использовать Table.AddIndex; Table.DeleteIndex
Во время создания индекса таблица должна быть открыта в эксклюзиве.

Если не получится то напиши полный текст сообщения ошибки
 
N

nataly_ukr

Да у меня они и стоят А ошибку пишет Project1.exe raised exception class EDBEngine Error witch message "Table is busy" останавливается на операторе помеченном **** Индексній файл не создается
 
S

SNike

Сосбственно, это значит что файл используется. Нужно попытаться закрыть все программы которые могут использовать этот файл. Например, тот же Abi Desktop, можно попробовать закрыть Delphi и попробовать запустить Exe, перегрузиться и попробовать запустить Exe.
Так же попробуй создать новый проект в котором будет одна лишь таблица и из этого проекта попытайся создать индексный файл, потому как вполне вероятно что в какой-то из форм твоего проекта эта таблица используется и не закрывается при создании индекса
 
N

nataly_ukr

Snike большое спасибо , что натолкнули на мысль У меня есть другие формы, в которых этот файл стоит св-во - активен, но я их даже не запускаяю в этом сеансе, сразу иду на создание индекса. Выходит , что нельзя чтобы в других формах в свойствах он был активен, нуно активизировать только в тексте программ и потом наверное каждый раз закрывать . НИкогда об этом не задумывалась . А я бюсь уже неделю над этой проблемой, гору литеретуры прочла , еще раз спасибо. Не могли бы вы мне ответить действительно ли нельзя ставить активность файла в св-вах формы
 
S

SNike

Вообще, открытие в эксклюзиве подразумевает что таблица открыта только в одном месте. Т.е. не должно быть такого что TTable_1 и TTable_2 одновременно используют эту таблицу, не говоря уж об одновременном использовании таблицы разными приложениями.

<!--QuoteBegin-nataly_ukr+17:07:2007, 15:28 -->
<span class="vbquote">(nataly_ukr @ 17:07:2007, 15:28 )</span><!--QuoteEBegin-->действительно ли нельзя ставить активность файла в св-вах формы
[snapback]72481" rel="nofollow" target="_blank[/snapback]​
[/quote]

Лучше всего открывать таблицы при запуске приложений, а заодно при этом обрабатывать возможные ошибки. А вообще конечно можно, но тогда нужно при переходе в эксклюзивный режим их программно закрыть. И еще хорошо бы ввести проверку на возможность открытия в том же самом, уже повисшем на слуху, эксклюзиве :)
 
N

nataly_ukr

Индексный файл упорно не создает , но уже новая ошибка Invalid index/tag Name
 
S

SNike

Посмотри , должно помочь
 
N

nataly_ukr

Вернулась из отпуска, нужно снова заниматься индексным файлом.
Новая проблема - ЭЛЕМЕНТАРНО СОЗДАЮ В ПРОГРАММЕ ИНДЕКСНЫЙ ФАЙЛ. вСЕ ПРОХОДИТ НОРМАЛЬНО, НИКАКИХ ОШИБОК. зЗатем DBGrid пытаюсь его смотреть - показываеи не индексированный файл
imjm:='kasot'+rmes2+'.dbf';
imjmi:='kasot'+rmes2+'.mdx';
Form23.Table1.Active:=False;
Form23.Table1.TableName:=imjm;
Form23.Table1.Close;
If FileExists(imjmi) then DeleteFile(imjmi);
AssignFile(F,imjm);
Reset(F);
Seek(F, 28);
value:=0;
Write(F, value);
CloseFile(F);
// Form23.Table1.AddIndex('kdok2','dtos(ddok)+ndok+str(kfio,2)',[ixExpression]);
Form23.Table1.AddIndex('kdok2','dtos(ddok)',[ixExpression]);
Form23.Table1.IndexName:='kdok2';
Form23.Table1.Active:=True;


На форме только три компонента Table . DBGrid, DataSource . все связаны друг с другом . Никаких имен не указываю - все в программе. Выполняю индексирование при активации формы . Может кто бросит работающую программу , в которой индексирукеся файл А то самое элементарное- и сижу над ним сколько
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!