复制整条记录然后插入

copy entire record and then insert it

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

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;

这有效 ok.Data 得到 inserted.It 显示在 cxGrid1 中。

现在,我想做的是从这个 cxGrid1 复制整个记录(只有 selected 记录)并粘贴(插入)到不同的日期,那个 selected selected 在 PlannerCalendar1 中。

我使用 'send to the selected date' 选项实现了 cxgridpopup 菜单,但我不知道如何从 cxGrid1 复制基础数据。

objective是select日历中的一个日期然后到cxGrid1,select一个记录,右击它然后(使用弹出菜单选项)然后将整个 selected 记录插入新的 selected 日期。基本上是克隆记录,但要克隆到不同的日期。我该怎么做?

(PlannerCalendar1 是 TMS 组件)

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

编辑: 我试过这种方法,但行不通:

 Procedure CopyTableRecord(View: TcxGridTableView; IndexToCopy : Integer);
var i:integer;
PlannerCalendar1:TPlannerCalendar;
Begin
  View.DataController.Insert;
  For I := 0 To Pred(View.ColumnCount) Do
    View.Columns[I].EditValue := view.DataController.Values[1, I];
  View.Columns[1].EditValue := PlannerCalendar1.Date;
  View.DataController.Post(True);
End;

procedure TMain_Form.Sendto1Click(Sender: TObject);
begin
CopyTableRecord(cxGrid1DBTableView1, cxGrid1DBTableView1.DataController.FocusedRecordIndex);
end;

您可以使用您正在使用的 cxGridTableViewDataControllerColumns 属性 克隆记录,如下所示:-

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;

把网格视图的FocusedRecordIndex传给上面的例程

我会把数据和视图分开。那么为什么不走与插入新记录相同的路径呢?

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;

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

程序TFrm_Ana.cxButton69Click(Sender: TObject); 变量 degiskenDizimiz:Array 的变体; i:Integer; 开始

 SetLength(degiskenDizimiz,dataset.FieldCount);


for i := 0 to dataset.FieldCount-1 do
begin

  degiskenDizimiz[i]:= dataset.Fields[i].Value;


end;

dataset.Insert;

for i := 1 to dataset.FieldCount-1 do // start 1 because 0 possible index field autoincremantal 开始 dataset.Fields[i].Value:=degiskenDizimiz[i]; 结尾; dataset.Post; 结束;