2009-08-07 11 views
0

ClientDataSetでストリーミングするためのデータの保存に問題があります。TClientDataSet - SaveToStreamがアクセス違反をスローする

私はClientDataSetの中にデータを入れて、にしてみてください:

... 
var 
strmBENU: TMemoryStream; 


implementation  
... 

TForm1.Button1Click(Sender: TObject); 
begin 
    ClientDataSet1.SaveToStream(strmBENU); 
end; 

... 

クリックButton1のは、ここで私が得るものです:モジュール内のアドレス0049CEB2で

アクセス違反 'Project2.exe'。アドレス00000000を読む。

何が間違っているのですか?

答えて

2

NULL参照のように見えます。 strmBENUをインスタンス化しましたか?

+0

ニース、私はそれをインスタンス化し、私は例外がproject2.exeでスローされたClientDataSet2.LoadfromStream(strBENU) しようとすると、今では言う:EDatabaseError:「ClientDataSet2:欠落しているデータ・プロバイダまたはDataPackage 。プロセスが停止しました。 – Acron

+0

CDS2にプロバイダ名を挿入するのを忘れた。ストリームからロードしてCDS2を開くと、私のTDBGrid2にはデータがありません – Acron

+0

は、データソースをDBGridに接続していないというエラーのために失敗しました。 質問今すぐ。それをソケットでどうやって得るのか...それはすでにもう一つの質問です。 http://stackoverflow.com/questions/1244465/software-design-tier-2-application-with-clientdataset-and-sockets – Acron

3

おそらくストリームは作成されません。これを試してみてください:

TForm1.Button1Click(Sender: TObject); 
var 
    strmBENU: TMemoryStream; 
begin 
    strmBENU := TMemoryStream.Create; 
    try 
    ClientDataSet1.SaveToStream(strmBENU); 
    // do stuff with stream 
    finally 
    strmBENU.Free; 
    end; 
end; 
+0

コメントを見るMitch Wheats answer – Acron