Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 27 апр 2024, 22:06

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
СообщениеДобавлено: 07 июл 2023, 05:29 
Не в сети

Зарегистрирован: 03 мар 2017, 07:12
Сообщений: 91
Здравствуйте.
Столкнулся с проблемой в неожиданном месте.

Мне нужно для учета текущих подключений (к программе по 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); 

после вставки, вижу что все корректно записалось. И первая запись и последующие.
А вот редактирование записи не работает.
И нагуглить не получается. Очень мало народу использует подобную работу с датасетами

Подскажите пожалуйста работающий синтаксис для изменения записей и удаления записей


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 07 июл 2023, 06:48 
Не в сети

Зарегистрирован: 03 мар 2017, 07:12
Сообщений: 91
---------
С обновление разобрался по аналогии и методом тыка

Код:
           i:=FormMain.MemTableEh_Cons.Rec.Index;
           FormMain.MemTableEh_Cons.RecordsView.MemTableData.RecordsList.BeginUpdate;
           FormMain.MemTableEh_Cons.RecordsView.MemTableData.RecordsList.Rec[i].DataValues['cnt',dvvValueEh]:=cnt;
           FormMain.MemTableEh_Cons.RecordsView.MemTableData.RecordsList.Rec[i].DataValues['DTcur',dvvValueEh]:=sNow;
           FormMain.MemTableEh_Cons.RecordsView.MemTableData.RecordsList.Rec[i].DataValues['MScur',dvvValueEh]:=MScur;
           FormMain.MemTableEh_Cons.RecordsView.MemTableData.RecordsList.EndUpdate;   


С удалением записи пока еще не понятно.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 07 июл 2023, 18:08 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1549
Добрый день.

Изменения данных в MemTableEh производится также, как и в любом другом DataSet'e.

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
//Append new record
  MemTableEh1.Append;
  MemTableEh1['Name'] := 'Value';
  MemTableEh1.Post;

//Edit current record
  MemTableEh1.Edit;
  MemTableEh1['Name'] := 'Value';
  MemTableEh1.Post;

//Delete current record
  MemTableEh1.Delete;
end;

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 10 июл 2023, 07:04 
Не в сети

Зарегистрирован: 03 мар 2017, 07:12
Сообщений: 91
EhLibSupport писал(а):
Код:
//Edit current record
  MemTableEh1.Edit;
  MemTableEh1['Name'] := 'Value';
  MemTableEh1.Post;


Именно так и делал.
EhLib 9.3 для Lazarus 2.0.8
Данные не редактировались.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 10 июл 2023, 07:06 
Не в сети

Зарегистрирован: 03 мар 2017, 07:12
Сообщений: 91
EhLibSupport писал(а):
Код:
//Delete current record
  MemTableEh1.Delete;


Удаление сделал так
Код:
i:=FormMain.MemTableEh_Cons.Rec.Index;
FormMain.MemTableEh_Cons.RecordsView.MemTableData.RecordsList.DeleteRecord(i)   


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB