FDMemTable 右键复制当前行

zuilu5339 2018-06-15 12:51:27
F_Kind:=FDMemTable2.FieldByName('F_Kind').AsString;
F_Unit:=FDMemTable2.FieldByName('F_Unit').AsString;

FDMemTable2.append;
FDMemTable2.FieldByName('F_Type').Value:=F_Type;
FDMemTable2.FieldByName('F_Unit').Value:=F_Unit;
这是手动的

我想根据数据库来,哪些字段设置可以复制行就复制当前行


with FDMemTable1 do
begin
while not Eof do
begin
if DBGridEh1.FieldColumns[FieldByName('F_field').Value].DisplayText<>'' then
F_Type:=DBGridEh1.FieldColumns[FieldByName('F_field').Value].DisplayText;
next;
FDMemTable2.append;
FDMemTable2.FieldByName('F_Color').Value:=F_Type;
end;
end;
类似这样
...全文
1160 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zuilu5339 2018-06-21
  • 打赏
  • 举报
回复
引用 5 楼 lynmison 的回复:
弄个临时数据集(更新模式用批量更新,目的是不提交数据到数据库),复制的时候,把源数据当前记录直接克隆到临时数据集。
粘贴的时候,从临时数据集插入到目标数据集就可以。


关键只是复制,append而已,不是插入
天行归来 2018-06-21
  • 打赏
  • 举报
回复
弄个临时数据集(更新模式用批量更新,目的是不提交数据到数据库),复制的时候,把源数据当前记录直接克隆到临时数据集。
粘贴的时候,从临时数据集插入到目标数据集就可以。
zuilu5339 2018-06-18
  • 打赏
  • 举报
回复
var arr:array [0..10] of string; I:integer; begin arr[0]:=FDMemTable1.Fields[0].AsString; arr[1]:=FDMemTable1.Fields[1].AsString; arr[2]:=FDMemTable1.Fields[2].AsString; arr[3]:=FDMemTable1.Fields[3].AsString; FDMemTable1.Append; FDMemTable1.Fields[0].AsString:=arr[0]; FDMemTable1.Fields[1].AsString:=arr[1]; FDMemTable1.Fields[2].AsString:=arr[2]; FDMemTable1.Fields[3].AsString:=arr[3]; end; 这个方式也不行 不过我们也不知道有多少行,所以能不能用i来代替数组里面的序号,i是字段的序号
zuilu5339 2018-06-18
  • 打赏
  • 举报
回复
procedure CopyData(FrData,ToData:TDataSet;NotCopyField:String;Action:String;isPost:Boolean;isCopySysField:Boolean=False); var I:integer; StrList:TStringList; begin if not (Todata.State in [dsEdit,dsInsert]) then begin if Action = 'I' then ToData.Insert else if Action = 'E' then ToData.Edit end; StrList := TStringList.Create; if not isCopySysField then begin StrList.Add('CMCD'); StrList.Add('CREATEBY'); StrList.Add('CREATEDT'); StrList.Add('EDITBY'); StrList.Add('EDITDT'); StrList.Add('APPROVALBY'); StrList.Add('APPROVALDT'); StrList.Add('STATUSFLAG'); StrList.Add('REVISION'); end; Crlst(StrList,NotCopyField); Try for I:= 0 to Todata.FieldCount -1 do begin if (Todata.Fields[I].DataType <> ftAutoInc) and (Todata.Fields[I].FieldKind = fkData) and (StrList.IndexOf(ToData.Fields[I].FieldName) = -1) and (Frdata.Fields.FindField(Todata.Fields[I].FieldName) <> nil) then begin if not Frdata.Fields.FindField(Todata.Fields[I].FieldName).IsNull then Todata.Fields[I].Value := Frdata.Fields.FindField(Todata.Fields[I].FieldName).Value else Todata.Fields[I].Clear; end; end; if isPost then Todata.Post; Finally StrList.Free; end; end; 这种方式可以不
lyhoo163 2018-06-17
  • 打赏
  • 举报
回复
实质上是复制数据集中,当前行的数据,因为字段类型的关系,要以字符串的形式,保存字段的数据。同时字段数量,双是变化的。 因为,复制这样的数据,使用一个字符数组比较好。将各个字段的值,存入数组中。需要时再读出来。
zuilu5339 2018-06-15
  • 打赏
  • 举报
回复
根据配置复制当前行,自己顶一下

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