【问题标题】:TClientDataSet : TStream to VarBinaryTClientDataSet : TStream 到 VarBinary
【发布时间】:2014-04-29 14:19:49
【问题描述】:

我正在编写一个 REST 数据快照服务器,并且必须将 TStream 保存到 VarBinary(384) 字段。我尝试在现场创建 BlobStream,但尝试执行此操作时出现异常错误。

如何使用 DBExpress 保存到 VarBinary 字段?

with cdsInsertIssueActionTemplateDetail do
      begin
        Active := True;
        Insert();
        T11 := TMemoryStream.Create;
        DM.CopyStreamToMemoryStream(Template11, T11);
        BlobField := TBlobField(FieldByName('FingerTemplate'));
        BS := CreateBlobStream(BlobField, bmWrite); //Exception occurs here
        BS.CopyFrom(T11, T11.Size);
        T11.Free;
        BS.Free;
        Post();
        Active := False;
      end;

【问题讨论】:

  • 我尝试使用 TSQLQuery 参数来写入字段,但没有成功。 T11 := TMemoryStream.Create; DM.CopyStreamToMemoryStream(Template11, T11); Params.ParamByName('FingerTemplate').DataType := ftBlob; Params.ParamByName('FingerTemplate').LoadFromStream(Template11, ftBlob);在此收到“流读取错误”
  • 你确定FieldByName('FingerTemplate')实际上返回了TBlobField吗?您可以改用FieldByName('FingerTemplate') as TBlobStream

标签: delphi delphi-xe3 datasnap dbexpress tclientdataset


【解决方案1】:

我终于设法通过将 FingerTemplate 作为 TSQLQuery 中的参数来使其工作,如下所示:

插入 [dbo].[tblIssueActionTemplateDetail]([ActionUID],[FingerTemplate] ,[FingerTemplateIndex] ,[FingerIndex] , [IsDuress],[AddedOnDateTime] ,[LastModifiedDateTime]) 值 (:ActionUID, :FingerTemplate, :FingertemplateIndex, :FingerIndex,0, :DateTime, :DateTime)

将参数的DataType设为ftBlob

                begin
                  T21 := TMemoryStream.Create;
                  Template21.Position;
                  DM.CopyStreamToMemoryStream(Template21, T21);
                  BlobField := TBlobField(FieldByName('FingerTemplate'));
                   Params.ParamByName('FingerTemplate').SetBlobData(Template21, Template21.Size);
                  T21.Free;
                end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多