I can't succeed defining CSVDataset1.FieldDefs in case when dataset is linked to existing CSV-file.
When dataset is opened, FieldDefs are overwritten with DataType=ftString and Size=255.
Is it a bug, an idea or I'm doing something wrong?
Test project attached.
First run - no CSV file - FieldDefs are OK - CSV file is created accordingly.
Second run - CSV file exist - FieldDefs are default - record appended to CSV in wrong format.
program TestCSVDS;
uses csvdataset, sysutils, db;
var CSVDataSet1: TCSVDataSet;
CSVFileName: String = 'data.csv';
I: Integer;
begin
CSVDataset1:=TCSVDataset.Create(nil);
try
CSVFileName:=ExtractFilePath(Paramstr(0)) + CSVFileName;
CSVDataset1.FileName:=CSVFileName;
CSVDataset1.CSVOptions.FirstLineAsFieldNames:=False;
CSVDataset1.FieldDefs.Add('Date and time', ftDateTime);
CSVDataset1.FieldDefs.Add('Duration', ftTime);
CSVDataset1.FieldDefs.Add('Event', ftString,40);
if FileExists(CSVFileName) then begin
Writeln('File '+CSVFileName+' exist');
end else begin
CSVDataset1.CreateDataset;
Writeln('File '+CSVFileName+' not exist');
end;
CSVDataset1.Open;
CSVDataset1.AppendRecord([EncodeDate(2023,03,03),EncodeTime(13,08,01,000),'Oleg']);
for I:= 0 to csvdataset1.FieldDefs.Count-1 do begin
Writeln('Record: ',I,', data type: ',csvdataset1.FieldDefs.Items[I].DataType,', data size: ', csvdataset1.FieldDefs.Items[I].Size);
end;
CSVDataset1.Close;
CSVDataset1.Free;
Readln;
except
end;
end.
File data.csv after 2 runs:
03.03.2023,13:08:01,Oleg
44988,"0,547233796296296",Oleg