




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、用Delphi編寫小型數據庫2011-10-20|分類: HYPERLINK http:/ylilik/blog/ l m=0&t=1&c=fks_087067084087081068085083074066085083081064082086087 o 電腦資料 電腦資料|標簽: HYPERLINK http:/ylilik/blog/ l m=0&t=3&c=電腦技巧 電腦技巧|編輯: HYPERLINK ,輔編: HYPERLINK 用Delphi編寫小型數據庫(一)建立數據庫Delphi是目前最流行的編程工具之一,它在開發數據庫應用程序方面有著眾多的優越性,提供了強大的開發基于客戶/服
2、務器模式數據庫應用程序的能力。在數據庫訪問方面,配有Borland Database Engine(BDE),可通過SQL Links、ODBC等技術訪問多種數據庫,也可以利用ADO來訪問各種數據庫。在應用程序客戶端開發方面,Delphi提供了大量的用于數據庫應用開發的各種組件,可以極大地提高開發效率。在學習Delphi數據庫編程之前,我們應該對數據庫有一定的認識。一、認識數據庫1.數據(Data)數據庫是存放數據的倉庫,數據的種類很多,如數字、文字(商家的訂單信息、供應商信息等)、圖形、圖像。2.數據庫(Database)數據庫是長期存放在計算機上的,能夠識別的,有組織、可共享、具有一定安全
3、性的數據集合。在數據庫中,一般都采用關系模型,通過表格來實現。3.數據庫管理系統(DataBase Management System)數據庫管理系統是位于用戶軟件和操作系統之間的數據庫管理軟件,常見的數據庫管理系統有Oracle、Microsoft SQL Server、Sybase、Informix等。4.數據庫系統(DataBase System)數據庫系統的構成見圖1:圖1 數據庫系統構成圖實際開發中,數據庫系統常分為兩類:桌面型數據庫系統和網絡型數據庫系統。桌面型數據庫系統指只在本機運行、不與其他計算機交換數據的數據庫系統,用于小型的信息管理;網絡型數據庫系統指能夠通過網絡進行數據共
4、享的數據庫系統,多人可以通過多臺計算機對數據庫進行操作,可以通過數據庫對用戶的權限進行管理。目前,網絡型數據庫系統的應用前景越來越廣泛。有關數據庫的術語由于篇幅關系沒做深入講解,有興趣的讀者可以參考相關書籍。下面我們以Microsoft SQL Server2000為例,講解建立一個數據庫的詳細過程。Microsoft SQL Server2000安裝完成后,依次點擊“開始程序Microsoft SQL Server企業管理器”,啟動企業管理器程序,SQL Server企業管理器(Enterprise Manager)是SQL Server軟件的一個組成部分,它給用戶提供了一個集成的管理控制臺
5、來集中管理多個服務器。在Windows進程中的名字叫mmc.exe。企業管理器的界面如圖2,我們對數據庫的大部分操作都在這個程序中執行。圖2 SQL Server企業管理器的界面二、創建一個新的數據庫1.在企業管理器中,點擊菜單“操作”,選擇“新建數據庫”,在彈出的對話框中,需要確定新建的數據庫的名稱和存放的路徑。新建的數據庫的名稱為test,存放的路徑為D盤。注意:修改了數據文件的路徑后,最好手動把日志文件的路徑也修改到相同目錄下,確定后,新建的數據庫就創建了。在D盤下可以找到test_Data.MDF和test_Log.LDF兩個文件,在企業管理器樹中也能找到test數據庫了。2.數據庫創
6、建后,我們就根據實際需要創建表了。右鍵點擊企業管理器樹中的“表”后,在彈出的菜單中選擇“新建表”,在彈出的對話框中對表的結構進行詳細設計。定義四個字段,分別表示姓名、年齡、性別、住址。注意定義字段時要考慮數據類型、長度是否合法,如果把姓名定義為數字型或者把年齡的長度設置為1,將來數據就會出現意想不到的情況。當表設計完成后點擊“保存”按鈕,輸入表名PersonInfo,對表的設計就初步完成了。重復上述操作可以建立多個表。建立數據庫以及建立表相對來說比較簡單,按部就班就能完成。不過在實際做項目過程中,在建立表之前最好根據需求考慮完善后再進行。如果到項目編碼中期再更改表結構,會讓人心煩意亂的。三、值
7、得注意的概念1.存儲過程存儲過程是 SQL 語句和可選控制流語句的預編譯集合,以一個名稱存儲并作為一個單元處理。存儲過程存儲在數據庫內,可由應用程序通過一個調用執行,而且允許用戶聲明變量、有條件執行,它還擁有強大的編程功能。存儲過程相當于存放在數據庫中的函數,當應用程序調用存儲過程時,將被數據庫管理系統調用并執行,然后將執行結果返回給應用程序。存儲過程可包含程序流、邏輯以及對數據庫的查詢。它可以接收參數、輸出參數、返回單個或多個結果集以及返回值。2.觸發器觸發器是一種特殊類型的存儲過程,當使用一種或多種數據修改操作在指定表中對數據進行修改時,觸發器會生效,觸發器可以查詢其它表,而且可以包含復雜
8、的 SQL 語句。它們主要用于強制復雜的業務規則或要求。3.事務性(Transaction)事務是指不可分割的一組操作集合,集合的操作要么全部完成,要么全部取消,是一個不可分割的工作單位。4.在設計表時需要注意以下幾點1)主關鍵字(Primary Key)主關鍵字又叫主鍵,是唯一能確定表的一行(一條記錄)的一個或多個字段,比如上面我們定義的PersonInfo表中,name字段就可以設定為主關鍵字,在設計表的窗體中,選中name這一行,點擊“鑰匙”按鈕后就把name設置為主關鍵字了,這樣每一條記錄的name的信息就不能相同了。主關鍵字的功能有:建立索引,利于快速查找和排序;分辨記錄;保證引用的
9、完整性。2)索引(Index)建立索引是為了提高數據庫的查找和排序速度。關鍵字是一個特殊的索引。索引使數據庫程序無須對整個表進行掃描就可以在其中找到所需要的數據。用于索引的字段不需要唯一,但唯一的字段的索引能獲得更高的效率。3)外部關鍵字(Froeign Key)外部關鍵字又稱外鍵,用于建立和加強兩個表數據之間鏈接的一個或多個字段。將保存表中主鍵值的一列或多列添加到另一個表中,可創建兩個表之間的連接。這一列或多列就成為第二個表的外鍵。外鍵也是一種約束條件,約束的主要目的是控制存儲在外鍵表中的數據,還可以控制對主鍵表中數據的修改。下面舉例說明,比如我們定義了兩張表,表PersonInfo的nam
10、e字段定義為主關鍵字,其中name列的數據是唯一的,也就是名字不可重復,數據見圖3:圖3 PersonInfo表表wage存放員工每個月的工資,所以名字可以重復,數據見圖4:圖4 wage表如果把表PersonInfo中的第四條記錄“曾虹云”刪除,那么表wage中的前三條記錄就顯得孤立了,既然員工“曾虹云”的基本信息都沒有了,怎么會保留每個月的薪水呢?外部關鍵字防止了這種情況的出現,我們對表wage進行如下設計:在表wage的設計窗口中點擊按鈕“管理索引/鍵”,在彈出的對話框中點擊“關系”標簽頁,點擊“新建”按鈕,分別在主鍵表中選擇name和在外鍵表中選擇name,這樣我們就設置了一個外鍵,把
11、PersonInfo和Wage兩張表做了關聯,當Wage表中有“曾虹云”的記錄時,表PersonInfo是不允許刪除“曾虹云”這條記錄的,這樣就保證了數據引用的完整性。用Delphi編寫小型數據庫(二)數據庫編程的基本操作2007-05-17 10:49:01|分類: HYPERLINK http:/ylilik/blog/ l m=0&t=1&c=fks_087067084087081068085083074066085083081064082086087 o 電腦資料 電腦資料|標簽: HYPERLINK http:/ylilik/blog/ l m=0&t=3&c=delphi編程 de
12、lphi編程|字號訂閱上一期我們講解了數據庫的基礎知識,本期我們主要講解Delphi數據庫編程的基本操作,這一般遵循圖1的模式:圖1 數據庫應用程序的構成啟動Delphi,選擇主菜單的“FlieNewData Module”,就能創建一個數據模塊,數據模塊相當于一個容器,用于放置數據庫的組件,這些數據庫相關組件均為不可見組件,如ADODataSet、ADOConnection、DataSource等。用數據模塊的好處是:1.從直觀來講,這些不可見組件不用放在窗體上,簡化了窗體的設計。2.可以對數據庫不可視組件進行統一管理,共享其中相同的內容。我們這里舉例很簡單,直接把不可視控件放在主窗體上,就
13、不再講數據模塊了。下面我們通過一個實例學習使用ADO組件來訪問數據庫。一、新建項目啟動Delphi,新建一個項目,選擇ADO組件面板,在窗體上添加ADOConnection1和ADODataSet1;選擇Data Access組件面板,在窗體上添加DataSource1;選擇Data Controls組件面板,添加DBGrid1。二、設置ADOConnectionADO組件一般都包含一個被用于連接的屬性,即ConnectionString屬性,利用此屬性可以指定一個到ADO數據存儲及其屬性的連接。在窗體上選中ADOConnection1,在Object Inpector上雙擊這個組件的Conn
14、ectionString屬性,彈出窗體的ADO連接對話框。選擇Build按鈕,在彈出的對話框中選擇“Microsoft OLE DB Provider for SQL Server”選項,單擊“下一步”按鈕,出現數據鏈接屬性對話框。1.選擇或輸入服務器名稱:可以在此輸入IP地址,也可以點擊下拉列表,以顯示當前系統可以訪問的SQL Server數據庫的列表,選擇其中的一個,單擊“刷新”按鈕,可獲得最新的SQL Server數據服務器列表。此例中點擊下拉列表,選擇上期我們建立的test數據庫的列表。2.輸入登錄服務器的信息:選擇“使用指定的用戶名稱和密碼”,然后輸入用戶名稱和密碼。并選中“允許保存
15、密碼”復選框。3.在服務器上選擇數據庫:如果登錄用戶名和密碼正確,點擊下拉列表就會出現數據庫的列表,否則顯示報錯信息。4.點擊“測試連接”按鈕測試輸入的登錄信息是否正確。設置完畢后點擊“確定”按鈕返回到主窗體。小技巧:ADOConnection1的LoginPrompt屬性用于控制如何處理SQL數據庫的安全性問題。如設置為True,當應用程序試圖建立數據庫連接時屏幕上將出現標準Delphi注冊對話框,用戶必須輸入正確的用戶名和口令。為了設計方便需要把ADOConnection1的LoginPrompt的屬性設置為False,這樣在配置其他的ADODataSet組件時不必每次都輸入用戶名和密碼了
16、。三、配置數據集ADODataSetDelphi數據庫開發的很重要的特征之一是,Delphi可以在程序設計時讓我們對數據進行處理,在開始處理表的數據之前,程序必須首先打開數據集,每個ADO數據集都可通過它自己的ConnectionString屬性或一個ADOConnection組件(和它的ConnectionString)訪問數據庫的數據。在主窗體上選擇ADODataSet1,設置其Connection屬性:點擊其下拉按鈕,選擇ADOConnection1,然后雙擊“CommandText”,在彈出的對話框中選擇PersonInfo表,并點擊*號,也可以直接在SQL中輸入“select * f
17、rom PersonInfo”,這樣我們就配置了一個數據集。四、配置數據源配置數據源只需要設置DataSet屬性,點擊下拉按鈕,選擇ADODataSet1。五、配置表格配置表格需要設置DataSource屬性,點擊下拉按鈕,選擇DataSource1。這時,再選中ADODataSet1,并把其Active屬性設置為True,如果配置正常,將會在表格中顯示數據庫的PersonInfo表的數據,如圖2。圖2 程序主窗體六、操作數據1.增加記錄使用Insert方法可以插入一條記錄,使用Append方法在數據集的最后添加一條記錄。雙擊“增加一條記錄”按鈕,進入代碼編輯器,輸入代碼:procedure
18、TForm1.Button1Click(Sender: TObject);beginADODataSet1.Active:=true;/打開數據集ADODataSet1.Insert; /調用Insert方法ADODataSet1.FieldByName(name).AsString:=Edit1.Text; /把Edit1的值賦給插入的記錄的name字段ADODataSet1.FieldByName(age).AsString:=Edit2.Text;ADODataSet1.FieldByName(sex).AsString:=Edit3.Text;ADODataSet1.FieldByNa
19、me(address).AsString:=Edit4.Text;ADODataSet1.Post;/將數據集中修改的內容寫回到數據庫中ADODataSet1.Active:=false;/關閉數據集ADODataSet1.Active:=true;/打開數據集,觀看效果end;2.編輯記錄鼠標選擇表格里的一條記錄,Edit輸入框顯示所選的記錄,然后進行修改后,點擊“編輯一條記錄”按鈕,把修改后的記錄寫到數據庫中。首先設置DBGrid,用鼠標點擊表格的記錄時,自動選中所點擊的一行,方法是設置DBGrid的Option屬性的dgRowSelect為True。然后在DBGrid的OnCellCli
20、ck事件中寫如下代碼:procedure TForm1.DBGrid1CellClick(Column: TColumn);beginEdit1.Text:=ADODataSet1.FieldByName(name).AsString;/把選擇的記錄中的姓名顯示在Edit1中Edit2.Text:=ADODataSet1.FieldByName(age).AsString;Edit3.Text:=ADODataSet1.FieldByName(sex).AsString;Edit4.Text:=ADODataSet1.FieldByName(address).AsString;end;然后根據
21、需要對字段進行修改,最后在“編輯一條記錄”按鈕中寫如下代碼:procedure TForm1.Button2Click(Sender: TObject);beginADODataSet1.Active:=true;ADODataSet1.Edit;/進入編輯模式ADODataSet1.FieldByName(name).AsString:=Edit1.Text;ADODataSet1.FieldByName(age).AsString:=Edit2.Text;ADODataSet1.FieldByName(sex).AsString:=Edit3.Text;ADODataSet1.FieldB
22、yName(address).AsString:=Edit4.Text;ADODataSet1.Post;ADODataSet1.Active:=false;ADODataSet1.Active:=true;end;注意:這里修改的是當前指針所指向的記錄,如果修改后再點擊一次“編輯一條記錄”按鈕,程序就會報錯,原因是沒有定位到某一條記錄。如果要指定修改某條記錄,可以使用下面提供的方法:First:定位到第一條記錄Last:定位到最后一條記錄Next:定位到下一條記錄Prior:定位到上一條記錄MoveBy(n):如果n為正數,下移n條記錄;如果n為負數,則上移n條記錄3.刪除記錄和編輯記錄一樣
23、,需要先定位,找到需要刪除的記錄后,才能對所選中的記錄進行刪除操作。在刪除記錄中寫如下代碼:procedure TForm1.Button3Click(Sender: TObject);beginADODataSet1.Active:=true;ADODataSet1.Delete;end;4.查詢記錄在實際的項目中,一般都需要給用戶提供一個查詢,比如用戶在Edit5中輸入姓名后,點擊“查詢姓名”按鈕,系統在數據庫中進行查找。如果找到,表格就自動定位到這條記錄,否則給出提示信息:雙擊“查詢姓名”按鈕,進入代碼編輯器:vari:integer;/定義一個整型變量用于循環Tmpname:strin
24、g; /定義一個內部變量,用于賦值beginADODataSet1.Active:=false;/關閉數據集ADODataSet1.Active:=true;/打開數據集,目的是更新數據集,使顯示的數據是最新的ADODataSet1.First; /定位到第一條記錄for i:=0 to ADODataSet1.RecordCount-1 do /從第一條記錄開始到最后一條記錄做循環begin/把當前記錄的name的值賦給內部變量TmpnameTmpname:=ADODataSet1.FieldByName(name).AsString;/去掉字符串中的空Tmpname:=Trim(Tmpna
25、me);/如果數據庫中記錄的name值與查詢的值一致則在Edit中顯示相關字段的值,并退出這段代碼塊if trim(Edit5.Text)=Tmpname thenbeginEdit1.Text:=ADODataSet1.FieldByName(name).AsString;Edit2.Text:=ADODataSet1.FieldByName(age).AsString;Edit3.Text:=ADODataSet1.FieldByName(sex).AsString;Edit4.Text:=ADODataSet1.FieldByName(address).AsString;exit;end
26、;ADODataSet1.Next;end;/如果沒有查詢到,給出提示信息MessageDlg(數據庫中沒有這個姓名!, mtError,mbOk, 0);end;本章講解了如何使用ADO對數據庫進行簡單的操作。在本章學習結束后,讀者應該對操作數據庫有一定的認識,并能通過ADO創建連接,能編寫增加記錄、刪除記錄、查詢記錄、修改記錄的代碼。用Delphi編寫小型數據庫(三)項目的制作流程2007-05-17 10:46:53|分類: HYPERLINK http:/ylilik/blog/ l m=0&t=1&c=fks_0870670840870810680850830740660850830
27、81064082086087 o 電腦資料 電腦資料|標簽: HYPERLINK http:/ylilik/blog/ l m=0&t=3&c=delphi編程 delphi編程|字號訂閱本章將通過一個項目制作過程的講解來加深讀者對數據庫編程的認識。我們以攀鋼熱軋板廠縱切機組二級系統的上料程序為例,講解如何進行項目的制作。攀鋼熱軋板廠縱切機組是一條生產鋼卷的生產線,整個生產流程見圖1:圖1吊車把鋼卷吊到入口步進梁上(總共有6個卷位,每個卷位可以放置一個鋼卷),然后由現場操作人員開動步進梁設備,通過上料小車把鋼卷送到開卷機上進行生產。生產完成后由卷取機把鋼卷卷好,通過卸料小車把鋼卷送到出口步進梁
28、,現場操作人員開動步進梁到稱重位置的電子秤稱重后,把鋼卷送到庫房。整個生產由一級系統(PLC)控制,二級系統不參與控制,但需要對整個生產流程的數據做記錄并統計分析和備份,二級系統主要實現的功能有:1.接收計劃,生產計劃由三級系統下發,二級系統只要把生產計劃接收下來;2.吊銷計劃;3.產品跟蹤,現場生產的鋼卷信息要實時反映到二級系統,指導現場操作人員生產;4.生成并上傳給三級系統實績,也就是把生產完成的卷的相應信息保存下來并做標簽打印;5.計劃和實績的查詢功能。根據實際需要,二級系統由兩個獨立的應用程序構成:上料程序和主程序。由于篇幅的關系,這里只講解上料程序的制作流程和邏輯思路。上料程序的界面
29、如圖2:圖2上料程序的功能:1.上料操作提供給操作人員一個界面,操作人員在接到生產計劃后,把待生產的鋼卷用吊車吊放到入口步進梁的卷位上,然后在畫面中把實物所對應的信息從數據庫的計劃表中寫到跟蹤表中。比如把一個鋼卷號為“41236704400”吊到入口步進梁的1號卷位后,在程序中做如下操作:根據軋制明細表,選擇計劃號“212067”后顯示此計劃下所有的合同號,點擊合同號“J000000022”,顯示此計劃、此合同下的鋼卷號,點擊這個鋼卷號,點擊“上料”按鈕,再點擊“1號卷位”,系統就把此鋼卷的信息(計劃號、鋼卷號)寫到跟蹤表中了。2.卸料操作由于操作失誤或者某種原因,把剛才入口步進梁1號卷位的鋼
30、卷“41236704400”上到2號卷位,提供給操作人員一個“卸卷”按鈕,當點擊它后,就把跟蹤表中的相關信息清除了,就可以重新執行上料操作了。3.鋼卷前進當開動步進梁前進,由于步進梁是整體前進的,需要把跟蹤表中的信息做相應修改,點擊 “鋼卷前進”按鈕,就把5號卷位的信息寫到6號卷位,4號卷位的信息寫到5號卷位1號卷位的信息寫到2號卷位,同時1號卷位的信息清空。實際上,鋼卷前進后,由工業HMI系統把數據庫的信號表的某個字段值改變,通過掃描這個值的變化,修改跟蹤表實現鋼卷自動前進功能。如果實際設備動作后由于某種原因導致信號表相應字段的值沒有發生變化,就需要手動點擊“鋼卷前進”按鈕了。一、設計數據庫
31、使用Microsoft SQL Server2000,建立一個數據庫,這里需要使用4張表:1.接口表TB_ SplitCutPlan,三級系統下發計劃的方式是直接寫數據到此表中,當數據庫檢測到此表有數據后把所有數據插入到計劃表中,并刪除此表中的全部數據;方法是使用觸發器,只有兩句SQL語句:insert into l2_splitcutplan select * from tb_splitcutplandelete from tb_splitcutplan2.計劃表L2_SplitCutPlan,存放待生產鋼卷的詳細信息,由于鋼卷號是唯一的,因此把鋼卷號字段HOT_COIL_NO設置為主鍵。計
32、劃表和接口表的設計一模一樣,把接口表復制后改名為計劃表就可以了。3.信號表Signal,當鋼卷信息到了跟蹤表的開卷機時,需要通知三級系統此卷上了生產線,也就是說需要把信號表中某個字段的值置1,由主程序去掃描這個值是否為1,當為1時把跟蹤表的開卷機的鋼卷信息寫到三級系統的相關表中。4.跟蹤表L2_SplitCutMatTrack,存儲鋼卷信息,保持物流和信息流一致性。二、程序編碼難點1.程序界面中,計劃號、合同號、鋼卷號等三個供操作人員進行選擇的列表框為ListBox控件,隨著數據量的增大,計劃號在ListBox中必須按時間倒序排列,也就是三級系統最后下發的計劃,其計劃號是排列在ListBox的
33、最頂部的,這樣操作人員一眼就能找到最近需要生產的計劃號。當然,為了讓程序更加健壯,需要做一個計劃號的查詢,在界面的右下角輸入計劃號,點擊“查詢計劃號”按鈕,在ListBox中就自動把此計劃號反選,并查詢出此計劃號所對應的合同號并顯示在合同號列表框中。在窗體的FormShow事件中加入下面代碼:procedure TMaterial.FormShow(Sender: TObject);vari:integer;strPlanNo:string;begin/*計劃刷新*/Plan_No_ListBox.Items.Clear;/啟動畫面時清空計劃號列表框Plan_ADODataSet.Close;
34、/關閉計劃表數據集,這個數據集對應的是計劃表L2_SplitCutPlan的數據Plan_ADODataSet.CommandText := SELECT PlanNo from L2_SplitCutPlan group by planno,prg_start_time order by prg_start_time desc;/關鍵就是這個SQL語句,它從計劃表中選擇計劃號和時間字段,并按時間字段倒序排列,同時相同的計劃號只顯示一次。Plan_ADODataSet.Open;/打開數據集for i := 0 To (Plan_ADODataSet.RecordCount-1) do/把計劃
35、表的記錄從頭到尾掃描一遍,把每條記錄的計劃號字段讀出來,賦給內部變量strPlanNo,然后把strPlanNo的值添加到ListBox中。beginstrPlanNo := Plan_ADODataSet.FieldByName(PlanNo).AsString;Plan_ADODataSet.Next;Plan_No_ListBox.Items.Add(StrPlanNo);end;L2_TrackADODataSet.Active:=false;/當啟動畫面時刷新畫面右側的跟蹤表格的數據,這個表格是DBGrid控件。L2_TrackADODataSet.Active:=true;end;
36、2.當點擊合同號后,在鋼卷號列表框中就顯示了鋼卷號,這里顯示的鋼卷號必須具備下面兩點:1.顯示的鋼卷號所對應的計劃號必須是前面選擇的計劃號;2.顯示的鋼卷號所對應的合同號必須是前面選擇的合同號。如果要滿足這兩個要求,必須要使用到SQL語句。3.如何把選擇的鋼卷號上料到步進梁上面?也就是說如何把計劃表的計劃號、鋼卷號字段寫到跟蹤表中?根據工藝流程,設計的跟蹤表如圖3:圖3Coil_Number和Coil_Name字段的值是固定的,在程序中是靜止的,只須把選擇的計劃號和鋼卷號寫給Coil_No和PlanNo即可。下面給出“1號卷位”按鈕的代碼,操作人員在選擇一個鋼卷號后,點擊“上料”按鈕,再點擊“
37、1號卷位”按鈕就把從計劃表中選擇的鋼卷號的信息寫到跟蹤表中了。procedure TMaterial.Button5Click(Sender: TObject);vari:integer;tmpCoil:string;beginif UpOrDown=1 then /上料,UpOrDown是全局變量,當點擊“上料”按鈕后,把這個值置為1,表示進行上料操作beginfor i := 0 to (Coil_No_ListBox.Items.Count - 1) do/把選擇的鋼卷號的值賦給內部變量tmpCoilbeginif Coil_No_ListBox.Selectedi thenbegint
38、mpCoil:=Coil_No_ListBox.Items.Stringsi;/*修改L2跟蹤表*/L2_TrackADODataSet.Active:=false;L2_TrackADODataSet.Active:=true;L2_TrackADODataSet.First;/由于是上料到1號卷位,就指向跟蹤表的第一條記錄if L2_TrackADODataSet.FieldByName(Coil_No).AsString then/如果字段Coil_Name的值不為空,就不應該上料到此處,給出提示信息并退出程序beginMessageDlg(此卷位有卷啦,請先卸卷, mtError,mb
39、Ok, 0);exit;end;L2_TrackADODataSet.Edit;/編輯跟蹤表L2_TrackADODataSet.FieldByName(Coil_No).AsString:= tmpCoil; /把選擇的鋼卷號寫到跟蹤表的第一條記錄的Coil_No字段中。L2_TrackADODataSet.FieldByName(PlanNo).AsString:=strPlanNo1; /把選擇的鋼卷號所對應的計劃號寫到跟蹤表的第一條記錄的PlanNo字段中。L2_TrackADODataSet.Post;/ 將數據集中修改的內容寫回到數據庫中L2_TrackADODataSet.Act
40、ive:=false;/刷新表格L2_TrackADODataSet.Active:=true;exit;/退出程序end;end;end;end;編碼完成后,需要不斷離線測試,修改程序中的Bug,完善程序。如果沒有大問題就可以上線運行了。用Delphi編寫小型數據庫(四)打印標簽2007-05-17 10:42:48|分類: HYPERLINK http:/ylilik/blog/ l m=0&t=1&c=fks_087067084087081068085083074066085083081064082086087 o 電腦資料 電腦資料|標簽: HYPERLINK http:/ylilik
41、/blog/ l m=0&t=3&c=delphi編程 delphi編程|字號訂閱技術看點:數據庫的格式化輸出技巧、打印調試技巧數據庫編程有一個很重要的特點,通常需要把數據輸出到打印機,比如生產線的成品出廠前需要貼上標簽,財務報表做的數據統計結果需要打印給上司過目,這些都需要在Delphi中根據需要設計好打印功能。一、標簽打印我們先來設計標簽的打印輸出,這里的Delphi版本為7.0,制作打印程序需要用到Rave組件板內的組件。以攀鋼熱軋板廠縱切機組的程序為例,當生成一條實績(成品信息)后,需要在鋼卷出廠前給鋼卷貼上包含此鋼卷數據信息的標簽,標簽格式如圖1所示,標簽下面是成品表,當在成品表格中
42、選擇一條記錄后,把成品表的字段的值寫到標簽的Edit控件中,這在第二章已經詳細介紹過了,方法是在DBGrid的OnClick事件中寫類似下面的代碼:圖1procedure TForm1.DBGrid1CellClick(Column: TColumn);beginedtProductCoilNo.Text :=ADODataSet1.FieldByName(HOT_COIL_NO).AsString;edtThick1.Text:=ADODataSet1.FieldByName(COIL_THICK).AsString;edtWidth1.Text:=ADODataSet1.FieldByNa
43、me(COIL_WIDTH).AsString;edtPruductWeight.Text:=ADODataSet1.FieldByName(COIL_WEIGHT).AsString;edtShift_No.Text:=ADODataSet1.FieldByName(Shift_No).AsString;edtChecker.Text:=ADODataSet1.FieldByName(DUTY_PERSON).AsString; edtProductTime.Text:=DateTimeToStr(ADODataSet1.FieldByName(PRODUCTION_TIME).AsDate
44、Time);end;這樣,當被選擇的記錄的信息顯示在Edit中后,只需要把Edit的內容按標簽的實際大小輸出到打印機就可以了。找到Rave組件板,把RvProject1、RvSystem1添加到窗體上。1.雙擊RvProject1組件,打開Rave Report 5.0,新建一個文檔并保存為Project1.rav,關閉Rave Report 5.0應用程序。2.設置RvProject1的屬性:RvProject1.Engine:= RvSystem1;RvProject1.ProjectFile:點擊屬性的瀏覽按鈕,將彈出一個對話框,選擇上一步保存的Project1.rav。3.設置RvSy
45、stem1的屬性:RvSystem1.DefaultDest:= rdPreview;/打印預覽,如果選擇rdPrinter,則直接輸出到打印機。建議在調試標簽上各個字符的相對位置時選擇預覽方式,調試完成投入使用時選擇直接輸出到打印機方式能節省時間。SystemSetups.ssAllowSetup:=False;/不做打印機設置,如果為 True,則每次點擊Button1執行打印命令時將彈出打印機設置對話框,建議在調試期間選擇True,設置完畢后改為False以減小勞動強度。在Output Options對話框的Report Destination組合框中(圖2),選擇Printer,將輸出
46、到打印機;選擇Preview,將顯示打印預覽;選擇File,將以NDR或PRN方式保存文件。圖2點擊Setup按鈕后將彈出標準打印機設置對話框,這里不作闡述。4.雙擊RvProject1組件,打開Rave Report 5.0。(1)找到RaveProjectReportLibraryReport1,并選擇它(圖3)。然后在左邊的屬性欄中找到Parameters,并點擊瀏覽按鈕。圖3(2)在彈出的對話框中,設置8個參數,輸入A1A8。(3)在Rave Report 5.0軟件開發環境上方的組件頁中選擇Report組件頁,在畫布上放置多個此組件頁的DataTest組件,并利用Alignment組
47、件頁的組件把各個DataTest排版,對齊。(4)選中第一個DataTest組件,找到屬性DataField,并點擊瀏覽按鈕,將彈出一個對話框,點擊Project Parameters下拉列表框,選擇A1,然后點擊“Insert Parameter”按鈕,點擊“OK”按鈕退出。依次選擇其余的DataTest組件,做相同的操作。(5)經過設置后,畫布如圖4所示。圖4保存并退出Rave Report 5.0。5.設計完標簽后,回到Delphi7.0開發環境,在主窗體的Button1中寫打印代碼:procedure TForm1.Button1Click(Sender: TObject);begin
48、RvProject1.Open;RvProject1.SelectReport(Report,true);RvProject1.SetParam(A1,edtProductCoilNo.Text);RvProject1.SetParam(A2,edtThick1.Text);RvProject1.SetParam(A3,*);RvProject1.SetParam(A4,edtWidth1.Text);RvProject1.SetParam(A5,edtPruductWeight.Text);RvProject1.SetParam(A6,edtShift_No.Text);RvProject1
49、.SetParam(A7,edtChecker.Text);RvProject1.SetParam(A8,edtProductTime.Text);RvProject1.Execute;RvProject1.Close;end;上述代碼的功能就是把Edit的值輸出到打印機。有一點要說明:如果要打印一個常量(不從數據庫讀出數據),如參數A3傳遞的“*”,直接寫為:RvProject1.SetParam(A3,*);當然,也可以在屬性設置中把Edit1的text設置為“*”,然后代碼寫為:RvProject1.SetParam(A3, Edit1.Text );注意二者之間的差別。6最后一步是水磨
50、功夫,由于不可能一次就使字符打印在非常合適的位置,所以就要細心地根據打印的標簽微調各個字符在標簽中的位置,直到滿意為止。然后設置打印機,設置完畢后做下面的設置:RvSystem1.DefaultDest:= rdPrinter;SystemSetups.ssAllowSetup:=False;在打印過程中會出現這種情況:在打印預覽中顯示的字符沒有都打印出來。這是由于標簽設計時,DataTest的長度不夠,打開Rave Report 5.0,調出保存的Project1.rav,把相應的DataTest的Wdith值改大就可以了。另外,在預覽方式下點擊打印按鈕也可以進行標簽打印。二、報表輸出下面講
51、解如何把報表輸出到打印機,這里所說的報表也就是一個數據集內的數據,制作復雜的報表有專門的工具,比如著名的水晶報表軟件,我們這里不討論復雜的報表,只說明Delphi如何把我們需要的數據以表格形式打印出來。假如我們需要把圖5這張表格打印出來,可以首先在Rave組件板中把RvProject圖51、RvDataSetConnection1添加到窗體上,在窗體上雙擊RvProject1,啟動報表設計器。1.選擇“File”菜單下的“New”命令建立新報表工程。2.選擇“File”菜單下的“New Data Object”命令后,出現“Data Connections”窗口。選擇“Direct Data
52、View”后,按“Next”按鈕,選擇“TRvDataConnection1”后,按“Finish”鍵后退出到主設計界面。3.選擇“Tools”“ Report Wizards”“ Simple Table”后,出現“Simple Table”窗口。選擇“DataView1”后,按“Next”按鈕,選擇需要的字段后,一路按“Next”按鈕,最后按“Generate”按鈕,出現如圖6所示的界面。圖64.設置報表頭、報表欄目和各種元件的布局后,存盤退出報表設計器。5.在Delphi開發環境中,在“Print”按鈕中錄入下面代碼:procedure TForm1.Button1Click(Sende
53、r: TObject);beginRvProject1.Open;RvProject1.SelectReport(Report,true);RvProject1.Execute;RvProject1.Close;end;6.運行程序,點擊“Print”按鈕,在彈出的對話框中選擇預覽,我們就能看見報表打印預覽效果。點擊“打印”按鈕即可把報表打印出來了。用Delphi編寫小型數據庫(五)數據庫的備份和恢復2007-05-17 10:41:25|分類: HYPERLINK http:/ylilik/blog/ l m=0&t=1&c=fks_08706708408708106808508307406
54、6085083081064082086087 o 電腦資料 電腦資料|標簽: HYPERLINK http:/ylilik/blog/ l m=0&t=3&c=delphi編程 delphi編程|字號訂閱技術看點:保障數據庫安全的操作技巧,快速復制表,高效錄入編程技巧學會前四章的內容,我們已經可以獨立開發一個小型數據庫項目了。最后一章我們介紹數據庫的備份和恢復以及部分編程小技巧。一、數據庫的備份數據庫在運行一定的時間后數據量會增大,隨著數據量越來越龐大,系統執行查詢的效率就會越來越低,我們就需要清理數據。清理數據前一定要對數據庫進行備份,便于以后需要時恢復數據庫來查詢前期的數據,備份數據庫的步
55、驟如下:1.分離數據庫只有先把數據庫分離出來才能備份。啟動Microsoft SQL Server 2000的企業管理器,選擇一個數據庫,在右鍵菜單中選擇“所有任務”“分離數據庫”(圖1),在彈出的對話框中點擊“確定”按鈕,這樣數據庫test就脫離開了。圖12.復制數據庫文件還記得我們創建test數據庫的目錄嗎?在第一章里,我們創建的test數據庫存放在D盤根目錄下面,現在我們啟動Windows資源管理器,找到test_Data、test_Log兩個文件,并把這兩個文件復制后保存到你的閃盤或者其他地方,這樣我們就對test做好備份了。二、數據庫的恢復選擇“數據庫”后,在右鍵菜單中選擇“所有任務
56、”“附加數據庫”(圖2),彈出對話框,點擊“.”按鈕,指定要附加的數據庫文件(*.MDF),然后點擊“確定”按鈕,這樣我們就恢復了test數據庫,在企業管理器的數據庫目錄下就能找到test了。圖2三、復制表在第三章中,我們創建了兩張表TB_ SplitCutPlan和L2_SplitCutPlan,這兩張表一模一樣,我們定義表TB_ SplitCutPlan是一個字段一個字段進行定義的,實際上這張表包含了多達70多個字段。如果我們再來一個字段一個字段定義L2_SplitCutPlan,工作量大不說,極容易出錯,采用復制表的方法勢必簡單易行。下面詳細介紹如何復制表:1.在MS SQL Serve
57、r的企業管理器中,右擊一張表,選擇復制到剪貼板。2.選擇“工具”的“SQL查詢分析器”, 在查詢分析器的查詢窗口右擊,在彈出菜單中選擇“粘貼”,就把表SplitCutMatTrack的創建代碼復制到查詢窗口了(圖3)。圖33.在查詢窗口中,把表的名字改為你希望的新表的名字,比如test1,第一行就變成了:“CREATE TABLE test1 (”(沒有引號),如果不希望把所有的字段都復制,僅僅希望復制部分字段,在代碼中可以根據自己的需要刪減字段。4.選擇一個數據庫,如圖1中的右上角,新表將建立在這個數據庫中。5.確定了數據庫后,在圖中點擊三角形的執行查詢按鈕,如果成功將顯示“命令已成功完成。
58、”這時新表就建立起來了,并且和表SplitCutMatTrack的結構一樣。6.要復制記錄先清空查詢窗口,按“CTRL+A”后再按Delete鍵,然后在查詢窗口中輸入“insert into test1 select * from SplitCutMatTrack”,如果成功將顯示“(所影響的行數為XX行)”。小技巧:如果被復制的表的字段設置有標志,按上述步驟建立了表后不能復制記錄,系統會提示:“服務器: 消息 8101,級別 16,狀態 1,行 1,僅當使用了列的列表,并且 IDENTITY_INSERT 為 ON 時,才能在表 test1 中為標志列指定顯式值。”處理方法為:把flag b
59、igint IDENTITY(1, 1) NOT NULL改為flag bigint NOT NULL。即把IDENTITY (1, 1)刪除,這樣就可以復制記錄了,最后在新表中手動設置標志。四、數據庫編程小技巧1.自動選中編輯框中的部分字符在做賬時,需要在多個Edit中錄入很多信息,然后提交到數據庫,一般Edit中有默認的字符,在Edit編輯框中只須改寫最后一個或兩個字符再按TAB鍵切換到下一個Edit,在此Edit中也只須修改一個或兩個字符后又要按TAB鍵進行切換。麻煩的是每次按TAB鍵后,系統默認會自動選中所有的字符,需要用鼠標鍵盤刪除最后兩個數字然后再錄入,既耗時又耗力。其實可以像圖4
60、那樣按下TAB鍵后Edit直接選中最后兩個數字,這樣就節省了人力,直接錄入就行了。圖4實現原理:當Edit成為焦點后,要確定兩件事:1.從哪一個字符開始被選中;2.選中多少個字符,使用TEdit類的屬性SelStart可以定位從哪一個字符開始被選中,SelLength可以指定選中字符的個數。實現方法:在Delphi開發環境中,選中一個Edit組件,在事件OnEnter中寫下面代碼:procedure TForm1.Edit6Enter(Sender: TObject);beginEdit6.SelStart:=9;Edit6.SelLength:=2;end;2.隔行改變DBGrid網格顏色D
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 法學概論考試常見試題及答案攻略
- 網絡管理員考試各類問題試題及答案
- 法學概論考試的創新與突破及試題及答案
- 2025年VB中的項目實施與管理考察題及答案
- 網絡安全中的社會工程學考核試題及答案
- 項目管理的關鍵要素試題及答案
- 行政管理重要參考試題及答案
- 2025年軟件工程基礎試題及答案
- 老年病科工作總結與未來規劃計劃
- 兒科病房護士工作計劃
- 《重金屬廢水處理工藝中的鐵碳微電解塔設計案例》2100字
- 《心力衰竭護理》課件
- 西昌古詩文品讀智慧樹知到期末考試答案2024年
- GB/T 3836.31-2021爆炸性環境第31部分:由防粉塵點燃外殼“t”保護的設備
- 哈爾濱工業大學機械制造裝備設計大作業
- 金風科技5MW風力發電機專業題庫分解
- HDS_VSP_G200安裝配置指南
- 排球比賽計分表2
- GB_T 3795-2014 錳鐵(高清版)
- API-685-中文_
- 《地圖上的中國》課件
評論
0/150
提交評論