![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать 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;