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

Тема в разделе "Delphi - Базы данных", создана пользователем nataly_ukr, 16 июл 2007.

Статус темы:
Закрыта.
  1. nataly_ukr

    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;
     
  2. LAW

    LAW Гость

    Код (Text):
    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;
    Поидее всё.
    Удачи.
     
  3. nataly_ukr

    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;
     
  4. SNike

    SNike Гость

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

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

    nataly_ukr Гость

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

    SNike Гость

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

    nataly_ukr Гость

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

    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]

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

    nataly_ukr Гость

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

    SNike Гость

  11. nataly_ukr

    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 . все связаны друг с другом . Никаких имен не указываю - все в программе. Выполняю индексирование при активации формы . Может кто бросит работающую программу , в которой индексирукеся файл А то самое элементарное- и сижу над ним сколько
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей