Delphi: using TClientDataset as an in-memory dataset
Solution 1
At runtime you can use table.CreateDataset
or if this is on a design surface you can right click on the CDS and click create dataset. You need to have specified columns/types for the CDS before you can do this though.
Solution 2
If it helps further, here is a piece of code where I created a ClientDataset that is used as an in-memory table:
procedure TfrmPRMain.ConfigureDataset;
begin
With cdsMain do begin
FieldDefs.Add('bDelete', ftBoolean);
FieldDefs.Add('sSource', ftString, 10);
FieldDefs.Add('iSection', ftInteger);
FieldDefs.Add('iOrder', ftInteger);
FieldDefs.Add('sBranch', ftString, 10);
FieldDefs.Add('sPulseCode', ftString, 10);
FieldDefs.Add('sCode', ftString, 10);
FieldDefs.Add('dtWorkDate', ftDate);
FieldDefs.Add('iWorkWeek', ftInteger);
FieldDefs.Add('sName', ftString, 50);
CreateDataSet;
LogChanges := False;
Open;
end;
end;
You can just substitute your own data information and go. Jack
Solution 3
Don't forget to include MIDAS.DLL in your installation or simply include MidasLib in uses clause. Otherwise using TClientDataSet
will raise an error on client's machine. Maybe it's obvious, but I actually forgot this once.
Solution 4
You can use table.CreateDataSet
Solution 5
The code from this page doesn't work in ANY Delphi version. A call to CreateDataSet already puts the dataset into active state ("opened"). You should use .CreateDataSet OR .Open. Not both.
Use .Open when you want to fetch data from a Provider (via ProviderName property) and .CreateDataSet when you want to populate the Dataset by yourself.
BTW: For an in depth reference about ClientDataSets and its features take a look on excellent Cary Jensen articles on CodeGear Developer Network (read the oldest ones, first)
Mason Wheeler
A lifelong programmer who's been coding in Delphi since its initial release and currently makes a living at it.
Updated on July 20, 2022Comments
-
Mason Wheeler almost 2 years
According to this page, it's possible to use
TClientDataset
as an in-memory dataset, completely independent of any actual databases or files. It describes how to setup the dataset's table structure and how to load data into it at runtime. But when I tried to follow its instructions in D2009, step 4 (table.Open
) raised an exception. It said that it didn't have a provider specified.The entire point of the example on that page is to build a dataset that doesn't need a provider. Is the page wrong, is it outdated, or am I missing a step somewhere? And if the page is wrong, what do I need to use instead to create a completely independent in-memory dataset? I've been using
TJvMemoryData
, but if possible I'd like to reduce the amount of extra dependencies that my dataset adds into my project.