复制整个记录,然后插入它

时间:2015-09-03 07:30:38

标签: delphi tcxgrid

这是我如何将数据输入数据库的简短描述。

import os
os.chdir("C:/path/To/directory/That/contains/The/module(s)")
import module1
os.chdir("C:/path/To/directory/That/contains/The/module(s)2")
import module2.submod1
os.chdir("C:/path/To/directory/That/contains/The/module(s)3")
from module3.submod2 import *
<rest_of_code>

这个工作正常。数据被插入。它显示在cxGrid1。

现在,我想要做的是从这个cxGrid1复制整个记录(只有选定的记录)并粘贴(插入)到另一个日期,在PlannerCalendar1中选择一个。

我将cxgridpopup菜单实现为&#39;发送到所选日期&#39;选项,但我不知道如何从cxGrid1复制基础数据。

目标是在日历中选择日期,然后转到cxGrid1,选择一条记录,右键单击它并(使用弹出菜单选项),然后将整个所选记录插入新选择的日期。基本上克隆记录但不同的日期。我怎么能这样做?

(PlannerCalendar1是TMS组件)

编辑:在https://www.devexpress.com/Support/Center/Question/Details/A302找到了一些信息 但不确定它是如何适合我的情况。

编辑: 我试过这种方式,它不会起作用:

procedure TMain_Form.AdvGlowButton1Click(Sender: TObject);
begin
MYQUERY.Close;
MYQUERY.SQL.Clear;
MYQUERY.SQL.Add('INSERT INTO MYTABLE (FOR_DATE,SOMETEXT) VALUES(:a1,:a2)');
MYQUERY.Params.ParamByName('a1').asDate :=PlannerCalendar1.Date;
MYQUERY.Params.ParamByName('a2').Value :=cxMemo1.Lines.Text ;
MYQUERY.ExecSQL;
end;

2 个答案:

答案 0 :(得分:1)

我将数据和视图分开。那么为什么不像插入新记录一样走路呢?

procedure TMain_Form.Sendto1Click(Sender: TObject);
begin
  MYQUERY.Close;
  MYQUERY.SQL.Clear;
  MYQUERY.SQL.Add('INSERT INTO MYTABLE (FOR_DATE, SOMETEXT) SELECT :a1, SOMETEXT FROM MYTABLE WHERE FOR_DATE = :a2');
  MYQUERY.Params.ParamByName('a1').asDate :=PlannerCalendar1.Date;
  MYQUERY.Params.ParamByName('a2').asDate := cxGrid1DBTableView1.DataController.Values[cxGrid1DBTableView1.DataController.FocusedRecordIndex,1];
  MYQUERY.ExecSQL;
end;

注意:除非特定日期有多条记录,否则此解决方案应该有效。我猜想,没有。如果有,则不应按日期选择,而应按主键列选择。

答案 1 :(得分:0)

您可以使用您正在使用的DataController的{​​{1}}和Columns属性来克隆记录: -

cxGridTableView

将网格视图的Procedure CopyTableRecord(View: TcxGridTableView; IndexToCopy : Integer); Begin View.DataController.Insert; For I := 0 To Pred(View.ColumnCount) Do View.Columns[I].EditValue := View.DataController.Values[IndexToCopy, I]; // Modify your Date field here... View.DataController.Post(True); End; 传递给上述例程。