如何實現選取多筆數據進行過帳 |
答題得分者是:Fishman
|
guohua_fu
一般會員 發表:44 回覆:50 積分:18 註冊:2003-06-19 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi guohua_fu, 1.將 DBGrid --> Options --> dgMultiSelect 設為 True
2.處理
procedure TQueryForm.Button_InsertClick(Sender: TObject); var I : Integer; V_MESSAGE : String; begin Screen.Cursor := crHourGlass; IF DBGrid_ITEM_FOR_INSERT.SelectedRows.Count > 0 THEN BEGIN V_MESSAGE := '確定新增此 ' IntToStr(DBGrid_ITEM_FOR_INSERT.SelectedRows.Count) ' 筆資料 ??'; IF Application.MessageBox(PCHAR(V_MESSAGE),'新增確認',MB_ICONINFORMATION MB_OKCANCEL MB_DEFBUTTON2) = IDOK THEN BEGIN FOR I := 0 TO DBGrid_ITEM_FOR_INSERT.SelectedRows.Count - 1 DO BEGIN WITH DBGrid_ITEM_FOR_INSERT.DataSource.DataSet DO BEGIN GotoBookmark(pointer(DBGrid_ITEM_FOR_INSERT.SelectedRows.Items[I])); CDS_PRC_INSERT_FORECASTS.Close; CDS_PRC_INSERT_FORECASTS.Params.ParamByName('P_ORG_ID').AsString := CDS_QRY_ACCESS_COMPANY.FieldByName('ORG_ID').AsString; CDS_PRC_INSERT_FORECASTS.Params.ParamByName('P_PERIOD_YEAR').AsString := P_PERIOD_YEAR.Text; CDS_PRC_INSERT_FORECASTS.Params.ParamByName('P_PERIOD_MONTH').AsString := P_PERIOD_MONTH.Text; CDS_PRC_INSERT_FORECASTS.Params.ParamByName('P_USER_ID').AsString := CB_FND_USER_ID.Text; CDS_PRC_INSERT_FORECASTS.Params.ParamByName('P_USER_NAME').AsString := CB_USER_ID.Text; CDS_PRC_INSERT_FORECASTS.Params.ParamByName('P_MASTER_ORGANIZATION_ID').AsString := FieldByName('MASTER_ORGANIZATION_ID').AsString; CDS_PRC_INSERT_FORECASTS.Params.ParamByName('P_SALESREP_ID').AsString := CDS_QRY_ACCESS_SALES.FieldByName('SALESREP_ID').AsString; CDS_PRC_INSERT_FORECASTS.Params.ParamByName('P_INVENTORY_ITEM_ID').AsString := FieldByName('INVENTORY_ITEM_ID').AsString; CDS_PRC_INSERT_FORECASTS.Params.ParamByName('P_INSERT_TYPE').AsString := '2'; CDS_PRC_INSERT_FORECASTS.Execute; CDS_PRC_UPDATE_FORECASTS.Close; CDS_PRC_UPDATE_FORECASTS.Params.ParamByName('P_ORG_ID').AsString := CDS_QRY_ACCESS_COMPANY.FieldByName('ORG_ID').AsString; CDS_PRC_UPDATE_FORECASTS.Params.ParamByName('P_PERIOD_YEAR').AsString := P_PERIOD_YEAR.Text; CDS_PRC_UPDATE_FORECASTS.Params.ParamByName('P_PERIOD_MONTH').AsString := P_PERIOD_MONTH.Text; CDS_PRC_UPDATE_FORECASTS.Params.ParamByName('P_USER_ID').AsString := CB_FND_USER_ID.Text; CDS_PRC_UPDATE_FORECASTS.Params.ParamByName('P_USER_NAME').AsString := CB_USER_ID.Text; CDS_PRC_UPDATE_FORECASTS.Params.ParamByName('P_MASTER_ORGANIZATION_ID').AsString := FieldByName('MASTER_ORGANIZATION_ID').AsString; CDS_PRC_UPDATE_FORECASTS.Params.ParamByName('P_SALESREP_ID').AsString := CDS_QRY_ACCESS_SALES.FieldByName('SALESREP_ID').AsString; CDS_PRC_UPDATE_FORECASTS.Params.ParamByName('P_INVENTORY_ITEM_ID').AsString := FieldByName('INVENTORY_ITEM_ID').AsString; CDS_PRC_UPDATE_FORECASTS.Execute; CDS_QRY_FORECASTS.Refresh; END; END; Button_Cancel.OnClick(Sender); END; END; Screen.Cursor := crDefault; end;---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman |
guohua_fu
一般會員 發表:44 回覆:50 積分:18 註冊:2003-06-19 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi guohua_fu, 1.DBGrid --> Options --> dgMultiSelect 設為 True 方可進行多筆資料選取 2.
過帳 Button.OnClick:
procedure TForm1.Button1Click(Sender: TObject); var I : Integer; V_MESSAGE : String; begin Screen.Cursor := crHourGlass; if YourDBGrid.SelectedRows.Count > 0 then begin V_MESSAGE := '確定過帳此 ' IntToStr(YourDBGrid.SelectedRows.Count) ' 筆資料 ??'; if Application.MessageBox(PCHAR(V_MESSAGE),'新增確認',MB_ICONINFORMATION MB_OKCANCEL MB_DEFBUTTON2) = IDOK then begin for I := 0 to YourDBGrid.SelectedRows.Count - 1 do begin YourDataSet.GotoBookmark(pointer(YourDBGrid.SelectedRows.Items[I])); // 過帳處理程序 end; end; end; Screen.Cursor := crDefault; end;不知你看不懂得哪一部份? 發表人 -
------
Fishman |
guohua_fu
一般會員 發表:44 回覆:50 積分:18 註冊:2003-06-19 發送簡訊給我 |
謝謝Fishman大大,但處理程序部份還是看不太懂,小弟菜了!
procedure TForm1.BitBtn1Click(Sender: TObject);
var
I : Integer;
V_MESSAGE : String;
begin
Screen.Cursor := crHourGlass;
if dbgrideh1.SelectedRows.Count > 0 then
begin
V_MESSAGE := '確定過帳此 ' + IntToStr(dbgrideh1.SelectedRows.Count) + ' 筆資料 ??';
if Application.MessageBox(PCHAR(V_MESSAGE),'新增確認',MB_ICONINFORMATION + MB_OKCANCEL + MB_DEFBUTTON2) = IDOK then
begin
for I := 0 to dbgrideh1.SelectedRows.Count-1 do
begin
// 過帳處理程序
Adoquery1.Edit ;
Adoquery1.FieldByName('STA').AsBoolean :=True;
Adoquery1.Post ;
end;
end;
end;
Screen.Cursor := crDefault; end; end. 我這樣寫為什麼只能寫到最後一筆數據呢?小弟菜了!
======================
^_^ 相信自己,你是最棒的!
jacky
======================
------
jacky |
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi guohua_fu, 少了一行移動資料記錄的指令:
procedure TForm1.BitBtn1Click(Sender: TObject); var I : Integer; V_MESSAGE : String; begin Screen.Cursor := crHourGlass; if dbgrideh1.SelectedRows.Count > 0 then begin V_MESSAGE := '確定過帳此 ' IntToStr(dbgrideh1.SelectedRows.Count) ' 筆資料 ??'; if Application.MessageBox(PCHAR(V_MESSAGE),'新增確認',MB_ICONINFORMATION MB_OKCANCEL MB_DEFBUTTON2) = IDOK then begin for I := 0 to dbgrideh1.SelectedRows.Count-1 do begin GotoBookmark(Pointer(Adoquery1.SelectedRows.Items[I])); // 過帳處理程序 Adoquery1.Edit ; Adoquery1.FieldByName('STA').AsBoolean :=True; Adoquery1.Post ; end; end; end; Screen.Cursor := crDefault; end;---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman |
guohua_fu
一般會員 發表:44 回覆:50 積分:18 註冊:2003-06-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |