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

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

Как сделать reset MemTable [XP]


mefodiy ©   (2011-04-26 12:15:00) 

Использую таблицу от AnyDAC TADMemTable для создания временных таблиц. Нужные мне поля создаю следующим образом
       with FieldDefs do
       begin
         Clear;
         Add('Field1', ftDate,   0,False);
         Add('Field2', ftString,10,False);
         ..........
       end;
Все нормально работает. Но после использования, когда я закрываю таблицу командой Close, определяю новый набор полей и хочу использовать таблицу заново, вылетает ошибка с названием одного из предыдущих полей о том, что это поле отсутствует в списке. Разве FieldDefs.Clear не очищает этот список. В общем, что нужно сделать, чтобы использовать таблицу с разным набором полей и избежать этой ошибки. Спасибо.


oldman   (2011-04-26 18:50:00) [1]


> Может кому и пригодится.
> Всем спасибо.


Никому не пригодится.
:)))
Оставить старые индексы на новую таблицу... Месье знает толк в извращениях!


mefodiy   (2011-04-26 17:57:00) [2]

Проблема оказалась в индексе, который я создавал при первой работе с таблицей. И ошибку он давал на название индексного поля.
У OW © все работает, так как нет индекса. Просто надо было перед созданием нового набора полей прописать
IndexName := ''.
Может кому и пригодится.
Всем спасибо.


OW   (2011-04-26 15:56:00) [3]


> ну убей ты свой экземпляр мемтэйбл если clear приводит к
> зависанию.

не, а если на него, например, сорс смотрит какой или еще что, получится что надо и его (их) перенастроить


> Ответ в [3]
> я хочу открывать таблицу уже с другим набором поле, а не
> как у тебя.

второй раз кликнуть на кнопке - и будет другое поле.
более того, заранее неизвестное


Медвежонок Пятачок   (2011-04-26 15:46:00) [4]

ну что за народ.
ну убей ты свой экземпляр мемтэйбл если clear приводит к зависанию.
создавая его динамически.


mefodiy   (2011-04-26 15:33:00) [5]

Ответ в [3]


OW   (2011-04-26 15:14:00) [6]


> var
>  s:string;
> begin
>  s := 'F' + IntToStr(Random(100)+1);
>  vt1.FieldDefs.Clear;
>  vt1.AddField(s, ftString, 20, true);
>  vt1.Open;
>  vt1.Append;
>  vt1.FieldByName(s).Value := 'Val' + s;
>  vt1.Post;
>  vt1.Close;
>  vt1.Open;
>  ShowMessage( vt1.FieldByName(s).AsString );
>  vt1.Close;

это у меня на кнопке было,
естественно, по кнопке потыкал не один раз, прежде чем сказать сюда


Медвежонок Пятачок   (2011-04-26 15:09:00) [7]

ставить последнюю, вместо помоемупоследей


mefodiy   (2011-04-26 15:06:00) [8]

http://www.sql.ru/Forum/actualthread.aspx?bid=20&tid=714775&hl=

здесь говорится, что проблема разрешилась установкой новой версии. Но у меня версия AnyDAC 4.0.5, по-моему последняя. Что же делать?


Медвежонок Пятачок   (2011-04-26 14:28:00) [9]

http://www.sql.ru/Forum/actualthread.aspx?bid=20&tid=714775&hl=


mefodiy   (2011-04-26 14:24:00) [10]

Как же менять имя в рантайме?


Медвежонок ХМЛ   (2011-04-26 13:56:00) [11]

Надо не только поменять филдефсы но и имя таблицы. Ибо старая видимо еще жива и не убита. А новых полей в ней никто не создавал.


mefodiy   (2011-04-26 13:49:00) [12]

>Fields.Clear приводит к зависанию

>vt1.Close;
> vt1.Open;
В том то и дело, что я хочу открывать таблицу уже с другим набором поле, а не как у тебя.


oldman   (2011-04-26 12:40:00) [13]

Fields.Clear не?


OW   (2011-04-26 12:39:00) [14]

не AnyDAC правда, а ODAC
но все работает

var
 s:string;
begin
 s := 'F' + IntToStr(Random(100)+1);
 vt1.FieldDefs.Clear;
 vt1.AddField(s, ftString, 20, true);
 vt1.Open;
 vt1.Append;
 vt1.FieldByName(s).Value := 'Val' + s;
 vt1.Post;
 vt1.Close;
 vt1.Open;
 ShowMessage( vt1.FieldByName(s).AsString );
 vt1.Close;


Наверх

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