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


Автор: Dannasha 30.4.2012, 21:43
Здравствуйте! БД - PHPMyAdmin (sql запросы), связь через ZConection. Проблема в том, что у меня не получается программно добавить столбец в DBgrid! я как только не пробовала, но все напрасно! столбец добавляется, но он не отображается в таблице, за то в БД внесен! как быть?

Автор: Данкинг 30.4.2012, 21:53
Цитата(Dannasha @  30.4.2012,  22:43 Найти цитируемый пост)
БД - PHPMyAdmin 

Мускул, что ли?
Цитата(Dannasha @  30.4.2012,  22:43 Найти цитируемый пост)
столбец добавляется, но он не отображается в таблице, 

Откуда тогда знаешь, что добавляется?

Автор: Dannasha 30.4.2012, 22:03
да mysql! когда повторно нажимаю на кнопку добавить, пишет, что поле уже такое существует!соответственно проверяю БД и там оно есть, а в таблице нет! да вобще мне необходимо, создавать столбцы и чтобы у каждого столбца было свое название!

Автор: Данкинг 30.4.2012, 22:33
Цитата(Dannasha @  30.4.2012,  23:03 Найти цитируемый пост)
а в таблице нет! 

В какой таблице? 

Автор: Dannasha 30.4.2012, 22:36
я имею ввиду DBgride не отображается!

Автор: Данкинг 30.4.2012, 23:03
Код

 DBGrid1.Columns.Add;
 DBGrid1.Columns[DBGrid1.Columns.Count-1].Title.Caption:='Новое поле';
 DBGrid1.Columns[DBGrid1.Columns.Count-1].Fieldname:='new_field';

Автор: Dannasha 1.5.2012, 21:50
этот код добавляет новое поле только в DBGrid, а мне необходимо, чтобы добавлялось и в DBGrid и в  БД, и еще вводить название столбца сразу.

у меня есть примерный код, но мне выдает ошибку

Код

procedure THarakForm.BitBtn2Click(Sender: TObject);
var
FieldNameAdd : string;
NewFieldName: string;
begin
 NewFieldName:= InputBox('Добавление нового поля', 'Введите название нового поля', 'NewField1');
 with dmu.ZQHadd do
   begin
   DMU.ZQHadd.Active:=false;
   DMU.ZQHadd.SQL.Clear;
   DMU.ZQHadd.SQL.Add('ALTER TABLE DopHarakteris ADD COLUMN [%S] TEXT(20)', [NewFieldName] );
   DMU.ZQHadd.ExecSQL;
   DMU.HarakTable.Active:=false;
   DMU.HarakTable.Active:=true;
   DMU.HarakTable.Refresh;
   end;
     with DBGrid1.Columns.Add do
      begin
      FieldName:= NewFieldName;
      if Field = nil then //для проверки 
      ShowMessage('Поле не найдено');
      end;
   end;
end.

Автор: Данкинг 1.5.2012, 22:13
Цитата(Dannasha @  1.5.2012,  22:50 Найти цитируемый пост)
но мне выдает ошибку

Какую?

Автор: Dannasha 1.5.2012, 22:23
[Error] HarakUnit.pas(83): Too many actual parameters и ссылается на эту часть кода 

DMU.ZQHadd.SQL.Add('ALTER TABLE DopHarakteris ADD COLUMN [%S] TEXT(20)', [NewFieldName] );

Автор: Данкинг 1.5.2012, 22:56
А что означает [%S] вообще? В этом месте должно идти название поля. Откуда ему браться? И что за [NewFieldName] ?

Автор: Vas 2.5.2012, 07:24
Больше на синтаксис Format похоже
Код

DMU.ZQHadd.SQL.Add(Format('ALTER TABLE DopHarakteris ADD COLUMN %s TEXT(20)', [NewFieldName]));

Автор: Данкинг 2.5.2012, 10:18
Ну так в этом месте должен быть параметр запроса же.

Автор: Dannasha 2.5.2012, 18:59
Цитата(Vas @ 2.5.2012,  07:24)
Больше на синтаксис Format похоже
Код

DMU.ZQHadd.SQL.Add(Format('ALTER TABLE DopHarakteris ADD COLUMN %s TEXT(20)', [NewFieldName]));

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

Автор: Данкинг 2.5.2012, 20:56
Значит, запрос нередактируемый.

Автор: Dannasha 2.5.2012, 21:29
тогда как быть, какой код необходим?

Автор: Данкинг 2.5.2012, 22:15
К гриду какой датасет подключён?

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