1

DataSnap を使用して XML ファイルをサーバーからクライアントにストリーミングしようとしています。ldsandon の助けを借りて、embarcadero からサンプルをダウンロードすることはできましたが、それをたどることができません。

プログラムの擬似はこのように動作するはずです。

クライアントは、コンボボックスで選択された xml ファイルをサーバーに要求します。サーバーは、クライアントが選択した xml ファイルをクライアントにロードします。

私は Delphi DataSnap を使用してそれを理解しようとしています。そうでない場合は、ファイルの転送にシナプスまたはインディを使用しますが、Datasnap が興味深いことがわかりました。

可能であれば、誰かが私を助けてくれますか?

どうもありがとう。

私を助けてください、私はあなたの助けが非常に必要です..ありがとう、そしてありがとう

このリンクを見つけましたが、それを TFileStream に変換する方法がわかりませんでした

4

1 に答える 1

-1

// サーバ側

function TServerMethods1.GetCDSXML(SQL: String; var FileSize: Integer): TStream;
begin

  QryMisc.Close;
  QryMisc.SQL.Text := SQL;
  CDSMisc.Open;
  Result := TMemoryStream.Create;
  try
    CDSMisc.SaveToStream(Result, dfXML);
    FileSize := Result.Size; // not CDSMisc.DataSize;
    Result.Position := 0; // Seek not implemented in abstract class
  finally
    CDSMisc.Close;
  end;

end;

// クライアント側

procedure TClientModule1.PopMiscCDS(SQL: String);
const
   BufSize = $8000;
var
   RetStream: TStream;
   Buffer: PByte;
   MemStream: TMemoryStream;
   BytesRead: Integer;
   FileSize: Integer;
begin
   try
     MemStream := TMemoryStream.Create;
     GetMem(Buffer, BufSize);
     try
       //---------------------------------------------------------
       RetStream := ServerMethods1Client.GetCDSXML(SQL, FileSize);
       //---------------------------------------------------------
       repeat
         BytesRead := RetStream.Read(Pointer(Buffer)^, BufSize);
         if BytesRead > 0 then
           MemStream.WriteBuffer(Pointer(Buffer)^, BytesRead);
       until BytesRead < BufSize;

       if FileSize <> MemStream.Size then
         raise Exception.Create('Error downloading xml');

       MemStream.Seek(0, TSeekOrigin.soBeginning);
       CDSMisc.Close;
       CDSMisc.LoadFromStream(MemStream);

     finally
       FreeMem(Buffer, BufSize);
       MemStream.Free;
     end;

   except
     on E: Exception do
     begin
        ShowMessage(E.Message);
     end;
   end;

end;
于 2016-02-04T13:21:46.200 に答える