和Ares的对话(关于更新当前记录)

简介: temperature010203 Ares 15:02:10 Check(DSCursor.ModifyRecord(ActiveBuffer)); Mofen 14:58:06 就这样OK了? Mofen 14:58:25 谢谢了 Mofen 14:58:32 我试一下。

temperature010203
Ares 15:02:10
Check(DSCursor.ModifyRecord(ActiveBuffer));
Mofen 14:58:06
就这样OK了?
Mofen 14:58:25
谢谢了
Mofen 14:58:32
我试一下。:)
Ares 15:02:54
function TAcbsClientDataSet.LoadBlobData(FieldName: string): boolean;
var
  F1, F2 : TField;
  V : Variant;
  Stream, Stream1 : TStream;
begin
  Result := False;
  F1 := FindField(FieldName);
  if not F1.IsNull then
    Exit;

  F2 := FindField(Copy(FieldName, 1, Length(FieldName) - 4));
  if (F1 <> nil) and (F2 <> nil) and (F2 is TNumericField) and (F2.AsInteger > 0) then
  begin
    Check(DSBase.SetProp(dspropLOGCHANGES, Integer(False)));
    try
      V := Service.GetBlobData(F2.AsInteger);
      if not VarIsNull(V) then
      begin
        UpdateCursorPos;
        Stream := TAcbsUtils.VariantToStream(V);
        Stream1 := Self.CreateBlobStream(F1, bmRead);
        try
          Stream.Position := 0;
          TAcbsClientBlobStream(Stream1).Truncate;
          Stream1.CopyFrom(Stream, Stream.Size);
          Result := True;
        finally
          Stream.Free;
          Stream1.Free;
        end;
        Check(DSCursor.ModifyRecord(ActiveBuffer));
      end;
    finally
      Check(DSBase.SetProp(dspropLOGCHANGES, Integer(True)));
    end;
  end else
    Result := False;
end;
Ares 15:03:35
要自己写个控件,修改ActiveBuffer就好了
Mofen 14:59:14

Mofen 14:59:21

Mofen 14:59:56
我想做个刷新当前记录的方法
Ares 15:17:50
那个更简单啊
Mofen 15:13:59
是怎么做的?
Mofen 15:14:12
我打算手动从数据库里面重新取过
Ares 15:18:51
function Refresh(               { Refresh dataset }
        NewPacket    : PSafeArray;  { New updated packet }
        iClientData  : LongWord;       { Client data }
        pfReconcile  : pfDSReconcile { Callback for resolving conflicts }
    ): DBResult; stdcall;
Mofen 15:15:11
这个是你自己写的吗?
Ares 15:19:50
DSCursor.RefreshRecord(VarToDataPacket(NewData))
Ares 15:19:57
DsIntf里的
Ares 15:20:19
function RefreshRecord( { Refresh details/blobs for this record, and all
                             'current' records above, if any }
        Packet  : PSafeArray        { New updated pickle }
    ): DBResult; stdcall;
Mofen 15:16:22
哦,我这个cds可能不能这样做
Mofen 15:16:41
我的手动赋值data的
Ares 15:21:40
我们基本也是手动的
Ares 15:21:59
直接用的TClientDataSet吗?
Mofen 15:17:51
那你刷新当前记录用的是哪个呢?
Mofen 15:17:57
不是,继承了
Ares 15:23:34
1:获取需要刷新的数据包
2:按TclientDataSet的internalFetch方法写刷新
Mofen 15:20:25
好,3Q,我现在去试下。


procedure TCustomClientDataSet.InternalFetch(Options: TFetchOptions);
var
  DataPacket: TDataPacket;
  NewData: OleVariant;
  BaseDS: TCustomClientDataSet;
begin
  { Throw error if we are closed, but not if we are in the middle of opening }
  if not Assigned(DSCursor) then CheckActive;
  UpdateCursorPos;
  Check(DSCursor.GetRowRequestPacket(foRecord in Options, foBlobs in Options,
    foDetails in Options, True, DataPacket));
  DataPacketToVariant(DataPacket, NewData);
  BaseDS := Self;
  while Assigned(BaseDS.FParentDataSet) do BaseDS := BaseDS.FParentDataSet;
  NewData := BaseDS.DoRowRequest(NewData, Byte(Options));
  UpdateCursorPos;
  Check(DSCursor.RefreshRecord(VarToDataPacket(NewData)));
  if not Active then Exit;
  DSCursor.GetCurrentRecord(ActiveBuffer);
  if Options = [foDetails] then
    DataEvent(deDataSetChange, 0);
end;

目录
相关文章
|
2月前
|
Linux 开发工具 数据安全/隐私保护
codigger体验过程记录
【11月更文挑战第2天】codigger的体验过程
|
3月前
|
持续交付 数据库 Docker
待学习内容记录
待学习内容记录
如何进行需求评审后续跟踪和更新?附模板
如何进行需求评审后续跟踪和更新?附模板
161 0
|
数据库
流程历史记录查询
流程历史记录查询
|
JSON JavaScript 数据格式
get 方式提交新闻防止新闻被覆盖掉|学习笔记
快速学习 get 方式提交新闻防止新闻被覆盖掉
get 方式提交新闻防止新闻被覆盖掉|学习笔记
|
JavaScript 开发者
get方式提交新闻防止新闻被覆盖掉(补充说明)|学习笔记
快速学习 get 方式提交新闻防止新闻被覆盖掉(补充说明)
get方式提交新闻防止新闻被覆盖掉(补充说明)|学习笔记
|
Ubuntu Unix Shell
hi3559 部分操作指令记录【不定期更新】
hi3559 部分操作指令记录 配网关 ,配时间,etc...
131 0
hi3559 部分操作指令记录【不定期更新】
|
人工智能 程序员 开发者
【你说,我在 】创建意图,实现查天气的单轮对话|学习笔记
快速学习【你说,我在 】创建意图,实现查天气的单轮对话
|
人工智能 自然语言处理 Java
【如何实现多轮对话 】新增查空气质量的意图,实现多轮对话|学习笔记
快速学习【如何实现多轮对话 】新增查空气质量的意图,实现多轮对话
|
前端开发
前端工作总结107-修改记录取消文本提示ele提示
前端工作总结107-修改记录取消文本提示ele提示
134 0