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