程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 物料主文件維護功能的實現

物料主文件維護功能的實現

編輯:Delphi

 下面我們將演示如何利用Delphi完成物料主文件維護的功能。在該子窗體中,可以實現對【物料主文件】數據表中數據的插入、編輯、刪除和浏覽、查詢等各項操作。

  (1) 選擇New | Form菜單命令,新建一個窗體,將其Name屬性改為“materials”,並為其添加如圖3.34所示的控件。選擇Project | Options...菜單命令,將materials窗體從自動創建的窗體列表中刪除。

物料主文件維護功能的實現

  圖3.34  物料主文件維護窗體

  (2) 各控件的屬性設置如表3.5所示。

物料主文件維護功能的實現

  圖片看不清楚?請點擊這裡查看原圖(大圖)。

  表3.5  物料主文件維護窗體控件屬性設置

  為確保數據的安全性和完整性,面板中的所有數據集控件(主要是指面板中顯示數據的文本框)都只有在編輯、新增等按鈕按下時才能進行修改,其他情況下都保持只讀狀態,在編寫程序時就將所有的DBEdit控件和Edit控件以及Memo控件的的ReadOnly屬性設置為True,在需要編輯數據時才在代碼中將其只讀去掉,後面的控件屬性表格中不再就此一一說明,請讀者特別注意。

   (3) 另外,為使界面更加美觀,可以在窗體上放置一個ToolBar控件和兩個Pannel控件,將BitBtn控件放置在ToolBar上,並右擊ToolBar控件,在彈出的快捷菜單中選擇New Separator,添加分隔符,並將分割符的Style屬性設置為tbsDivider。將DataEdit控件和相應的標簽放在Pannel上。以上這些操作都不影響程序的功能,讀者可以參考配書光盤中提供的代碼自行設置。

 (4) 為【物料主文件維護】窗體添加事件處理代碼,如下。

    //-----------窗體顯示時,設置表中的列寬並初始化下拉列表框----- 
    procedure Tmaterials.FormShow(Sender: TObject); 
    begin 
      
    //設置列的寬度 
    dbgrid1.Columns[0].Width:=64; 
    dbgrid1.Columns[1].width:=80; 
    //設置計量單位下拉列表框中的內容 
    adoquery1.Close; 
    adoquery1.SQL.Clear; 
    adoquery1.SQL.Add('select distinct 計量單位 from 物料主文件'); 
    adoquery1.Open; 
    while not adoquery1.Eof do 
    begin 
    dbcombobox1.Items.Add(adoquery1.fIEldbyname('計量單位').AsString); 
    adoquery1.Next; 
    end; 
    //設置計劃類別下拉列表框中的內容 
    adoquery1.Close; 
    adoquery1.SQL.Clear; 
    adoquery1.SQL.Add('select 類別名稱,類別代碼 from 物料計劃類別'); 
    adoquery1.Open; 
    while not adoquery1.Eof do 
    begin 
    dbcombobox2.Items.Add(adoquery1.fIEldbyname('類別名稱').AsString); 
    dbcombobox3.Items.Add(adoquery1.fIEldbyname('類別代碼').AsString); 
    adoquery1.Next; 
    end; 
    end;

