Bill Meyer 337 Posted January 6, 2022 (edited) I am using an FDMemTable in a very simple application. I am using Alexandria, but I get the same error in Sydney. I need to ensure before loading that the dataset is empty, so, I do this: function TdMain.ProcessFileList(const FileList: TStrings): Integer; var fn: TmdFileName; s: string; sld: TStringList; begin if not fdmAllFiles.Active then fdmAllFiles.CreateDataSet else begin fdmAllFiles.Open; fdmAllFiles.EmptyDataset; // throws exception end; The FDMemTable is static on the data module, and the fields are created at design time. When I call this routine a second time, the dataset has records, and so I ensure it is open, and call EmptyDataset. I then get this error: I have tried getting a bookmark before the call, and it makes no difference. Interestingly, I have found no examples of using EmptyDataset in my searching. Edited January 6, 2022 by Bill Meyer Share this post Link to post
Lajos Juhász 293 Posted January 6, 2022 I cannot reproduce this in a simple test program. What I did is placed a TFDMemTable into a form: object FDMemTable1: TFDMemTable FetchOptions.AssignedValues = [evMode] FetchOptions.Mode = fmAll ResourceOptions.AssignedValues = [rvSilentMode] ResourceOptions.SilentMode = True UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates] UpdateOptions.CheckRequired = False UpdateOptions.AutoCommitUpdates = True Left = 304 Top = 224 object FDMemTable1a: TIntegerField FieldName = 'a' end object FDMemTable1b: TStringField FieldName = 'b' Size = 150 end end and a button with the following onclick event: procedure TForm1.Button1Click(Sender: TObject); begin if not FDMemTable1.Active then FDMemTable1.CreateDataSet else begin // FDMemTable1.Open; <- There is no need to do this Active is true FDMemTable1.EmptyDataSet; end; FDMemTable1.Append; FDMemTable1['a']:=1; FDMemTable1['b']:='1'; FDMemTable1.Append; FDMemTable1['a']:=2; FDMemTable1['b']:='2'; FDMemTable1.Append; FDMemTable1['a']:=3; FDMemTable1['b']:='3'; FDMemTable1.Append; FDMemTable1['a']:=4; FDMemTable1['b']:='4'; FDMemTable1.Post; end; It's working with multiple clicks. Share this post Link to post
Bill Meyer 337 Posted January 6, 2022 Thanks for your efforts. I went to the smallest possible test program, and I get no error. As to the cause of the problem in the program where I first saw it, I am at a loss. Will come back to it later, and see whether I am able to isolate a cause. Share this post Link to post