Forum > LCL

[SOLVED} Virtual Strint Tree Load Error

(1/1)

Pe3s:
Hello, I have a code that saves and loads data into a Virtual String Tree, I have a question why the code causes an access violation error with more than 2 columns


--- 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 TForm1.Button2Click(Sender: TObject);var  FS: TStream;  CNT, I: Integer;  Node: PVirtualNode;  Data: PData;begin  VST.Clear;  FS := TFileStream.Create(Application.Location + 'baza.vst', fmOpenRead or fmShareDenyNone);  try    CNT := FS.ReadWord;    if CNT > 0 then    begin      I := 1;      while I <= CNT do      begin        Node := VST.AddChild(nil);        Data := VST.GetNodeData(Node);        FS.Read(Data^, SizeOf(TData) -2*SizeOf(String));        Data^.Imie := FS.ReadAnsiString;        Data^.Nazwisko := FS.ReadAnsiString;        Inc(I);      end;    end;  finally    FS.Free;  end;end; procedure TForm1.Button3Click(Sender: TObject);var  FS: TStream;  Node: PVirtualNode;  Data: PData;begin  FS := TFileStream.Create(Application.Location + 'baza.vst', fmCreate or fmShareDenyWrite);  try    FS.WriteWord(VST.RootNodeCount);    Node := VST.GetFirst;    while Assigned(Node) do  begin    Data := VST.GetNodeData(Node);    FS.Write(Data^, SizeOf(TData) -2*SizeOf(String));    FS.WriteAnsiString(Data^.Imie);    FS.WriteAnsiString(Data^.Nazwisko);    Node := VST.GetNext(Node);  end;  finally    FS.Free;  end;end; 

Ericktux:
Hello friend, I currently use this code, I hope it helps you.


--- 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 TForm1.VSTGetNodeDataSize(Sender: TBaseVirtualTree;  var NodeDataSize: Integer);begin  NodeDataSize := SizeOf(TData);  // important to put if error exception appearsend; procedure TForm1.VSTLoadNode(Sender: TBaseVirtualTree; Node: PVirtualNode;  Stream: TStream);  var    Data: Pdata;    Len: Integer;  begin    Data := VST.GetNodeData(Node);    //NewNode:=Sender.GetNodeData(Node);         Stream.Read(Len, SizeOf(Len));  SetLength(Data^.Fnombre, Len);  Stream.Read(PChar(Data^.Fnombre)^, Len * SizeOf(Data^.Fnombre[1]));       Stream.Read(Len, SizeOf(Len));  SetLength(Data^.Fapellido, Len);  Stream.Read(PChar(Data^.Fapellido)^, Len * SizeOf(Data^.Fapellido[1]));       Stream.Read(Len, SizeOf(Len));  SetLength(Data^.Fedad, Len);  Stream.Read(PChar(Data^.Fedad)^, Len * SizeOf(Data^.Fedad[1]));       Stream.Read(Len, SizeOf(Len));  SetLength(Data^.Ftrabajando, Len);  Stream.Read(PChar(Data^.Ftrabajando)^, Len * SizeOf(Data^.Ftrabajando[1]));      //FImageIndex   //Stream.Read(PChar(Data^.FImageIndex)^, SizeOf(Data^.FImageIndex));      // load cImageIndex  Stream.Read(Data^.FImageIndex, SizeOf(Data^.FImageIndex));  end; procedure TForm1.VSTSaveNode(Sender: TBaseVirtualTree; Node: PVirtualNode;  Stream: TStream);  var     data: Pdata;     len: Integer;  begin  Data := VST.GetNodeData(Node); Len := Length(Data^.Fnombre);Stream.Write(Len, SizeOf(Len));Stream.Write(PChar(Data^.Fnombre)^, Length(Data^.Fnombre) * SizeOf(Data^.Fnombre[1])); Len := Length(Data^.Fapellido);Stream.Write(Len, SizeOf(Len));Stream.Write(PChar(Data^.Fapellido)^, Length(Data^.Fapellido) * SizeOf(Data^.Fapellido[1])); Len := Length(Data^.Fedad);Stream.Write(Len, SizeOf(Len));Stream.Write(PChar(Data^.Fedad)^, Length(Data^.Fedad) * SizeOf(Data^.Fedad[1])); Len := Length(Data^.Ftrabajando);Stream.Write(Len, SizeOf(Len));Stream.Write(PChar(Data^.Ftrabajando)^, Length(Data^.Ftrabajando) * SizeOf(Data^.Ftrabajando[1])); //FImageIndex//Stream.Write(Data^.FImageIndex, SizeOf(Data^.FImageIndex));//Stream.Write(Data^.FImageIndex, SizeOf(Data^.FImageIndex)); // store cImageIndex  Stream.Write(Data^.FImageIndex, SizeOf(Data^.FImageIndex));  end; procedure TForm1.Button2Click(Sender: TObject);  // botón para guardarbegin  VST.SaveToFile('filename.dat'); end; procedure TForm1.Button3Click(Sender: TObject);  // botón para abrirbegin  VST.LoadFromFile('filename.dat');end;


Pe3s:
@Ericktux Thank you friend, I will check

Pe3s:
@Ericktux The code works, I can ask for read and write hints of such types as Integer, float, TTime

Navigation

[0] Message Index

Go to full version