-
Всем привет. У меня такая проблема. Программа, написанная на 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 всего одно поле.
-
Это тебе кажется что одно.
-
> В программе предусмотрена возможность добавлять и удалять > поля в таблицы mdb-файла.
Редко когда возникает обоснованная такая необходимость. Скорее всего Вы в "консерватории" плохо учились.
Признак правильного дизайна БД - очень редкая необходимость изменения ее архитектуры "ручками", а уж программное - еще большая редкость.
-
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) поле удаляешь?
-
> Как первое (которое с индексом 0) поле удаляешь? таблица с 0-м полей в ней? оригинально...
-
> таблица с 0-м полей в ней? оригинально...
То самое, которое ATPokasateli.Fields[0]
-
> То самое, которое ATPokasateli.Fields[0] и где в коде "то самое" с 0?
у автора то тут как все правильно, это твое желание/вопрос про удаление с "индексом 0", т.что не перекладывай...
-
design-time полей нет?
-
> у автора то тут как все правильно, это твое желание/вопрос > про удаление с "индексом 0", т.что не перекладывай...
Сорри, не прочитал "Удаляю все поля, кроме первого, процедурой:"
|