2015-09-03 26 views
0

這是一個非常簡短的描述,我如何將數據輸入數據庫。複製整個記錄然後插入它

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; 

回答

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; 

注:這個解決方案應該工作,除非有具體日期的多個記錄。我推測,沒有。如果有,則不應按日期選擇,而應按主鍵列進行選擇。

+0

Uhhh雷內,你是對的。我一直都是盲人。事實上,我所需要的只是對日期和密碼的更新查詢:a2,就像您建議的主鍵。謝謝! – user763539

0

您可以通過使用cxGridTableView您使用的是像這樣的DataControllerColumns財產克隆記錄 -

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傳遞給上述例程。

+0

Andy,謝謝你的回覆。不知道你的意思是「在這裏修改你的日期」。我怎麼做 ? – user763539

+0

使用'View.Columns [<您的日期字段的索引>]。EditValue:= <您需要的日期>;' –

+0

請參閱最後一次編輯+不理解此內容「將網格視圖的FocusedRecordIndex傳遞給上述例程。 – user763539

相關問題