@ All
Great answers - Thanks
Another problem: I have tried to write a procedure to load a text file. The text file record structure is (String, Integer, Real). I have written:
procedure LoadTextFile(Filename:string; var T:TBufDataSet);
var
MyFile:Text;
C1:string;
P1:integer;
A1:real;
begin
Assignfile(MyFile,FileName);
Reset(MyFile);
While not System.EOF(MyFile) do
begin
readln(MyFile,C1);
readln(MyFile,P1);
readln(MyFile,A1);
T.AppendRecord([C1, P1, A1]);
end;
CloseFile(MyFile);
end;
This works but is not generally usable, because it relies on the record structure being(String, Integer, Real),
Is there a way of writing it so that it works whatever the record structure, for instance if the record structure was (String, Integer, Integer, String);?
If it helps, here is the full program code.
program Loadtest;
uses
db,BufDataset;
var
T:TBufDataSet;
procedure SaveTextFile(Filename:string; T:TBufDataSet);
var
j:integer;
MyFile:text;
begin
Assignfile(MyFile,FileName);
Rewrite(MyFile);
T.First;
While not T.EOF do
begin
For j:= 0 to T.FieldCount-1 do
begin
writeln(MyFile,T.Fields[j].Value);
end;
T.next;
end;
CloseFile(MyFile);
end;
procedure LoadTextFile(Filename:string; var T:TBufDataSet);
var
MyFile:Text;
C1:string;
P1:integer;
A1:real;
begin
Assignfile(MyFile,FileName);
Reset(MyFile);
While not System.EOF(MyFile) do
begin
readln(MyFile,C1);
readln(MyFile,P1);
readln(MyFile,A1);
T.AppendRecord([C1, P1, A1]);
end;
CloseFile(MyFile);
end;
begin
//Create a dataset,
T:=TBufDataset.Create(nil);
T.FieldDefs.Add('C',ftString,20);
T.FieldDefs.Add('P',ftInteger);
T.FieldDefs.Add('A',ftFloat);
//add a record
T.CreateDataset;
T.Append;
T.Fields[0].value:='Belgium';
T.Fields[1].value:=11;
T.Fields[2].value:=32.5;
T.Post;
//Save
writeln('Before Save :',T.Fields.FieldByName('C').AsString);
SaveTextFile('Countries.txt', T);
//Clear Table
T.Delete;
writeln('After Delete :',T.RecordCount,' records');
//Reload
LoadTextFile('Countries.txt',T);
writeln('After Load :',T.Fields.FieldByName('C').AsString);
T.free;
writeln('------ done ----------');
readln;
end.