線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1344
推到 Plurk!
推到 Facebook!

如何實現選取多筆數據進行過帳

答題得分者是:Fishman
guohua_fu
一般會員


發表:44
回覆:50
積分:18
註冊:2003-06-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-16 08:40:01 IP:211.96.xxx.xxx 未訂閱
各位大大: 目前我要將dbgrid裡面的多行數據進行選取,然後點擊[過帳]按鈕後所有選取的數據狀態進行變化,如何實現,謝謝! ====================== ^_^ 相信自己,你是最棒的! jacky ======================
------
jacky
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-16 08:53:03 IP:210.65.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-16 09:09:40 IP:211.96.xxx.xxx 未訂閱
dear fishman: 我還是看不太懂,對不起! 我的要求是比如我有10筆數據,其中我有1、3、5、6、7這幾筆要過帳,那我想按住ctrl鍵進行點選這5筆數據,然後按[過帳]即把這5筆數據給過帳了。 ====================== ^_^ 相信自己,你是最棒的! jacky ======================
------
jacky
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-16 09:48:51 IP:210.65.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-16 11:58:52 IP:211.96.xxx.xxx 未訂閱
謝謝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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-16 12:37:07 IP:210.65.xxx.xxx 未訂閱
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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-16 13:31:48 IP:211.96.xxx.xxx 未訂閱
謝謝Fishman的耐心,已搞定了,十萬分感謝! ====================== ^_^ 相信自己,你是最棒的! jacky ======================
------
jacky
系統時間:2024-05-20 14:07:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!