Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > помогите с сортировкой в TTable


Автор: Starfish 14.5.2008, 20:57
Всем привет!
Очень нужна помошь с сортировкой в TTable. Это очень важно.
Есть локальная таблица Paradox, всего из нескольких полей. Опытным путем выяснил, что не получается сортировать ее через IndexName и IndexFieldNames, если в таблице нет не одного индексированного поля. Если с помощью Dtatabase Desktop в таблице создать ключевое поле, то можно программно создавать индексы и уничтожать их когда надо и все прекрасно сортируется.
Но дело в том, что мне нужно организовать создание такой таблицы в случае, если файл таблицы пропал куда-нибудь, т.е. предусмотреть такую ситуацию. Вот как я это делаю:
Код

try
  MainForm.Table1.Open;
  except
    on E: EDBEngineError do
    begin
      MessageDlg('Файл таблицы Table1 не найден.' + #13 +
                 'Будет создана новая таблица.', mtWarning,[mbYes], 0);
      QueryCreateTable := TQuery.Create(MainForm);
      with QueryCreateTable do
      begin
        SQL.Add('CREATE TABLE Table1 (');
        SQL.Add('IdNum INT PRIMARY KEY,');  // Как правильно сделать тут?
        SQL.Add('Surname CHAR(15),');
        SQL.Add('Name CHAR(15),');
        SQL.Add('Patronymic CHAR(15),');
        SQL.Add('PhoneNumber CHAR(10),');
        SQL.Add('MobileNumber CHAR(10),');
        SQL.Add('EMail CHAR(50),');
        SQL.Add('Note CHAR(50),');
        SQL.Add('Adress CHAR(100));');
        ExecSQL; 
      end;
      QueryCreateTable.Free;
      MainForm.Table1.Open;
    end;
  end;

При выполнении запроса получаю сообщение: exception class EDBEngineError with message 'Capability not supported'.
Что я делаю не верно в строчке для поля IdNum?
Можно ли вообще создать таким образом автоинкрементное ключевое поле?
Если нет подскажите пожалуйста, как это правильно реализовать? Потому, что очень хотелось бы чтобы таблицу можно было отсортировать по столбцу Surname, Name и т.д. и при этом у приложения была возможность самостоятельно создать эту таблицу в случае ее отсудствия.
Псевдоним локальный, если что.

Заранее, Огромное Спасибо.

Автор: vovk 8.9.2008, 19:09
Сначала создавай поля с описанием а потом Задавай индекс
т.е индекс в конце задавай 

Код

PRINARY KEY(имя поля)


по моему так
также индексы можно задавать уже имеющейся таблице

Код

CREATE INDEX  имя индекса ON таблица (имя поля1,...,имя поля n)


если поле одно то просто имя поля в скобках
вот типа того 
удалять индексы

Код

DROP INDEX "имя таблицы".имя индекса


если индекс первичный

Код

DROP INDEX "имя таблицы".PRIMARY


ессно при удалении таблица не должна использоватся больлше ни кем

вот вроде так, кажется всё правильно

ЗЫ:
перед использованием SQL компонента обнули... не уверен что имеет значение, но хуже точно не будет smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)