代码之家  ›  专栏  ›  技术社区  ›  user763539

复制整个记录,然后插入

  •  0
  • user763539  · 技术社区  · 9 年前

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

    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;
    

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

    现在,我要做的是从这个cxGrid1复制整个记录(只有选定的记录),并将其粘贴(插入)到不同的日期,即PlannerCalendar1中选定的日期。

    我用“发送到选定日期”选项实现了cxgridpopup菜单,但我不知道如何从cxGrid1复制底层数据。

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

    (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;
    
    3 回复  |  直到 9 年前
        1
  •  1
  •   René Hoffmann esd    9 年前

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

    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;
    

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

        2
  •  0
  •   Andy_D    9 年前

    可以使用 DataController 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;
    

    通过 FocusedRecordIndex 在上面的例程中。

        3
  •  0
  •   Serdar Bala    2 年前

    过程TFrm_Ana。cxButton69单击(发件人:TObject); 变量 degiskenDizimiz:变量数组; i: 整数; 开始

     SetLength(degiskenDizimiz,dataset.FieldCount);
    
    
    for i := 0 to dataset.FieldCount-1 do
    begin
    
      degiskenDizimiz[i]:= dataset.Fields[i].Value;
    
    
    end;
    

    数据集。插入;

    对于数据集i:=1。FieldCount-1不//开始1,因为0可能的索引字段自动递增 开始 dataset.Fields[i].Value:=degiskenDizimiz[i]; 终止 dataset.Post; 终止