




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