




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
SQL資料庫程式設(shè)計(jì)12.1Query組件的屬性和方法
SQL語言,又稱為結(jié)構(gòu)化查詢語言,它在資料庫程式設(shè)計(jì)中是十分重要的。任何一門支持資料庫程式設(shè)計(jì)的語言必定提供對(duì)SQL語言的支持,Delphi7.0也不例外。在Delphi7.0中提供了很多支持SQL語言操作的組件,Query組件就是其中之一。Query組件是BDE數(shù)據(jù)集組件之一,在Delphi7.0組件選擇板上BDE選項(xiàng)卡上,與Table組件具有很多共同的特性。第11章已經(jīng)對(duì)Table組件的使用較詳細(xì)地進(jìn)行了介紹。Query組件在SQL編程中佔(zhàn)據(jù)十分重要的地位,實(shí)現(xiàn)了Delphi7.0對(duì)SQL語言的支持。在Delphi7.0開發(fā)的資料庫應(yīng)用中,SQL語句是通過Query部件傳遞到要訪問的資料庫系統(tǒng)的資料庫引擎中,由資料庫引擎具體執(zhí)行SQL語句,以實(shí)現(xiàn)對(duì)數(shù)據(jù)的操作。而不是傳遞給Delphi7.0中的BDE,由BDE實(shí)施具體的SQL動(dòng)作。本章內(nèi)容重點(diǎn)講解如何用Query組件來進(jìn)行SQL語言的操作。12.1.1Query組件的常用屬性(1)1.DataBaseName屬性跟Table組件一樣,Query組件也是通過DataBaseName屬性來鏈接資料庫的。可以是某個(gè)資料庫別名也可以是某個(gè)數(shù)據(jù)表的路徑。詳細(xì)方法可以參照Table組件的用法。2.SQL屬性
Query組件是通過SQL屬性對(duì)數(shù)據(jù)集進(jìn)行操作,而不是通過指定一個(gè)TableName屬性的值直接指向一個(gè)表。SQL是一個(gè)字串對(duì)象,可以給該屬性設(shè)置SQL語句,從而讓Query組件使用SQL語句操縱資料庫。例如,在SQL屬性中輸入了合法的Select查詢語句,然後可以將Query組件的Active屬性設(shè)置為True或者調(diào)用Open方法就可以打開數(shù)據(jù)集。SQL屬性還提供了設(shè)置SQL語句的各種方法,如Add、Clear等方法分別用來添加和清除SQL語句,在程式中運(yùn)用十分廣泛。3.Filter屬性該屬性是用來過濾記錄的,就是按照某個(gè)字段的具體值進(jìn)行過濾記錄。它有點(diǎn)類似於查詢,也稱為篩選記錄。具體格式如下:Query1.Filter:='字段名=字段值'或者可以直接在對(duì)象流覽器中找到Filter屬性,並輸入“性別='男'”,注意不12.1.1Query組件的常用屬性(2)帶雙引號(hào),但過濾字段值“男”字必須用單引號(hào)括起來。但在代碼中,要用兩個(gè)連續(xù)的單引號(hào)表示一個(gè)單引號(hào)。另外,要讓Filter屬性設(shè)置的過濾條件有效,則必須設(shè)置另外一個(gè)屬性Filtered。只有當(dāng)Filtered屬性值為True時(shí),F(xiàn)ilter屬性設(shè)置才有效。其實(shí),在Table組件中也包含了Filter和Filtered屬性。所以,Table組件和Query組件的很多屬性都是相同的,而且用法也一樣,如Active、Fields等,可以參考Table組件中的相關(guān)用法。12.1.2Query組件的常用方法1.Open方法用於打開或啟動(dòng)Query數(shù)據(jù)集。一般只執(zhí)行Select查詢語句。2.ExecSQL方法執(zhí)行Query組件中的SQL語句,不僅可以執(zhí)行Select查詢語句,而且可以執(zhí)行其他的SQL命令,如Insert、Update、Delete等SQL命令。關(guān)於Open方法和ExecSQL方法的區(qū)別本書將在後面的章節(jié)裏進(jìn)一步地加以討論。3.Close方法關(guān)閉數(shù)據(jù)集。12.1.1Query組件的常用屬性(3)4.SQL屬性的兩個(gè)基本方法(1)Add方法給Query組件的SQL屬性添加SQL命令語句,以供Query組件執(zhí)行。Add是SQL屬性中的一個(gè)方法。如下列語句:Query1.SQL.Add(‘select*fromstudent’);Query1.SQL.Add(‘orderby學(xué)號(hào)’);//在前一句SQL語句的基礎(chǔ)上追加SQL語句這裏也可以把以上兩句語句合成一句,如下所示。這兩種方法是等效的。Query1.SQL.Add(‘select*fromstudentorderby學(xué)號(hào)’);(2)Clear方法Clear方法是清除Query組件的SQL屬性值。它也是SQL屬性中的一個(gè)方法。一般在用Add方法添加SQL語句前,先要用Clear方法將SQL屬性清空,然後再添加全新的SQL語句。12.1.1Query組件的常用屬性(4)【例12-1】使用Query組件顯示student.db中全部記錄內(nèi)容。設(shè)計(jì)窗體如圖12-1所示,程式運(yùn)行效果如圖12-2所示。圖12-1窗體設(shè)計(jì)介面
圖12-2程式運(yùn)行介面
這個(gè)例子要求用Query組件結(jié)合SQL語句顯示student.db中全部記錄內(nèi)容,並顯示在DBGrid組件中。具體實(shí)現(xiàn)步驟如下。
在應(yīng)用窗體中放置一個(gè)Query部件(Query1)、一個(gè)TDataSource部件(DataSource1)和一個(gè)TDataGrid部件(DBGrid1),並將它們鏈接起來;鏈接方法:將DataSource1組件的DataSet屬性設(shè)置為Query1;將DBGrid1組件的DataSource屬性設(shè)置為DataSource1。
設(shè)置窗體Query部件Query1的DatabaseName屬性值為數(shù)據(jù)庫別名stu_data
雙擊對(duì)象查看器ObjectInspector窗口中Query1的SQL屬性,Delphi7.0將顯示StringListEditor對(duì)話框。12.1.1Query組件的常用屬性(5)【例12-1】使用Query組件顯示student.db中全部記錄內(nèi)容。設(shè)計(jì)窗體如圖12-1所示,程式運(yùn)行效果如圖12-2所示。圖12-1窗體設(shè)計(jì)介面
圖12-2程式運(yùn)行介面
這個(gè)例子要求用Query組件結(jié)合SQL語句顯示student.db中全部記錄內(nèi)容,並顯示在DBGrid組件中。具體實(shí)現(xiàn)步驟如下。
在應(yīng)用窗體中放置一個(gè)Query部件(Query1)、一個(gè)TDataSource部件(DataSource1)和一個(gè)TDataGrid部件(DBGrid1),並將它們鏈接起來;鏈接方法:將DataSource1組件的DataSet屬性設(shè)置為Query1;將DBGrid1組件的DataSource屬性設(shè)置為DataSource1。
設(shè)置窗體Query部件Query1的DatabaseName屬性值為數(shù)據(jù)庫別名stu_data
雙擊對(duì)象查看器ObjectInspector窗口中Query1的SQL屬性,Delphi7.0將顯示StringListEditor對(duì)話框。12.1.1Query組件的常用屬性(6)
在圖12-3中的StringListEditor對(duì)話框中輸入SQL語句:Select*fromstudentorderby學(xué)號(hào)
單擊OK按鈕,關(guān)閉StringListEditor對(duì)話框。
設(shè)置Query的Open屬性為True。圖12-3StringListEditor對(duì)話框
這樣,就可以將student.db數(shù)據(jù)表中全部記錄內(nèi)容顯示在DataGrid1組件中。這是一種用SQL語句查詢數(shù)據(jù)集中記錄內(nèi)容的方法,另外在Delphi7.0中用得最多的還是在程式代碼中用相應(yīng)的方法來實(shí)現(xiàn)SQL語句的查詢。
利用代碼執(zhí)行SQL語句,在一般的資料庫程式設(shè)計(jì)中用得很廣泛,而且很靈活。但值得注意的是在添加SQL屬性前首先要用Close方法關(guān)閉數(shù)據(jù)集;在應(yīng)用程式中為SQL屬性設(shè)置新的SQL命令語句時(shí),必須要調(diào)用Clear方法以清除SQL屬性中現(xiàn)存的SQL命令語句,如果不調(diào)用Clear方法,可調(diào)用Add方法向SQL屬性中設(shè)置SQL命令語句,那麼新設(shè)置的SQL命令語句會(huì)追加在現(xiàn)存SQL命令語句後面,但在程式運(yùn)行時(shí)常常會(huì)出現(xiàn)出乎意料的查詢結(jié)果,甚至程式無法運(yùn)行下去。12.2動(dòng)態(tài)SQL語句的編程(1)Query組件提供了強(qiáng)大的SQL語言支持功能,這大大提高了資料庫應(yīng)用程式的執(zhí)行效率。Query組件不僅可以執(zhí)行靜態(tài)的SQL語句,而且可以執(zhí)行動(dòng)態(tài)的SQL語句。靜態(tài)SQL語句在程式設(shè)計(jì)時(shí)便已固定下來,它不包含任何參數(shù)和變數(shù)。而動(dòng)態(tài)SQL語句,被稱為參數(shù)化的語句,其中包含著表示字段名或表名的參數(shù)。在實(shí)際程式設(shè)計(jì)中使用得更多的是動(dòng)態(tài)SQL語句。在這一節(jié)將重點(diǎn)介紹如何給動(dòng)態(tài)SQL語句的參數(shù)賦值,以及在應(yīng)用程式中靈活地使用SQL語句。通常採用以下三種途徑來為它賦值,這三種途徑都是在程式代碼中實(shí)現(xiàn)的。1.採用字串連接符號(hào)“+”連接組成完整的SQL語句這裏用到字串連接符號(hào)“+”進(jìn)行字串的連接操作。具體表示方法如下:XM='趙凱'Query1.SQL.Add('select*fromstudentwhere姓名='''+XM+'''');注意,在Delphi7.0語言的字串中,連續(xù)兩個(gè)單引號(hào)表示一個(gè)單引號(hào)。上述SQL語句中由兩個(gè)字串連接符號(hào)“+”,三個(gè)字串連接而成,組成了一句完整的查詢語句。讀者要讀懂字串連接的含義。12.2動(dòng)態(tài)SQL語句的編程(2)Query組件提供了強(qiáng)大的SQL語言支持功能,這大大提高了資料庫應(yīng)用程式的執(zhí)行效率。Query組件不僅可以執(zhí)行靜態(tài)的SQL語句,而且可以執(zhí)行動(dòng)態(tài)的SQL語句。靜態(tài)SQL語句在程式設(shè)計(jì)時(shí)便已固定下來,它不包含任何參數(shù)和變數(shù)。而動(dòng)態(tài)SQL語句,被稱為參數(shù)化的語句,其中包含著表示字段名或表名的參數(shù)。在實(shí)際程式設(shè)計(jì)中使用得更多的是動(dòng)態(tài)SQL語句。在這一節(jié)將重點(diǎn)介紹如何給動(dòng)態(tài)SQL語句的參數(shù)賦值,以及在應(yīng)用程式中靈活地使用SQL語句。通常採用以下三種途徑來為它賦值,這三種途徑都是在程式代碼中實(shí)現(xiàn)的。1.採用字串連接符號(hào)“+”連接組成完整的SQL語句這裏用到字串連接符號(hào)“+”進(jìn)行字串的連接操作。具體表示方法如下:XM='趙凱'Query1.SQL.Add('select*fromstudentwhere姓名='''+XM+'''');注意,在Delphi7.0語言的字串中,連續(xù)兩個(gè)單引號(hào)表示一個(gè)單引號(hào)。上述SQL語句中由兩個(gè)字串連接符號(hào)“+”,三個(gè)字串連接而成,組成了一句完整的查詢語句。讀者要讀懂字串連接的含義。12.2動(dòng)態(tài)SQL語句的編程(3)2.使用Params屬性為參數(shù)賦值
Query組件具有一個(gè)Params屬性,它們?cè)谠O(shè)計(jì)時(shí)不可用,在程式運(yùn)行過程中可用,並且是動(dòng)態(tài)建立的,當(dāng)為Query組件編寫動(dòng)態(tài)SQL語句時(shí),Delphi7.0會(huì)自動(dòng)地建立一個(gè)數(shù)組Params,數(shù)組Params是以0下標(biāo)開始的,依次對(duì)應(yīng)動(dòng)態(tài)SQL語句中的參數(shù),也就是說動(dòng)態(tài)SQL語句中第一個(gè)參數(shù)對(duì)應(yīng)Params[0],第二個(gè)參數(shù)對(duì)應(yīng)Params[1],依此類推。3.使用ParamByName方法為參數(shù)賦值
ParamByName是一個(gè)函數(shù),用動(dòng)態(tài)SQL語句中的參數(shù)作為調(diào)用ParamByName函數(shù)的參數(shù),這樣便可以為它們賦值。使用這種賦值方法,必須要知道動(dòng)態(tài)SQL語句參數(shù)的名字。使用這種方法同樣可以為各參數(shù)賦值,但在ParamByName方法中必須指明參數(shù)名。這樣給參數(shù)賦值,更加直觀一些。注意不要把Params屬性和ParamByName方法的用法混淆,Params屬性中指明的是參數(shù)出現(xiàn)的先後次序,從0開始排序,Params[0]表示第一個(gè)參數(shù),Params[1]表示第二個(gè)參數(shù),依次類推。而ParamByName方法要指定參數(shù)的名稱,所以更加直觀、易理解。12.3常用SQL語句簡介SQL是結(jié)構(gòu)化查詢語言。SQL的大部分實(shí)現(xiàn)都與該語言的某個(gè)特定定義相關(guān)。例如,許多資料庫的SQL伺服器支持ANSI-92SQL定義。所使用的SQL語言的語法依賴於所用的特定資料庫。結(jié)構(gòu)化查詢語言SQL是定義和維護(hù)關(guān)係資料庫的專用語言,已經(jīng)被眾多的資料庫管理系統(tǒng)所採用,如MSSQLSERVER、ORACLE、SYBASE、Informix等資料庫管理系統(tǒng)。事實(shí)上,關(guān)於SQL語言有一個(gè)專門的ANSI標(biāo)準(zhǔn),而很多資料庫管理系統(tǒng)又有自己對(duì)標(biāo)準(zhǔn)SQL語言的擴(kuò)充。Delphi7.0與使用SQL語言的資料庫管理系統(tǒng)相容,在使用Delphi7.0開發(fā)資料庫應(yīng)用程式時(shí),可以使用SQL語言編程,開發(fā)出功能強(qiáng)大的客戶/伺服器程式。12.3.1SQL的優(yōu)點(diǎn)SQL的用戶包括應(yīng)用程式員、DBA管理員和終端用戶。SQL語言的優(yōu)點(diǎn)很多,簡述如下。(1)非過程化語言
SQL是一個(gè)非過程化的語言,因?yàn)樗淮翁幚硪粋€(gè)記錄,對(duì)數(shù)據(jù)提供自動(dòng)導(dǎo)航。SQL允許用戶在高層的數(shù)據(jù)結(jié)構(gòu)上工作,可操作記錄集,而不對(duì)單個(gè)記錄進(jìn)行操作。所有SQL語句接受集合作為輸入,返回集合作為輸出。SQL的集合特性允許一條SQL語句的結(jié)果作為另一條SQL語句的輸入。(2)統(tǒng)一的語言
SQL可用於所有用戶的DB活動(dòng)模型,包括系統(tǒng)管理員、資料庫管理員、應(yīng)用程式員、決策支持系統(tǒng)人員及許多其他類型的終端用戶?;镜腟QL命令只需很少時(shí)間就能學(xué)會(huì),最高級(jí)的命令在幾天內(nèi)便可掌握。(3)SQL是所有關(guān)係資料庫的公共語言由於所有主要的關(guān)係資料庫管理系統(tǒng)都支持SQL語言,用戶可將使用SQL的技能從一個(gè)DBMS轉(zhuǎn)到另一個(gè)。所有用SQL編寫的程式都是可以移植的,從而大大加強(qiáng)了資料庫程式開發(fā)的靈活性。程式開發(fā)人員可以用多種語言編寫資料庫應(yīng)用程式,但對(duì)數(shù)據(jù)庫維護(hù)的SQL語句的使用是一致的。12.3.2SQL語言的基本操作(1)SQL語言的作用很廣,它最大、最突出的功能就是查詢,也是它用得最廣的功能。除了查詢以外還可以實(shí)現(xiàn)記錄的插入、修改和刪除以及數(shù)據(jù)表的建立、修改、刪除等操作。1.Select語句
Select語句用於以行為單位從一個(gè)或多個(gè)表獲取數(shù)據(jù)。現(xiàn)在,把注意力集中到單表的Select語句上。Select語句的關(guān)鍵字如表12-2所示?;镜腟elect語句的規(guī)範(fàn)形式如下:Select字段列表From表名Where查詢條件Groupby分組字段Having分組條件Ooderby字段名[ASC|DESC]
一般在程式中應(yīng)用SQL語句前,經(jīng)常要先調(diào)試SQL語句是否書寫正確。在Delphi7.0中為了調(diào)試SQL語句,提供了資料庫流覽器工具——SQLExplorer。資料庫流覽器——SQLExplorer可以通過Delphi7.0主菜單中的【Database】菜單下的【Explorer】菜單項(xiàng)進(jìn)入,如圖12-5所示。圖12-5SQLExplorer操作窗體12.3.2SQL語言的基本操作(2)
在SQLExplorer操作窗口的左窗口中選擇資料庫別名,如stu_data,可以查看該別名下的數(shù)據(jù)表中詳細(xì)內(nèi)容,包括數(shù)據(jù)表的定義資訊、記錄內(nèi)容和字段等詳細(xì)資訊。要調(diào)試SQL語句,可以在右邊窗口中選擇EnterSQL選項(xiàng),並在文本框中輸入SQL語句。例如在上圖中輸入select*fromSTUDENT,然後單擊右邊的執(zhí)行SQL按鈕,如果SQL語句書寫正確就會(huì)在下面網(wǎng)格中顯示具體的查詢結(jié)果?!纠?2-4】組合查詢記錄所謂組合查詢就是在查詢時(shí)查詢條件有多個(gè)。在where子句後面各個(gè)條件之間用邏輯運(yùn)算符and或者or進(jìn)行連接,例如要查詢姓“李”的“男”學(xué)生的記錄,則SQL查詢語句應(yīng)該這樣寫:
Select*fromstudentwhere姓名like'李%'and性別='男'
此例在【例12-2】的基礎(chǔ)上,增加用姓名和性別兩個(gè)字段的組合查詢,並要求對(duì)姓名可以實(shí)現(xiàn)模糊匹配查詢。在原來的基礎(chǔ)上添加1個(gè)標(biāo)籤框Label2和1個(gè)組合框ComboBox1,在組合框ComboBox1中添加“所有”、“男”、“女”3個(gè)選項(xiàng),並修改Button1的Click事件代碼如下:12.3.2SQL語言的基本操作(3)procedureTForm1.Button1Click(Sender:TObject);VarStrSql:String;//存放SQL語句的變數(shù)beginStrSql:='select*fromstudentWhere1=1';{這個(gè)語句是給StrSql變數(shù)賦初值,“1=1”這個(gè)條件始終為真,並沒有多大意義,只是為了下麵的SQL語句的連接時(shí)方便一些。}IfTrim(Edit1.Text)<>''ThenStrSql:=StrSql+'And姓名Like''%'+Trim(Edit1.Text)+'%''';//注意字串的連接方法,兩個(gè)連續(xù)的單引號(hào)表示一個(gè)單引號(hào)IfTrim(Combobox1.Text)<>'所有'Then StrSql:=StrSql+'And性別='''+Trim(Combobox1.Text)+'''';Query1.Close;Query1.SQL.Clear;Query1.SQL.Add(StrSql);//將StrSql變數(shù)值加到Query1組件的Sql屬性中Query1.Prepare;Query1.Open;ifQuery1.Eofthenbegin12.3.2SQL語言的基本操作(4)
showmessage('沒有找到相關(guān)記錄!');Edit1.Clear;Combobox1.text:='所有';Query1.Close;Query1.SQL.Clear;Query1.SQL.Add('select*fromstudent');Query1.Open;endend;【例12-5】用SQL語句從Student.db和Score.db兩張數(shù)據(jù)表中查詢記錄內(nèi)容。跟前面幾個(gè)例子一樣,在窗體上放置1個(gè)Query組件、1個(gè)DataSource組件、1個(gè)DBGrid組件和1個(gè)DBNavigator組件。如圖12-6所示。將Datasouce組件的DataSet屬性設(shè)置為Query1,並分別將DBGrid組件和DBNavigator組件的DataSource屬性都設(shè)置為DataSource1。本例要求從Student.db中選擇學(xué)生的學(xué)號(hào)和姓名兩個(gè)字段的數(shù)據(jù),從學(xué)生成績表Score.db中選擇與該學(xué)生相關(guān)的課程和成績兩個(gè)字段的內(nèi)容,構(gòu)成一個(gè)新的記錄集,可在窗體的OnActivate事件中使用SQL語句,通過“wherestudent.學(xué)號(hào)=Score.學(xué)號(hào)”短語將兩個(gè)表連接起來。SQL語句表示如下:圖12-6多表查詢運(yùn)行介面12.3.2SQL語言的基本操作(6)具體程式代碼如下:procedureTForm1.FormActivate(Sender:TObject);beginQuery1.DatabaseName:='stu_data';//設(shè)置Query組件的別名Query1.Close;Query1.SQL.Clear;Query1.SQL.Add('selectstudent.學(xué)號(hào),student.姓名,Score.課程,Score.成績');Query1.SQL.Add('fromstudent,Score');Query1.SQL.Add('wherestudent.學(xué)號(hào)=Score.學(xué)號(hào)');Query1.Open;end;
當(dāng)程式運(yùn)行後,數(shù)據(jù)顯示效果如圖12-5所示,通過DBNavigator組件可以流覽記錄指針,但卻不能添加、刪除和更新記錄內(nèi)容,請(qǐng)讀者自己思考為什麼不行?12.3.2SQL語言的基本操作(7)【例12-6】用SQL語句從Student.db統(tǒng)計(jì)出男生和女生的人數(shù),如圖12-7輸出。圖12-7輸出男女生人數(shù)統(tǒng)計(jì)表
在窗體上放置1個(gè)Query組件、1個(gè)DataSource組件、1個(gè)DBGrid組件。將DataSource組件的DataSet屬性設(shè)置為Query1,並分別將DBGrid組件的DataSource屬性都設(shè)置為DataSource1。為了統(tǒng)計(jì)男生和女生的人數(shù),需要對(duì)student.db數(shù)據(jù)表中的記錄按性別進(jìn)行分組?!癎roupby性別”可以將性別相同的記錄合併成一條記錄。要得到統(tǒng)計(jì)結(jié)果,需要構(gòu)造一個(gè)輸出字段,此時(shí)可使用SQL的統(tǒng)計(jì)函數(shù)Count()作為輸出字段,它按性別分組統(tǒng)計(jì)每個(gè)分組的記錄個(gè)數(shù),要顯示統(tǒng)計(jì)結(jié)果,可以用AS短語命名一個(gè)新的字段別名。本例的SQL語句書寫如下:
Select性別,Count(*)as人數(shù)fromstudentGroupby性別12.3.2SQL語言的基本操作(8)程式代碼寫在窗體的OnActivate事件中,具體如下所示:procedureTForm1.FormActivate(Sender:TObject);beginQuery1.DatabaseName:='stu_data';Query1.Close;Query1.SQL.Clear;Query1.SQL.Add('select性別,count(*)as人數(shù)fromstudentGroupby性別');Query1.Open;end;
如果統(tǒng)計(jì)每個(gè)學(xué)生的所有課程的總分,顯示學(xué)號(hào),姓名和總分三項(xiàng)內(nèi)容,則SQL語句又該怎麼寫呢?這裏要查詢姓名和成績,所以必須從兩張表中進(jìn)行鏈接查詢,SQL語句表示如下:selectscore.學(xué)號(hào),student.姓名,sum(score.成績)AS總分fromscore,studentWherescore.學(xué)號(hào)=student.學(xué)號(hào)Groupbyscore.學(xué)號(hào),student.姓名12.3.2SQL語言的基本操作(9)2.Delete語句
Delete語句非常簡單,它的作用是用來刪除數(shù)據(jù)表中的記錄。具體格式如下:Deletefrom表名where條件該命令將刪除數(shù)據(jù)表中滿足條件的所有記錄內(nèi)容。更常見的情況是需要?jiǎng)h除數(shù)據(jù)的特定行。對(duì)這種情況,添加Where子句即可。Delete語句僅僅刪除指定條件的記錄,並不是刪除數(shù)據(jù)表;如果沒有指定刪除條件,則刪除數(shù)據(jù)表中的所有記錄。
2.Delete語句
Delete語句非常簡單,它的作用是用來刪除數(shù)據(jù)表中的記錄。具體格式如下:
Deletefrom表名where條件該命令將刪除數(shù)據(jù)表中滿足條件的所有記錄內(nèi)容。更常見的情況是需要?jiǎng)h除數(shù)據(jù)的特定行。對(duì)這種情況,添加Where子句即可。Delete語句僅僅刪除指定條件的記錄,並不是刪除數(shù)據(jù)表;如果沒有指定刪除條件,則刪除數(shù)據(jù)表中的所有記錄。圖12-8刪除指定學(xué)號(hào)的學(xué)生記錄12.3.2SQL語言的基本操作(10)確定刪除”按鈕的Click事件代碼如下:procedureTForm1.Button1Click(Sender:TObject);beginifMessageDlg('你真的要?jiǎng)h除學(xué)號(hào)為'+trim(Edit1.Text)+'的學(xué)生記錄嗎?',mtwarning,mbOKCancel,1)=mrOKthenbeginQuery1.Close;Query1.SQL.Clear;Query1.SQL.Add('Deletefromstudentwhere學(xué)號(hào)=:XH');Query1.ParamByName('XH').AsString:=TRIM(EDIT1.Text);Query1.ExecSQL;//必須調(diào)用ExecSQL方法執(zhí)行Delete語句,沒有返回結(jié)果
//重新獲取student表中的所有記錄
Query1.Close;Query1.SQL.Clear;Query1.SQL.Add('select*fromstudent');Query1.Open;//查詢語句要用Open方法執(zhí)行,返回一個(gè)記錄集end;end;12.3.2SQL語言的基本操作(11)3.Insert語句
Insert語句更為複雜。它用於向表添加行。Insert語句可用於向所有的字段添加值,也可以只對(duì)某些字段添加值,這依賴於具體使用的Insert語句。由於這個(gè)原因,Insert語句需要表名、字段列表,以及與每個(gè)字段相匹配的值。語句的具體形式如下:Insertinto數(shù)據(jù)表名(字段名1,字段名2,…)Values(字段值1,字段值2,…)說明:(1)如果沒有指定字段名,系統(tǒng)則會(huì)按數(shù)據(jù)表中字段的先後順序插入數(shù)據(jù);(2)字段值的數(shù)據(jù)類型必須與對(duì)應(yīng)字段的數(shù)據(jù)類型相吻合;(3)數(shù)據(jù)表名可以是可以更新的視圖名稱,也可以是經(jīng)過子查詢把別的數(shù)據(jù)表中的內(nèi)容插入?!纠?2-8】使用Insert語句插入記錄。在【例12-1】的基礎(chǔ)上添加如圖12-9所示的幾個(gè)組件:1個(gè)GroupBox組件、7個(gè)標(biāo)籤框(Label1~Label7)、7個(gè)編輯框(Edit1~Edit7)和2個(gè)命令按鈕procedureTForm1.Button1Click(Sender:TObject);//“插入”按鈕Click事件過程Varxh,xm,xb,csrq,zzmm,jg,rxcj:string;beginTry{開始捕捉錯(cuò)誤}Query1.Close;query1.SQL.Clear;//在SQL語句中,字元類型和日期型的字段值必須加單引號(hào),數(shù)值型字段不需要加單引號(hào)xh:=''''+edit1.Text+'''';//學(xué)號(hào),需加引號(hào)xm:=''''+edit2.Text+''''; //姓名xb:=''''+edit3.Text+''''; //性別csrq:=''''+edit4.Text+''''; //出生日期zzmm:=''''+edit5.Text+''''; //政治面貌jg:=''''+edit6.Text+''''; //籍貫rxcj:=edit7.Text; //入學(xué)成績,不需要加單引號(hào)12.3.2SQL語言的基本操作(12)(Button1~Button2)。7個(gè)標(biāo)籤框分別標(biāo)注student.db數(shù)據(jù)表中的7個(gè)字段名,(圖12-9使用insert語句插入記錄)12.3.2SQL語言的基本操作(13)query1.SQL.Add('Insertintostudentvalues('+xh+','+xm+','+xb+','+csrq+','+zzmm+','+jg+','+rxcj+')');query1.SQL.Add('InsertintostudentValues(''030117'',''李香香2'',''女'',''4/5/45'',''團(tuán)員'',''浙江'',442)');query1.ExecSQL;ExceptonEDBEngineErrordo//如果資料庫操作發(fā)生錯(cuò)誤,則顯示提示資訊。
beginapplication.MessageBox('資料庫登錄錯(cuò)誤;請(qǐng)檢查【學(xué)號(hào)是否重複!】'+#13+#10+'或者【字段值是否為空!】或【字段類型是否匹配!】','錯(cuò)誤!',MB_OKCANCEL);end;end;//重新顯示全部記錄內(nèi)容withquery1dobeginclose;
12.3.2SQL語言的基本操作(14)4.Update語句
Update語句用於修改現(xiàn)存的記錄。Update語句如果不使用where子句,將更新所有的記錄。大多數(shù)情況下都需要限制更新記錄的條件,但所有的更新都從基本的語句開始。SQL語言中Update的語法如下:Update數(shù)據(jù)表名set字段名1=字段值1[,字段名2=字段值2,字段名N=字段值N]Where更新條件該語句以關(guān)鍵字Update開始,後接數(shù)據(jù)表名。set子句後接逗號(hào)分隔的列表,包括所要更新的字段及其新值。【例12-9】使用Update語句修改記錄。介面跟【例12-8】基本保持不變,只添加一個(gè)Memo1組件,用來顯示SQL語句。具體介面如圖12-10所示。圖12-10使用Update語句修改記錄
程式要求先單擊DBGrid1組件,選擇一條要修改的記錄,並將該記錄的各字段值分別顯示到對(duì)應(yīng)的編輯框中,供用戶修改。修改完畢後,單擊“確定修改”按鈕調(diào)用SQL語句中的Update命令提交修改,並將Update語句顯示在Memo1組件中。具體代碼如下:12.3.2SQL語言的基本操作(15)procedureTForm1.Button1Click(Sender:TObject);Varxh,xm,xb,csrq,zzmm,jg,rxcj:string;begin//在SQL語句中,字元類型的字段值必須加單引號(hào),數(shù)值型字段不需要加單引號(hào)xh:=''''+edit1.Text+'''';//學(xué)號(hào)xm:=''''+edit2.Text+'''';//姓名xb:=''''+edit3.Text+'''';//性別csrq:=''''+edit4.Text+'''';//出生日期zzmm:=''''+edit5.Text+'''';//政治面貌jg:=''''+edit6.Text+'''';//籍貫rxcj:=edit7.Text;//入學(xué)成績Tryquery1.Close;query1.SQL.Clear;query1.SQL.Add('Updatestudentset姓名='+xm+',性別='+xb+',出生日期='+csrq+',政治面貌='+zzmm+',籍貫='+jg+',入學(xué)成績='+rxcj);query1.SQL.Add('WHERE學(xué)號(hào)='+xh);
12.3.2SQL語言的基本操作(17)memo1.Text:=query1.SQL.Text;//在Memo1中顯示SQL語句
query1.ExecSQL;ExceptonEDBEngineErrordobeginapplication.MessageBox('資料庫登錄錯(cuò)誤;請(qǐng)檢查:'+#13+#10+'【字段值是否為空!】或【字段類型是否匹配!】','錯(cuò)誤!',MB_OKCANCEL);end;end;//重新顯示全部記錄內(nèi)容withquery1dobeginclose;sql.Clear;sql.Add('select*fromstudentorderby學(xué)號(hào)');
open;end;end;{單擊DBGrid1組件中的一條記錄時(shí),在文本框中顯示選中記錄內(nèi)容}12.3.2SQL語言的基本操作(18)procedureTForm1.DBGrid1CellClick(Column:TColumn);beginwithquery1dobeginedit1.Text:=fieldbyname('學(xué)號(hào)').AsString;edit2.Text:=fieldbyname('姓名').AsString;edit3.Text:=fieldbyname('性別').AsString;edit4.Text:=formatdatetime('mm''/''dd''/''yyyy',strtodate(fieldbyna
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國低壓儲(chǔ)罐行業(yè)發(fā)展?jié)摿︻A(yù)測及投資戰(zhàn)略規(guī)劃報(bào)告
- 2025年中國智能中繼器行業(yè)市場深度分析及投資戰(zhàn)略研究報(bào)告
- 2025-2030中國橋梁用鋼行業(yè)市場深度分析及前景趨勢與投資研究報(bào)告
- 2025年中國條紋馬克杯行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報(bào)告
- 2025-2030中國暗光纖網(wǎng)絡(luò)行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報(bào)告
- 2025-2030中國智能橋梁行業(yè)市場發(fā)展現(xiàn)狀及競爭格局與投資前景研究報(bào)告
- 2025-2030中國易拉寶行業(yè)競爭分析及發(fā)展前景預(yù)測報(bào)告
- 2025-2030中國旋涂油行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報(bào)告
- 2025-2030年中國金六福酒行業(yè)深度研究分析報(bào)告
- 2025-2030中國教育裝備行業(yè)供需趨勢及投資風(fēng)險(xiǎn)研究報(bào)告
- 國家職業(yè)技術(shù)技能標(biāo)準(zhǔn) 4-10-04-02 保健按摩師 人社廳發(fā)202332號(hào)
- 《三國志》導(dǎo)讀學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- GB/T 32124-2024磷石膏的處理處置規(guī)范
- DB32∕T 3698-2019 建筑電氣防火設(shè)計(jì)規(guī)程
- 設(shè)計(jì)部晉升制度
- 2022年大學(xué)生就業(yè)指導(dǎo)綜合測試卷及答案(題庫)
- 人教版(PEP)2024年小升初英語試卷(含答案)
- DB53∕T 1269-2024 改性磷石膏用于礦山廢棄地生態(tài)修復(fù)回填技術(shù)規(guī)范
- 中國海油安全知識(shí)手冊(cè)(2023版)-純文字版
- 2024年軍考英語真題歷年軍考真題系列
- 2023年10月中國互聯(lián)網(wǎng)發(fā)展基金會(huì)招考2名工作人員筆試歷年典型考題及考點(diǎn)剖析附答案詳解
評(píng)論
0/150
提交評(píng)論