Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Prism record lesen/speichern in D8 (https://www.delphipraxis.net/17927-record-lesen-speichern-d8.html)

haglo 11. Mär 2004 16:40


record lesen/speichern in D8
 
Wie kann ich einen record (myRecord1) in Delphi8 lesen+speichern.

In Delphi6 ging das lesen so:
Delphi-Quellcode:
var
FS: TFileStream;
begin
//read
try
FS := TFileStream.Create('c:\file.cfg', fmOpenRead);
FS.ReadBuffer(myRecord1, SizeOF(TmyRecord1));
except ....
In Delphi6 ging das speichern so:
Delphi-Quellcode:
var
FS: TFileStream;
begin
//read
try
FS := TFileStream.Create('c:\file.cfg', fmCreate);
FS.WriteBuffer(myRecord1, SizeOF(TmyRecord1));
except ....
Delphi8 bringt folgende Fehler:
[Fehler] utbGlobal.pas(89): Es gibt keine überladene Version von 'ReadBuffer', die man mit diesen Argumenten aufrufen kann

[edit=r_kerber]Delphi-Tags eingefügt. Mfg, r_kerber[/edit]

nicnac 2. Apr 2004 11:26

Re: record lesen/speichern in D8
 
Pobiers mal so:

Delphi-Quellcode:
var fs : TFileStream;
    MyData: Array of Byte;
begin
 fs := TFileStream.Create ('D:\usr\Bilder\0006a.jpg',fmOpenRead);
 SetLength(MyData, fs.Size );
 fs.Read(MyData, 0, System.Convert.ToInt32(fs.Size));
 fs.Destroy;
...
Nur wie man die Daten dann in ein BLOB-Feld der Datenbank bekommt....

[edit=r_kerber]Delphi-Tags eingefügt. Mfg, r_kerber[/edit]

nicnac 2. Apr 2004 14:16

Re: record lesen/speichern in D8
 
... und schickt man's in die Datenbank!!!

Delphi-Quellcode:
procedure TWebForm1.Button2_Click(sender: System.Object; e: System.EventArgs);
var fs : TFileStream;
    MyData: Array of Byte;
    n     : Integer;
begin

  fs := TFileStream.Create ('D:\usr\Bilder\0006a.jpg',fmOpenRead);
  SetLength(MyData, fs.Size );
  n :=fs.Size;
    fs.Read(MyData, 0, System.Convert.ToInt32(fs.Size));
  fs.Destroy;

  TextBox1.Text:= System.Convert.ToString(n);

  BdpCommand1.CommandText := 'insert into T_UPLOAD(FNAME, DATEN) values (:FNAME, :DATEN)';
  BdpCommand1.Parameters.Add('FNAME',bdpType.String).Value :='1';
  BdpCommand1.Parameters.Add('DATE',bdpType.Blob,bdpType.stBinary ,n).Value:=MyData;

  BdpConnection1.Open;
  BdpCommand1.ExecuteNonQuery;
  BdpConnection1.Close;
end;
[edit=r_kerber]Code- durch Delphi-Tags ersetzt. Mfg, r_kerber[/edit]

Mario 21. Mär 2005 09:03

Record lesen/speichern in Net
 
Da das ReadBuffer in .Net nicht mehr mit Records funktioniert, muss man mit Serialisierung arbeiten. Hier ein kleines Beispiel:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, System.ComponentModel, Borland.Vcl.StdCtrls,
  System.Runtime.Serialization.Formatters.Binary;

type
  [Serializable()]
  TMyRec = packed record
    FValue1 : Double;
    FValue2 : String;
  end;

  [Serializable()]
  TData = class
  private
    FValue1,
    FValue2: String;
    FRec: TMyRec;
  [NonSerialized()] FValue3: String;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.nfm}

procedure TForm1.Button1Click(Sender: TObject);
var aData: TData;
    aRec: TMyRec;
    aFileStream: TFileStream;
    aFormatter: BinaryFormatter;
begin
  aData := TData.Create;
  aData.FValue1 := 'Wert 1';
  aData.FValue2 := 'Wert 2';
  aData.FValue3 := 'Wert 3';
  aData.FRec.FValue1 := 0.123;
  aData.FRec.FValue2 := 'abc';
  aRec.FValue1 := 0.123;
  aRec.FValue2 := 'abc';

  aFileStream := TFileStream.Create('test.dat', fmCreate);
  aFormatter := BinaryFormatter.Create;
  aFormatter.Serialize(aFileStream, aData);

  aFileStream := TFileStream.Create('test2.dat', fmCreate);
  aFormatter := BinaryFormatter.Create;
  aFormatter.Serialize(aFileStream, aRec);
end;

procedure TForm1.Button2Click(Sender: TObject);
var aData: TData;
    aRec: TMyRec;
    aFileStream: TFileStream;
    aFormatter: BinaryFormatter;
begin
  aFileStream := TFileStream.Create('test.dat', fmOpenRead);
  aFormatter := BinaryFormatter.Create;

  aData := TData(aFormatter.Deserialize(aFileStream));

  ShowMessage(aData.FValue1);
  ShowMessage(aData.FValue2);
  ShowMessage(aData.FValue3);

  aFileStream := TFileStream.Create('test2.dat', fmOpenRead);
  aFormatter := BinaryFormatter.Create;

  aRec := TMyRec(aFormatter.Deserialize(aFileStream));
  ShowMessage(aRec.FValue1.ToString);
  ShowMessage(aRec.FValue2);
end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz