Forum > Database

BufDataSet - LoadFromFile problem

(1/2) > >>

HappyLarry:
In BufDataSet, I can not get LoadFromFile to work.
I have tried both

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---     T.LoadFromFile('Names.bds');
and

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---          T.Edit;     T.LoadFromFile('Names.bds');     T.Post;but neither shows the record.

All help gratefully received.

Here is my test program

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---program Loadtest;uses  db,BufDataset; var  T:TBufDataSet; begin     //Create a dataset, add a record and save it     T:=TBufDataset.Create(nil);     T.FieldDefs.Add('Name',ftString,20);     T.CreateDataset;     T.Append;     T.Fields[0].value:='Fred';     T.Post;      writeln('Before Save :',T.Fields.FieldByName('Name').AsString);      T.SaveToFile('Names.bds');     T.Free;      //Create a dataset, load the file and show it     T:=TBufDataset.Create(nil);     T.FieldDefs.Add('Name',ftString,20);     T.CreateDataset;     //T.Edit;     T.LoadFromFile('Names.bds');     //T.Post;     writeln('After Load :',T.Fields.FieldByName('Name').AsString);      T.free;    writeln('------ done ----------');   readln;end. 


howardpc:
LoadFromFile creates the data set.
All you want after saving the data set to file is this:


--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---//Create a dataset, load the file and show it  T:=TBufDataset.Create(nil);  T.LoadFromFile('Names.bds');  writeln('After Load :',T.Fields.FieldByName('Name').AsString);  T.free;    

ttomas:
This work OK

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---  //Create a dataset, load the file and show it  T:=TBufDataset.Create(nil);//---->  T.FieldDefs.Add('Name',ftString,20);   //---->  T.CreateDataset;  //T.Edit;  T.LoadFromFile('Names.bds'); 

wp:
Or do this:

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---T := TBufDataset.Create(nil);T.FileName := 'Names.bds';T.Open;Having specified the filename will cause automatic saving of the file if the dataset is closed later.

HappyLarry:
@ 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:

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---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.

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---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. 

Navigation

[0] Message Index

[#] Next page

Go to full version