Конференция "Базы" » ADO: ошибка: "Определено слишком много полей."
 
  • grh © (21.10.11 15:17) [0]
    Всем привет. У меня такая проблема. Программа, написанная на Delphi, работает с mdb-файлом. В программе предусмотрена возможность добавлять и удалять поля в таблицы mdb-файла. При попытке добавить очередное поле в таблицу иногда появляется сообщение: "Определено слишком много полей.", хотя на самом деле полей в таблице не так уж и много. Как избавиться от этой ошибки?

    ATPokasateli: TADOTable;
    ADOQuery1: TADOQuery;

    Добавляю 10 полей процедурой:
    procedure TForm1.BtnAddClick(Sender: TObject);
    var i:integer;
    begin
     for i:=1 to 10 do
     begin
       ADOQuery1.SQL.Text:='ALTER TABLE Показатели ADD COLUMN [П'+inttostr(i)+'] FLOAT';
       ADOQuery1.ExecSQL
     end;
     ATPokasateli.Active:=false;
     ATPokasateli.Active:=true
    end;

    Удаляю все поля, кроме первого, процедурой:
    procedure TForm1.BtnClearClick(Sender: TObject);
    var i:integer;
    begin
     ATPokasateli.Active:=false;
     ATPokasateli.Active:=true;
     for i:=1 to ATPokasateli.FieldCount-1 do
     begin
       ADOQuery1.SQL.Text:='ALTER TABLE Показатели DROP COLUMN ['+ATPokasateli.Fields[i].FieldName+']';
       ADOQuery1.ExecSQL
     end;
     ATPokasateli.Active:=false;
     ATPokasateli.Active:=true
    end;

    Ошибка возникает даже когда в таблице ATPokasateli всего одно поле.
  • Медвежонок Пятачок © (21.10.11 15:24) [1]
    Это тебе кажется что одно.
  • Jeer © (23.10.11 11:24) [2]

    > В программе предусмотрена возможность добавлять и удалять
    > поля в таблицы mdb-файла.


    Редко когда возникает обоснованная такая необходимость.
    Скорее всего Вы в "консерватории" плохо учились.

    Признак правильного дизайна БД - очень редкая необходимость изменения ее архитектуры "ручками", а уж программное - еще большая редкость.
  • YurikGL © (23.10.11 21:03) [3]
    1) Объяснить бы зачем нужно добавлять поля
    2) Все таблицы и поля в БД переназвать на английском языке
    3)
    >  for i:=1 to ATPokasateli.FieldCount-1 do
    >  begin
    >    ADOQuery1.SQL.Text:='ALTER TABLE Показатели DROP COLUMN
    > ['+ATPokasateli.Fields[i].FieldName+']';
    >    ADOQuery1.ExecSQL

    Мне казалось, что поля в датасете с нуля нумеруются. Как первое (которое с индексом 0) поле удаляешь?
  • sniknik © (23.10.11 22:24) [4]
    > Как первое (которое с индексом 0) поле удаляешь?
    таблица с 0-м полей в ней? оригинально...
  • YurikGL © (23.10.11 22:28) [5]

    > таблица с 0-м полей в ней? оригинально...

    То самое, которое ATPokasateli.Fields[0]
  • sniknik © (23.10.11 23:18) [6]
    > То самое, которое ATPokasateli.Fields[0]
    и где в коде "то самое" с 0?

    у автора то тут как все правильно, это твое желание/вопрос про удаление с "индексом 0", т.что не перекладывай...
  • Cobalt © (24.10.11 11:37) [7]
    design-time полей нет?
  • YurikGL © (24.10.11 15:59) [8]

    > у автора то тут как все правильно, это твое желание/вопрос
    > про удаление с "индексом 0", т.что не перекладывай...

    Сорри, не прочитал "Удаляю все поля, кроме первого, процедурой:"
 
Конференция "Базы" » ADO: ошибка: "Определено слишком много полей."
Есть новые Нет новых   [134431   +11][b:0][p:0]