Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Последовательное открытие в АДОTABLE нескольких таблиц. [D6, Акцес]


Kacnep ©   (2005-10-07 12:21:00) 

День добрый! Как очистить поля созданые динамически?
Спасибо

dm.adot_Meh.Close;
s:='Access_Table_1';
with dm.adot_Meh do begin
 if FieldDefs.Count>0 then for row:=FieldDefs.Count-1 downto 0 do Fields[row].Free;
 FieldDefs.Clear;  --- пытаюсь очистить поля от предыдущей таблицы
 TableName:=s;  --- указываю с какой табл буду работать
 FieldDefs.Update; --- получаю список полей в датасет {!!!! вот тут при открытии втрой таблицы вылетает ошибка}
 for row:=0 to FieldDefs.Count-1 do begin
    FieldDefs.Items[row].CreateField(dm.adot_Meh);  -- создаю поля из датасета динамически
 end;
 Open; -- открываю набор данных
end;
 s:='ТАБЛИЦА2'
ПОВТРОИТЬ КОД СНАЧАЛА НО С ДРУГОЙ ТАБЛИЦЕЙ.


Mike Kouzmine   (2005-10-07 15:26:00) [1]

Kacnep ©   (07.10.05 14:13) [5]
2 Майк
Клеар не освободит память :(

Kacnep ©   (07.10.05 12:21)  
День добрый! Как очистить поля созданые динамически?

Для очистки поля - clear, для освобождения памяти, конечно не подходит.


Kacnep   (2005-10-07 14:31:00) [2]

Спасибо всем! После Ваших подтверждений стал искать ошибку в другом...
Фильтр был активирован... будь он неладен.
Спасибо еще раз.


msguns   (2005-10-07 14:28:00) [3]

>Kacnep ©   (07.10.05 14:13) [5]
>Это делается для того чтобы потом ДОБАВИТЬ вычисляемое поле.

О боже ! А зачем же так уродливо-то ?

>Если не импортировать  ДЕФ поля то калькулироемое поле заменит их. :(

Что подразумевается под словами "импортировать  ДЕФ поля" ?

ЗЫ. Блин, не пост, а ужастик какой-то Э8:[0]


sniknik   (2005-10-07 14:24:00) [4]

> 2 sniknik
> Это делается для того чтобы потом ДОБАВИТЬ вычисляемое поле.
> Если не импортировать  ДЕФ поля то калькулироемое поле заменит их. :(


> > if Fields.Count>0 then for row:=Fields.Count-1 downto 0 do Fields[row].Free;
> должно сработать.


Kacnep   (2005-10-07 14:13:00) [5]

2 Майк
Клеар не освободит память :(

2 sniknik
Это делается для того чтобы потом ДОБАВИТЬ вычисляемое поле.
Если не импортировать  ДЕФ поля то калькулироемое поле заменит их. :(


sniknik   (2005-10-07 13:37:00) [6]

непонятно зачем это нужно.
удалить то легко. вот это
Kacnep ©   (07.10.05 12:49) [2]
> if Fields.Count>0 then for row:=Fields.Count-1 downto 0 do Fields[row].Free;
должно сработать.

но зачем? если поля и так пересоздаются при открытии (при не заданности при разработке как постоянные), а если заданы то зачем их удалять? раз так сделано значит так надо.

и еще насчет TADOTable  
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1128525012&n=18


Mike Kouzmine   (2005-10-07 13:25:00) [7]

А если не фри, а clear?


Kacnep   (2005-10-07 12:49:00) [8]

1. Если вы насчет этой строки
if FieldDefs.Count>0 then for row:=FieldDefs.Count-1 downto 0 do Fields[row].Free;
то пробовал вместо нее вот так
if Fields.Count>0 then for row:=Fields.Count-1 downto 0 do Fields[row].Free;

2.  Отображающий элемент... Его в коде нет... Он вернее идет потом и далеко! Сейчас разобраться бы с НД. :((
В общем Граждане! ГУРУ! Доки! Шаманы! Все кто знает как удалить поля из набора полей АДОТэйбла чтоб он был как только что добавленый на форму поможите чем можете. Я устал уже в потемках тыкаться. :(
в ДельфиВорд встретил даже такой совет
             for row:=Fields.Count-1 downto 0 do begin
               TC:=FindComponent(dm.adot_Meh.Fields[row].Name);
               if Assigned(TC) then begin
                 dm.adot_Meh.Close;
                 TC.Free;
                 dm.adot_Meh.Open;
               end;//if
             end;//for


msguns   (2005-10-07 12:33:00) [9]

Кроме FiledDefs есть еще Fields

Вообще-то при открытии датасета, в т.ч. и TADOTable, все это хозяйство заполняется автоматически. Чистить надо не датасет, а коллекцию колонок отображающего грида, используя метод Colums.RebuildColums


Наверх

Титульная страница Поиск, карта сайта Написать письмо