Отправляет email-рассылки с помощью сервиса Sendsay

Web-Мастеринг - с нуля до профи

  Все выпуски  

нет.


Информационный Канал Subscribe.Ru

Познавательное программирование

(comp.soft.prog.urisprog)

Выпуск 16


Здравствуйте, Уважаемые подписчики!

Современная программа - это внушительный набор правил, посредством которых машину "инструктируют", как решать ту или иную задачу.
- Билл Гейтс.


Предисловие


Для начала хотел бы сказать, что если вы хотите обменяться с этой рассылкой ссылками, то обращайтесь ко мне, ведущему рассылки, а не к автору текущей статьи. Незабудьте указать код вашей рассылки и количество её подписчиков(последнее особого значения не имеет, т.к. я учитываю возможную перспективность). Если ваша рассылка мне понравится, то мы обменяемся.
Я подумал, что в рассылке можно было бы сделать ещё какие-нибудь разделы. Например краткие новости, юмор, объявления, вопрос-ответ или какие-нибудь голосования. Если у вас есть идеи на этот счёт или вы хотите приложить к этому руку(условно; вести свой раздел) - пишите. Если дополнительные разделы вам совершенно не нужны, то сообщите и об этом.



Базы Данных с нуля

Создание, переименование и удаление

Обычно операции по созданию, переименованию и удалению таблицы Базы Данных происходят на этапе разработки приложения. Но, тем не менее, эти действия можно выполнить и динамически, то есть во время выполнения программы.

Для создания таблицы используется метод CreateTable. При вызове этого метода на диске будет создана пустая таблица. Но, перед тем как вызвать данный метод, необходимо указать положение и тип будущей таблицы, описать поля и индексы таблицы. Для задания местоположения используется стандартное свойство TableName. Для указания типа создаваемой таблицы так же используется стандартное свойство TableType. Для описания полей используется свойство FieldDefs и метод Add. Аналогичным образом происходит описание индексов при помощи свойства IndexDefs. Рассмотрим пример:

procedure TForm1.ButtonMakeTableClick(Sender: TObject);
begin
  // Закрываем набор данных
  Table1.Close;
  // Указываем положение будущей таблицы
  Table1.TableName:='Base\NewBase.db';
  // Задаем тип таблицы
  Table1.TableType:=ttParadox;

  // Создаем поля
  Table1.FieldDefs.Clear;
  Table1.FieldDefs.Add('Code', ftInteger);
  Table1.FieldDefs.Add('Name', ftString, 20, True);
  Table1.FieldDefs.Add('Fam', ftString, 30, True);
  Table1.FieldDefs.Add('BirthDay', ftDate);
  Table1.FieldDefs.Add('Town', ftString, 15, True);
  // Создаем индексы
  Table1.IndexDefs.Clear;
  Table1.IndexDefs.Add('indCode', 'Code', [ixPrimary]);
  Table1.IndexDefs.Add('indName', 'Name', [ixDescending]);
  Table1.IndexDefs.Add('indFam', 'Fam', [ixCaseInsensitive]);
  Table1.IndexDefs.Add('indBirthDay', 'BirthDay', [ixCaseInsensitive]);
  Table1.IndexDefs.Add('indTown', 'Town', [ixCaseInsensitive]);

  // Создаем таблицу БД
  Table1.CreateTable;
  // Указываем текущий индекс
  Table1.IndexName:='indName';
  // Открываем набор данных
  Table1.Open;
  // Связываем источник данных с набором данных
  DataSource1.DataSet:=Table1;
  // Задаем сетке источник данных
  DBGrid1.DataSource:=DataSource1;
end;

Как видно из примера в свойстве FieldDefs нужно указать имя создаваемого поля, тип поля, размер поля (если он необходим) и последним указываемым параметром является параметр Required, который определяет должно ли поле обязательно содержать некоторое значение или нет. Если указать значение True, то поле должно обязательно содержать некоторое значение, а если False, то поле может не содержать никакого значения. А в свойстве IndexDefs нужно указать имя создаваемого индекса, поле, по которому создается индекс, и параметр.

Обратите внимание на параметры, указываемые в квадратных скобках. Вот список часто используемых значений (наиболее полный список Вы можете посмотреть в справочнике):

  • ixPrimary - Первичный индекс.
  • ixUnique - Уникальный индекс, в котором не допустимы повторы значений поля.
  • ixCaseInsensitive - Сортировка в независимости от регистра букв.
  • ixDescending - Сортировка записей по убыванию.

Для того чтобы переименовать таблицу необходимо воспользоваться методом RenameTable. В результате вызова данного метода все файлы, относящиеся к таблице, будут переименованы. Но, не нужно забывать, что перед вызовом метода набор данных необходимо закрыть. Вот как это организуется:

procedure TForm1.ButtonRenameTableClick(Sender: TObject);
begin
  Table1.Close;
  Table1.RenameTable('Base\NewBase.db');
  Table1.Open;
end;

Для удаления таблицы нужно воспользоваться методом DeleteTable. Здесь также не нужно забывать, что перед удалением набор данных должен быть закрыт. В результате использования данного метода на диске буду удалены все файлы, относящиеся к таблице.

procedure TForm1.ButtonDeleteTableClick(Sender: TObject);
begin
  Table1.Close;
  Table1.DeleteTable;
end;

Все операции по созданию таблицы Базы Данных для набора данных Query выполняются через специальный SQL-запрос.

Вопросы читателей


Вадим Ш. спрашивает:
> Не могли бы Вы опубликовать в рассылке, как физически удалить из
> таблицы записи, помеченные на удаление с помощью метода "Delete"?


Гусев Сергей отвечает:
С Вашего позволения, я хотел бы немного разъяснить ситуацию.

   1. Выражение "удалить из таблицы" выглядит, как бы, не совсем корректно. Удалить можно только из набора данных, то есть, грубо говоря, из самой Базы Данных.

   2. При удалении записи из набора данных, в отличии от некоторых СУБД, эта запись действительно физически удаляется из этого набора данных. И если после удаления записи никаких визуальных изменений в БД не произошло, то значит нужно, либо дать фокус сетке DBGrid, либо воспользоваться методом Refresh.

Если я Вас правильно понял, то это организуется следующим образом:

procedure TForm1.FormCreate(Sender: TObject);
begin
  DBGrid1.Options:=DBGrid1.Options + [dgMultiSelect];
end;

procedure TForm1.ButtonDeleteClick(Sender: TObject);
begin
  If DBGrid1.SelectedRows.Count <> 0 Then
      Begin
         If MessageDlg('Удалить помеченные записи БД ?', mtWarning,
                                    [mbYes, mbNo], 0) = mrYes
             Then DBGrid1.SelectedRows.Delete;
      End
   Else
       Begin
           If MessageDlg('Удалить текущую запись БД ?', mtWarning,
                                      [mbYes, mbNo], 0) = mrYes
                Then Table1.Delete;
        End;
end;


Любые комментарии, жалобы, пожелания и сообщения об ошибках настоятельная просьба присылать на e-mail.

Гусев Сергей.
e-mail: satanzone@yandex.ru
site: http://icops.narod.ru



Все вопросы, пожелания и предложения ссылкообмена ведущему рассылки, прошу слать на e-mail: urisff@inbox.ru
Все статьи публикуются здесь только с разрешения (или рекомендации) автора.
Если вы хотите опубликовать здесь свою статью, то сделайте это, переслав её мне. В случае, если вы будете использовать приведённые в этой рассылке материалы, не забудьте сделать ссылку на эту рассылку.

Ведущий рассылки:
Набатников Иван
urisff@inbox.ru
http://newff.narod.ru/



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное