Добавление поля в таблице БД

Тема в разделе "Delphi - Базы данных", создана пользователем Arkadiy, 2 май 2006.

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

    Arkadiy Гость

    Братцы, помогите!
    Как в существующей таблице программно добавить поле?
    Таблица создана в Парадоксе.
    Дельфи 5.
    БДЕ.
    Если можно, пошлите на apodor@rambler.ru
    Many thanks for you.
    Arkadiy.
     
  2. Arkadiy

    Arkadiy Гость

    Неужели никто не знает как это сделать?
    Я удивлен.может быть глупый вопрос.Тогда подскажите.
    Как создать таблицу с полями, умею.
    Аркадий.
    Спасибо тому, кто ответит мне.
     
  3. antosha_Z

    antosha_Z Гость

    у меня тоже проблема с созданием полей runtime
    почему делфи не распознает свои родные типы данных такие как ftInteger, ftString и др.? Код прилагаеться
    Код (Text):
    procedure CreateFields();
    begin

       with DM.TMain do
       begin

        TableName := 'Main';
        if not DM.TMain.Exists then begin

      with FieldDefs do begin
      Clear;
      with AddFieldDef do begin
       Name := 'Field1';
       DataType := ftinteger;
       Required := True;
      end;
      with AddFieldDef do begin

       Name := 'Field2';
       DataType := ftString;
       Size := 30;
      end;
     end;

     CreateTable;
    end;

       end;
    end;
     
  4. Arkadiy

    Arkadiy Гость

    <!--QuoteBegin-antosha_Z+8:05:2006, 17:51 -->
    <span class="vbquote">(antosha_Z @ 8:05:2006, 17:51 )</span><!--QuoteEBegin-->у меня тоже проблема с созданием полей runtime
    почему делфи не распознает свои родные типы данных такие как ftInteger, ftString и др.? Код прилагаеться
    Код (Text):
    procedure CreateFields();
    begin

       with DM.TMain do
       begin

        TableName := 'Main';
        if not DM.TMain.Exists then begin

      with FieldDefs do begin
      Clear;
      with AddFieldDef do begin
       Name := 'Field1';
       DataType := ftinteger;
       Required := True;
      end;
      with AddFieldDef do begin

       Name := 'Field2';
       DataType := ftString;
       Size := 30;
      end;
     end;

     CreateTable;
    end;

       end;
    end;
    [snapback]35238" rel="nofollow" target="_blank[/snapback]​
    [/quote]


    Огромнейшее спасибо Антоше!
    Проверю.
    С почтением,
    Аркадий
    Спасибо Сергею.
     
  5. antosha_Z

    antosha_Z Гость

    некоторые пояснения
    DM - модуль данных, где расположены визуальные компоненты база, таблицы и т.д.
    Здесь описан процесс создания таблицы БД run-time, модуль не компилировался и писал ошибку по причине того что я не подключил нужную библиотеку. (если у вас выдает ошибку, то киньте компонент TIBTable или TTable на форму данного модуля где описываеться процедура и он пропишет сам библиотеки, потом таблицу можно удалить)


    Лучший способ создания, добавления и всякого конструирования БД это написать запрос в самом делфи на SQL
    Делает это компонент TIBQuery (для интербейсовских БД)

    Размещаем компонент на форме и прописываем ему имя например QCreate

    Сама процедура добавления поля в таблицу у меня в программе выглядит след. образом:

    Код (Text):
    function CreateField(NameTable: string; nameField:string; typeField:integer): boolean;
    var
    str:string;
    begin
       case typeField of
       0: str:='varchar(50)';
       1: str:='integer';
       2: str:='float';
       end;

       with DM.QCreate do
       begin
       sql.Clear;
       sql.Add('ALTER TABLE '+NameTable+' ADD '+NameField+' '+str+';');
       ExecSQL;
       end;
    end;

    если нужно добавить поле с заранее известным именем и типом заранее известной таблицы, то это проще сделать в программах конструкторах БД (типа IBExpert)

    но можно прописать и в делфи например:
    Код (Text):
    procedure AddField();
       with DM.QCreate do
       begin
       sql.Clear;
       sql.Add('ALTER TABLE Table1 ADD Field1 integer;');
       ExecSQL;
       end;
    Вот и ВСЕ ! :))
     
  6. Arkadiy

    Arkadiy Гость

    Ничего не получается.
    Видно знатоки отдыхают на Канарских островах.
    Спасибо всем кто пытался мне помочь.
    Аркадий.
     
  7. Arkadiy

    Arkadiy Гость

    Динамическое создание и удаление полей

    Дата 25.1.2005, 09:39 (ссылка) Быстрая цитата Цитата

    Нашел в DRKB динамическое создание полей.
    написанo под Paradox.

    А это сам пример из DRKB:
    procedure AddField;
    var
    I: Integer;
    Field: TField;
    begin
    { Поля можно добавлять только к неактивному набору данных. }
    Table1.Active := False;

    { Распределяем определенные поля если набор данных еще не был активным. }
    Table1.FieldDefs.Update;

    { Создаем все поля из определений и добавляем к набору данных. }
    for I := 0 to Table1.FieldDefs.Count - 1 do
    begin
    { Вот где мы действительно сообщаем набору данных о необходимости создания поля. }
    { Поле "назначается", но нам нужно не это, нам нужна просто ссылка на новое поле. }
    Field := Table1.FieldDefs.CreateField(Table1);
    end;

    { Вот пример того, как вы можете добавить дополнительные, вычисленные поля }
    Field := TStringField.Create(Table1);
    Field.FieldName := 'Total';
    Field.Calculated := True;
    Field.DataSet := Table1;

    { Теперь мы можем увидеть наши поля. }
    Table1.Active := True;
    end;

    Взято с www.drkb.ru.
    Проблема с сохранением добавленного поля ,после закрытия программы
    его нет в таблице.Как его сохранить?
     
  8. Barmutik

    Barmutik Гость

    Судя по коду Вы добавляете калькулируемое поле .. а оно не хранится в таблице а существует только на момент работы с Вашей таблицей...


    Вот пример от самого Борлянда как модифицировать структуру Paradox таблиц .. всё не так тривиально ..

    Изменение структуры таблицы
     
  9. Arkadiy

    Arkadiy Гость

    Я в отчаянии.
    Неужели никто не поможет мне?
    Field.Calculated := True; поменял на Field.ASCurrency.
    Получаю ошибку: Field '2006' has no dataset.
    Но ведь я указываю Field.DataSet := Table1;
    Help me!!!!!!!!!
    Arkadiy.
     
Загрузка...
Статус темы:
Закрыта.

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