Здравствуйте.
Столкнулся с проблемой в неожиданном месте.
Мне нужно для учета текущих подключений (к программе по http) использовать таблицу не в базе, а в памяти.
Взял MemTableEh в режиме stand-alone
И получил неожиданную проблему. Никогда не использовал команды работы Edit, Post, UpdateRecord и т.д. потому что всегда делал это через SQL запросы в компонентах ADOQuery/SQLQuery .
Со вставкой записи проблем нет, подсмотрел тут на форуме.
Код:
...
var rec: TMemoryRecordEh;
...
FormMain.MemTableEh_Cons.RecordsView.MemTableData.RecordsList.BeginUpdate;
Rec := FormMain.MemTableEh_Cons.RecordsView.NewRecord;
Rec.DataValues['IP',dvvValueEh]:= rRemoteIP;
Rec.DataValues['Document',dvvValueEh]:= rDocument;
Rec.DataValues['params',dvvValueEh]:= rprms;
Rec.DataValues['cnt',dvvValueEh]:= 1;
Rec.DataValues['DTstart',dvvValueEh]:= sNow;
Rec.DataValues['DTcur',dvvValueEh]:= sNow;
Rec.DataValues['MSstart',dvvValueEh]:= MScur;
Rec.DataValues['MScur',dvvValueEh]:= MScur;
FormMain.MemTableEh_Cons.RecordsView.AddRecord(Rec);
FormMain.MemTableEh_Cons.RecordsView.MemTableData.RecordsList.EndUpdate;
А вот с редактированием проблема.
Код:
...
fl0:= FormMain.MemTableEh_Cons.Locate('IP;Document', VarArrayOf([rRemoteIP,rDocument]),[loCaseInsensitive,loPartialKey]); // позиционирование на нужно записи
...
FormMain.MemTableEh_Cons.Edit;
FormMain.MemTableEh_Cons.FieldByName('cnt').AsInteger:=cnt;
FormMain.MemTableEh_Cons.FieldByName('DTcur').AsString:=sNow;
FormMain.MemTableEh_Cons.FieldByName('MScur').AsLargeInt:=MScur;
FormMain.MemTableEh_Cons.Post;
В итоге когда выгружаю в файл
Код:
FormMain.MemTableEh_Cons.SaveToFile('MemTableEh_'+fNow+'.txt', dfmTextEh);
после вставки, вижу что все корректно записалось. И первая запись и последующие.
А вот редактирование записи не работает.
И нагуглить не получается. Очень мало народу использует подобную работу с датасетами
Подскажите пожалуйста работающий синтаксис для изменения записей и удаления записей