• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

Arkadiy

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

Arkadiy

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

antosha_Z

у меня тоже проблема с созданием полей runtime
почему делфи не распознает свои родные типы данных такие как ftInteger, ftString и др.? Код прилагаеться
Код:
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;
 
A

Arkadiy

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


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

antosha_Z

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


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

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

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

Код:
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)

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

Вот и ВСЕ ! :))
 
A

Arkadiy

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

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.
Проблема с сохранением добавленного поля ,после закрытия программы
его нет в таблице.Как его сохранить?
 
B

Barmutik

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


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

 
A

Arkadiy

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

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