//-----------------顯示物料主文件中的物料類別的名稱-------------------- 
    //-----------該事件在datasource1的events屬性中添加-------- 
    procedure Tmaterials.DataSource1DataChange(Sender: TObject; Field: TFIEld); 
    var 
    num,temp:string; 
    begin 
    //showmessage(dbgrid1.FIElds[0].AsString); 
    //根據選取的數據記錄,查詢出它的詳細數據 
    num:=dbgrid1.FIElds[0].AsString; 
    adoquery1.Close; 
    adoquery1.SQL.Clear; 
    adoquery1.SQL.Add('select * from 物料主文件 where 物料編號='''+num+''''); 
    adoquery1.Open; 
      
    //顯示計劃類別的名稱(物料主文件中存儲的是其拼音編碼) 
    temp:=adoquery1.fIEldbyname('計劃類別').AsString; 
    adoquery1.Close; 
    adoquery1.SQL.Clear; 
    adoquery1.SQL.Add('select 類別名稱 from 物料計劃類別 where 類別代碼='''+temp+''''); 
    adoquery1.Open; 
    dbcombobox2.Text:=adoquery1.fIEldbyname('類別名稱').AsString; 
      
    end; 
    //--------------下一條記錄------------ 
    procedure Tmaterials.BitBtn3Click(Sender: TObject); 
    begin 
    datasource1.DataSet.Next; 
      
    end; 
    //--------------上一條記錄------------ 
    procedure Tmaterials.BitBtn2Click(Sender: TObject); 
    begin 
    datasource1.DataSet.Prior; 
    end; 
    //--------------首條記錄------------ 
    procedure Tmaterials.BitBtn1Click(Sender: TObject); 
    begin 
    datasource1.DataSet.First; 
    end; 
    //--------------末條記錄------------ 
    procedure Tmaterials.BitBtn4Click(Sender: TObject); 
    begin 
    datasource1.DataSet.Last; 
    end; 
      
    //---------點擊窗體的X形圖標時關閉窗體而不是最小化--------- 
    procedure Tmaterials.FormClose(Sender: TObject; var Action: TCloseAction); 
    begin 
    //當點擊子窗體的關閉按鈕時釋放關閉窗體,如果不設置這條代碼,將是最小化窗體而不是關閉 
    action:=cafree; 
    end;

 //----------查詢表中的數據並顯示-------------------- 
    procedure Tmaterials.BitBtn11Click(Sender: TObject); 
    begin 
    //查詢數據 
    adoquery2.Close; 
    adoquery2.SQL.Clear; 
    adoquery2.SQL.Add('select * from 物料主文件 where (物料編號 like ''%'+edit1.Text+'%'')and'); 
    adoquery2.SQL.Add('(物料名稱 like ''%'+edit2.Text+'%'')and(拼音編碼 like ''%'+edit3.Text+'%'')'); 
    adoquery2.Open; 
    //將查詢得到的數據通過clone命令復制到adotable中去 
    adotable1.Clone(adoquery2,ltUnspecifIEd); 
    end; 

    //---------在任何一個文本框上按enter鍵都能執行查詢--------- 
    procedure Tmaterials.Edit1KeyPress(Sender: TObject; var Key: Char); 
    begin 
    if key=#13 then 
     bitbtn11.Click; 
    end; 
      
    procedure Tmaterials.Edit2KeyPress(Sender: TObject; var Key: Char); 
    begin 
    if key=#13 then 
     bitbtn11.Click; 
    end; 
      
    procedure Tmaterials.Edit3KeyPress(Sender: TObject; var Key: Char); 
    begin 
    if key=#13 then 
     bitbtn11.Click; 
    end; 

    //------------新增一條記錄----------------- 
    procedure Tmaterials.BitBtn5Click(Sender: TObject); 
    begin 
    //在dbgrid中插入一行新的數據,並提示用戶在右邊文本框中修改 
    datasource1.DataSet.Insert; 
    showmessage('請在右邊的文本框中輸入新數據的詳細內容'); 
    //為數據文本框設置默認值,防止用戶輸入錯誤數值類型或者對不能為空的列輸入空值 
    dbedit1.Text:='0000'; 
    dbedit2.Text:='在此輸入物料名,該項不能為空'; 
    dbedit9.Text:='0.00'; 
    dbedit10.Text:='0.00'; 
    dbedit11.Text:='0.00'; 
    dbedit12.Text:='0.00'; 
    dbedit19.Text:='0.00'; 
    dbedit20.Text:='0.00'; 
    dbedit21.Text:='0.00'; 
    dbedit16.Text:='0'; 
    dbedit17.Text:='0'; 
    dbedit18.Text:='0'; 
    dbedit23.Text:='10'; 
    dbcombobox1.SelText:=dbcombobox1.Items.Strings[0]; 
    dbcombobox3.SelText:=dbcombobox3.Items.Strings[0]; 
    //物料主文件中存儲的是類別的拼音,而不是名稱,因此插入時需要輸入拼音而不是名稱

dbcombobox2.Visible:=false; 
    dbcombobox3.Visible:=true; 
    dbedit26.Text:='20040101'; 
    //將插入、刪除、修改和移動按鈕關閉,防止錯誤操作 
    bitbtn6.Enabled:=false; 
    bitbtn7.Enabled:=false; 
    bitbtn1.Enabled:=false; 
    bitbtn2.Enabled:=false; 
    bitbtn3.Enabled:=false; 
    bitbtn4.Enabled:=false; 
    bitbtn5.Enabled:=false; 
    //允許保存或取消對數據所作的操作 
    bitbtn8.Enabled:=true; 
    bitbtn9.Enabled:=true; 
    //允許修改文本框中的內容 
    dbedit1.ReadOnly:=false; 
    dbedit2.ReadOnly:=false; 
    dbedit3.ReadOnly:=false; 
    dbedit4.ReadOnly:=false; 
    dbedit5.ReadOnly:=false; 
    dbedit6.ReadOnly:=false; 
    dbedit7.ReadOnly:=false; 
    dbedit8.ReadOnly:=false; 
    dbedit9.ReadOnly:=false; 
    dbedit10.ReadOnly:=false; 
    dbedit11.ReadOnly:=false; 
    dbedit12.ReadOnly:=false; 
    dbedit13.ReadOnly:=false; 
    dbedit14.ReadOnly:=false; 
    dbedit15.ReadOnly:=false; 
    dbedit16.ReadOnly:=false; 
    dbedit17.ReadOnly:=false; 
    dbedit18.ReadOnly:=false; 
    dbedit19.ReadOnly:=false; 
    dbedit20.ReadOnly:=false; 
    dbedit21.ReadOnly:=false; 
    dbedit22.ReadOnly:=false; 
    dbedit23.ReadOnly:=false; 
    dbedit24.ReadOnly:=false; 
    dbedit25.ReadOnly:=false; 
    dbedit26.ReadOnly:=false; 
    end; 

    //----------編輯一條已有的記錄-------------- 
    procedure Tmaterials.BitBtn6Click(Sender: TObject); 
    begin 
    datasource1.DataSet.Edit; 
    //物料主文件中存儲的是類別的拼音,而不是名稱,因此插入時需要輸入拼音而不是名稱 
    dbcombobox2.Visible:=false; 
    dbcombobox3.Visible:=true; 
    //將插入、刪除、修改和移動按鈕關閉,防止錯誤操作

 bitbtn6.Enabled:=false; 
    bitbtn7.Enabled:=false; 
    bitbtn1.Enabled:=false; 
    bitbtn2.Enabled:=false; 
    bitbtn3.Enabled:=false; 
    bitbtn4.Enabled:=false; 
    bitbtn5.Enabled:=false; 
    //允許保存或取消對數據所作的操作 
    bitbtn8.Enabled:=true; 
    bitbtn9.Enabled:=true; 
    //允許修改文本框中的內容 
    dbedit1.ReadOnly:=false; 
    dbedit2.ReadOnly:=false; 
    dbedit3.ReadOnly:=false; 
    dbedit4.ReadOnly:=false; 
    dbedit5.ReadOnly:=false; 
    dbedit6.ReadOnly:=false; 
    dbedit7.ReadOnly:=false; 
    dbedit8.ReadOnly:=false; 
    dbedit9.ReadOnly:=false; 
    dbedit10.ReadOnly:=false; 
    dbedit11.ReadOnly:=false; 
    dbedit12.ReadOnly:=false; 
    dbedit13.ReadOnly:=false; 
    dbedit14.ReadOnly:=false; 
    dbedit15.ReadOnly:=false; 
    dbedit16.ReadOnly:=false; 
    dbedit17.ReadOnly:=false; 
    dbedit18.ReadOnly:=false; 
    dbedit19.ReadOnly:=false; 
    dbedit20.ReadOnly:=false; 
    dbedit21.ReadOnly:=false; 
    dbedit22.ReadOnly:=false; 
    dbedit23.ReadOnly:=false; 
    dbedit24.ReadOnly:=false; 
    dbedit25.ReadOnly:=false; 
    dbedit26.ReadOnly:=false; 
    end; 
      
    //-----------刪除一條記錄------------------------ 
    procedure Tmaterials.BitBtn7Click(Sender: TObject); 
    begin 
    if application.MessageBox('確實刪除記錄?該命令不可取消!','刪除記錄',MB_OKCANCEL)=IDOK then 
    datasource1.DataSet.Delete 
    else 
    abort; 
    end;

//--------取消操作-------------- 
    procedure Tmaterials.BitBtn9Click(Sender: TObject); 
    begin 
    datasource1.DataSet.Cancel; 
    //在浏覽狀態下,顯示的是類別的名稱 
    dbcombobox3.Visible:=false; 
    dbcombobox2.Visible:=true; 
      
    //將插入、刪除、修改和移動按鈕打開 
    bitbtn6.Enabled:=true; 
    bitbtn7.Enabled:=true; 
    bitbtn1.Enabled:=true; 
    bitbtn2.Enabled:=true; 
    bitbtn3.Enabled:=true; 
    bitbtn4.Enabled:=true; 
    bitbtn5.Enabled:=true; 
    bitbtn8.Enabled:=false; 
    bitbtn9.Enabled:=false; 
    //不允許修改文本框中的內容 
    dbedit1.ReadOnly:=true; 
    dbedit2.ReadOnly:=true; 
    dbedit3.ReadOnly:=true; 
    dbedit4.ReadOnly:=true; 
    dbedit5.ReadOnly:=true; 
    dbedit6.ReadOnly:=true; 
    dbedit7.ReadOnly:=true; 
    dbedit8.ReadOnly:=true; 
    dbedit9.ReadOnly:=true; 
    dbedit10.ReadOnly:=true; 
    dbedit11.ReadOnly:=true; 
    dbedit12.ReadOnly:=true; 
    dbedit13.ReadOnly:=true; 
    dbedit14.ReadOnly:=true; 
    dbedit15.ReadOnly:=true; 
    dbedit16.ReadOnly:=true; 
    dbedit17.ReadOnly:=true; 
    dbedit18.ReadOnly:=true; 
    dbedit19.ReadOnly:=true; 
    dbedit20.ReadOnly:=true; 
    dbedit21.ReadOnly:=true; 
    dbedit22.ReadOnly:=true; 
    dbedit23.ReadOnly:=true; 
    dbedit24.ReadOnly:=true; 
    dbedit25.ReadOnly:=true; 
    dbedit26.ReadOnly:=true; 
    end; 
      
    //----------------提交對數據表所作的修改---------------- 
    procedure Tmaterials.BitBtn8Click(Sender: TObject); 
    begin 
    if application.MessageBox('確定執行對數據所作的操作?','確定',MB_OKCANCEL)=IDOK then 
    datasource1.DataSet.Post 
    else 
    abort; 
    //在浏覽狀態下,顯示的是類別的名稱

dbcombobox3.Visible:=false; 
    dbcombobox2.Visible:=true; 
    //將插入、刪除、修改和移動按鈕打開 
    bitbtn6.Enabled:=true; 
    bitbtn7.Enabled:=true; 
    bitbtn1.Enabled:=true; 
    bitbtn2.Enabled:=true; 
    bitbtn3.Enabled:=true; 
    bitbtn4.Enabled:=true; 
    bitbtn5.Enabled:=true; 
    bitbtn8.Enabled:=false; 
    bitbtn9.Enabled:=false; 
    end; 
    //不允許修改文本框中的內容 
    dbedit1.ReadOnly:=true; 
    dbedit2.ReadOnly:=true; 
    dbedit3.ReadOnly:=true; 
    dbedit4.ReadOnly:=true; 
    dbedit5.ReadOnly:=true; 
    dbedit6.ReadOnly:=true; 
    dbedit7.ReadOnly:=true; 
    dbedit8.ReadOnly:=true; 
    dbedit9.ReadOnly:=true; 
    dbedit10.ReadOnly:=true; 
    dbedit11.ReadOnly:=true; 
    dbedit12.ReadOnly:=true; 
    dbedit13.ReadOnly:=true; 
    dbedit14.ReadOnly:=true; 
    dbedit15.ReadOnly:=true; 
    dbedit16.ReadOnly:=true; 
    dbedit17.ReadOnly:=true; 
    dbedit18.ReadOnly:=true; 
    dbedit19.ReadOnly:=true; 
    dbedit20.ReadOnly:=true; 
    dbedit21.ReadOnly:=true; 
    dbedit22.ReadOnly:=true; 
    dbedit23.ReadOnly:=true; 
    dbedit24.ReadOnly:=true; 
    dbedit25.ReadOnly:=true; 
    dbedit26.ReadOnly:=true; 
      
    //------------------關閉窗體---------------------- 
    procedure Tmaterials.BitBtn10Click(Sender: TObject); 
    begin 
    close; 
    end; 

   小知識  MDI程序中子窗體關閉方式的設置方法

   在Delphi中,MDI子窗口的關閉方式默認為縮小而不是關閉,故當您單擊子窗口右上角的關閉按鈕時會發覺該子窗口只是最小化,而不是如您所預期的那樣被關閉。解決辦法是在子窗口的OnClose事件處理過程中加入如下代碼。

            procedure ChildForm.OnClose(Sender: TObject; var Action: TCloseAction);
            begin
            Action := caFree;
            end;  

   Delphi為一個窗體的關閉行為指定了4種方式,分別是:

   caNone 禁止子窗體被關閉。

   caHide 子窗體不被關閉,但是被隱藏。被隱藏的窗體仍然可以被程序訪問。

   caFree 子窗體被關閉,並且釋放其占用的資源。

   caMinimize 子窗體被最小化而不是被關閉,這是MDI子窗口的默認關閉行為。    

  至此我們完成了物料主文件維護的功能,其效果如圖3.34所示。




 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved