复制整条记录然后插入
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;
您可以使用您正在使用的 cxGridTableView
的 DataController
和 Columns
属性 克隆记录,如下所示:-
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;
结束;
这是对我如何将数据输入数据库的非常简短的描述。
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;
您可以使用您正在使用的 cxGridTableView
的 DataController
和 Columns
属性 克隆记录,如下所示:-
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; 结束;