SQL數(shù)據(jù)庫程序設計課件_第1頁
SQL數(shù)據(jù)庫程序設計課件_第2頁
SQL數(shù)據(jù)庫程序設計課件_第3頁
SQL數(shù)據(jù)庫程序設計課件_第4頁
SQL數(shù)據(jù)庫程序設計課件_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Query組件的屬性Query組件的方法SQL語言基礎Query組件利用SQL語言的增、刪、改、查操作綜合實例:學生信息管理程序

SQL數(shù)據(jù)庫程序設計12.1Query組件的屬性和方法

SQL語言,又稱為結構化查詢語言,它在數(shù)據(jù)庫程序設計中是十分重要的。任何一門支持數(shù)據(jù)庫程序設計的語言必定提供對SQL語言的支持,Delphi7.0也不例外。在Delphi7.0中提供了很多支持SQL語言操作的組件,Query組件就是其中之一。Query組件是BDE數(shù)據(jù)集組件之一,在Delphi7.0組件選擇板上BDE選項卡上,與Table組件具有很多共同的特性。第11章已經對Table組件的使用較詳細地進行了介紹。Query組件在SQL編程中占據(jù)十分重要的地位,實現(xiàn)了Delphi7.0對SQL語言的支持。在Delphi7.0開發(fā)的數(shù)據(jù)庫應用中,SQL語句是通過Query部件傳遞到要訪問的數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)庫引擎中,由數(shù)據(jù)庫引擎具體執(zhí)行SQL語句,以實現(xiàn)對數(shù)據(jù)的操作。而不是傳遞給Delphi7.0中的BDE,由BDE實施具體的SQL動作。本章內容重點講解如何用Query組件來進行SQL語言的操作。12.1.1Query組件的常用屬性(1)1.DataBaseName屬性跟Table組件一樣,Query組件也是通過DataBaseName屬性來鏈接數(shù)據(jù)庫的。可以是某個數(shù)據(jù)庫別名也可以是某個數(shù)據(jù)表的路徑。詳細方法可以參照Table組件的用法。2.SQL屬性

Query組件是通過SQL屬性對數(shù)據(jù)集進行操作,而不是通過指定一個TableName屬性的值直接指向一個表。SQL是一個字符串對象,可以給該屬性設置SQL語句,從而讓Query組件使用SQL語句操縱數(shù)據(jù)庫。例如,在SQL屬性中輸入了合法的Select查詢語句,然后可以將Query組件的Active屬性設置為True或者調用Open方法就可以打開數(shù)據(jù)集。SQL屬性還提供了設置SQL語句的各種方法,如Add、Clear等方法分別用來添加和清除SQL語句,在程序中運用十分廣泛。3.Filter屬性該屬性是用來過濾記錄的,就是按照某個字段的具體值進行過濾記錄。它有點類似于查詢,也稱為篩選記錄。具體格式如下:Query1.Filter:='字段名=字段值'或者可以直接在對象瀏覽器中找到Filter屬性,并輸入“性別='男'”,注意不12.1.1Query組件的常用屬性(2)帶雙引號,但過濾字段值“男”字必須用單引號括起來。但在代碼中,要用兩個連續(xù)的單引號表示一個單引號。另外,要讓Filter屬性設置的過濾條件有效,則必須設置另外一個屬性Filtered。只有當Filtered屬性值為True時,F(xiàn)ilter屬性設置才有效。其實,在Table組件中也包含了Filter和Filtered屬性。所以,Table組件和Query組件的很多屬性都是相同的,而且用法也一樣,如Active、Fields等,可以參考Table組件中的相關用法。12.1.2Query組件的常用方法1.Open方法用于打開或激活Query數(shù)據(jù)集。一般只執(zhí)行Select查詢語句。2.ExecSQL方法執(zhí)行Query組件中的SQL語句,不僅可以執(zhí)行Select查詢語句,而且可以執(zhí)行其他的SQL命令,如Insert、Update、Delete等SQL命令。關于Open方法和ExecSQL方法的區(qū)別本書將在后面的章節(jié)里進一步地加以討論。3.Close方法關閉數(shù)據(jù)集。12.1.1Query組件的常用屬性(3)4.SQL屬性的兩個基本方法(1)Add方法給Query組件的SQL屬性添加SQL命令語句,以供Query組件執(zhí)行。Add是SQL屬性中的一個方法。如下列語句:Query1.SQL.Add(‘select*fromstudent’);Query1.SQL.Add(‘orderby學號’);//在前一句SQL語句的基礎上追加SQL語句這里也可以把以上兩句語句合成一句,如下所示。這兩種方法是等效的。Query1.SQL.Add(‘select*fromstudentorderby學號’);(2)Clear方法Clear方法是清除Query組件的SQL屬性值。它也是SQL屬性中的一個方法。一般在用Add方法添加SQL語句前,先要用Clear方法將SQL屬性清空,然后再添加全新的SQL語句。12.1.1Query組件的常用屬性(4)【例12-1】使用Query組件顯示student.db中全部記錄內容。設計窗體如圖12-1所示,程序運行效果如圖12-2所示。圖12-1窗體設計界面

圖12-2程序運行界面

這個例子要求用Query組件結合SQL語句顯示student.db中全部記錄內容,并顯示在DBGrid組件中。具體實現(xiàn)步驟如下。

在應用窗體中放置一個Query部件(Query1)、一個TDataSource部件(DataSource1)和一個TDataGrid部件(DBGrid1),并將它們鏈接起來;鏈接方法:將DataSource1組件的DataSet屬性設置為Query1;將DBGrid1組件的DataSource屬性設置為DataSource1。

設置窗體Query部件Query1的DatabaseName屬性值為數(shù)據(jù)庫別名stu_data

雙擊對象查看器ObjectInspector窗口中Query1的SQL屬性,Delphi7.0將顯示StringListEditor對話框。12.1.1Query組件的常用屬性(5)【例12-1】使用Query組件顯示student.db中全部記錄內容。設計窗體如圖12-1所示,程序運行效果如圖12-2所示。圖12-1窗體設計界面

圖12-2程序運行界面

這個例子要求用Query組件結合SQL語句顯示student.db中全部記錄內容,并顯示在DBGrid組件中。具體實現(xiàn)步驟如下。

在應用窗體中放置一個Query部件(Query1)、一個TDataSource部件(DataSource1)和一個TDataGrid部件(DBGrid1),并將它們鏈接起來;鏈接方法:將DataSource1組件的DataSet屬性設置為Query1;將DBGrid1組件的DataSource屬性設置為DataSource1。

設置窗體Query部件Query1的DatabaseName屬性值為數(shù)據(jù)庫別名stu_data

雙擊對象查看器ObjectInspector窗口中Query1的SQL屬性,Delphi7.0將顯示StringListEditor對話框。12.1.1Query組件的常用屬性(6)

在圖12-3中的StringListEditor對話框中輸入SQL語句:Select*fromstudentorderby學號

單擊OK按鈕,關閉StringListEditor對話框。

設置Query的Open屬性為True。圖12-3StringListEditor對話框

這樣,就可以將student.db數(shù)據(jù)表中全部記錄內容顯示在DataGrid1組件中。這是一種用SQL語句查詢數(shù)據(jù)集中記錄內容的方法,另外在Delphi7.0中用得最多的還是在程序代碼中用相應的方法來實現(xiàn)SQL語句的查詢。

利用代碼執(zhí)行SQL語句,在一般的數(shù)據(jù)庫程序設計中用得很廣泛,而且很靈活。但值得注意的是在添加SQL屬性前首先要用Close方法關閉數(shù)據(jù)集;在應用程序中為SQL屬性設置新的SQL命令語句時,必須要調用Clear方法以清除SQL屬性中現(xiàn)存的SQL命令語句,如果不調用Clear方法,可調用Add方法向SQL屬性中設置SQL命令語句,那么新設置的SQL命令語句會追加在現(xiàn)存SQL命令語句后面,但在程序運行時常常會出現(xiàn)出乎意料的查詢結果,甚至程序無法運行下去。12.2動態(tài)SQL語句的編程(1)Query組件提供了強大的SQL語言支持功能,這大大提高了數(shù)據(jù)庫應用程序的執(zhí)行效率。Query組件不僅可以執(zhí)行靜態(tài)的SQL語句,而且可以執(zhí)行動態(tài)的SQL語句。靜態(tài)SQL語句在程序設計時便已固定下來,它不包含任何參數(shù)和變量。而動態(tài)SQL語句,被稱為參數(shù)化的語句,其中包含著表示字段名或表名的參數(shù)。在實際程序設計中使用得更多的是動態(tài)SQL語句。在這一節(jié)將重點介紹如何給動態(tài)SQL語句的參數(shù)賦值,以及在應用程序中靈活地使用SQL語句。通常采用以下三種途徑來為它賦值,這三種途徑都是在程序代碼中實現(xiàn)的。1.采用字符串連接符號“+”連接組成完整的SQL語句這里用到字符串連接符號“+”進行字符串的連接操作。具體表示方法如下:XM='趙凱'Query1.SQL.Add('select*fromstudentwhere姓名='''+XM+'''');注意,在Delphi7.0語言的字符串中,連續(xù)兩個單引號表示一個單引號。上述SQL語句中由兩個字符串連接符號“+”,三個字符串連接而成,組成了一句完整的查詢語句。讀者要讀懂字符串連接的含義。12.2動態(tài)SQL語句的編程(2)Query組件提供了強大的SQL語言支持功能,這大大提高了數(shù)據(jù)庫應用程序的執(zhí)行效率。Query組件不僅可以執(zhí)行靜態(tài)的SQL語句,而且可以執(zhí)行動態(tài)的SQL語句。靜態(tài)SQL語句在程序設計時便已固定下來,它不包含任何參數(shù)和變量。而動態(tài)SQL語句,被稱為參數(shù)化的語句,其中包含著表示字段名或表名的參數(shù)。在實際程序設計中使用得更多的是動態(tài)SQL語句。在這一節(jié)將重點介紹如何給動態(tài)SQL語句的參數(shù)賦值,以及在應用程序中靈活地使用SQL語句。通常采用以下三種途徑來為它賦值,這三種途徑都是在程序代碼中實現(xiàn)的。1.采用字符串連接符號“+”連接組成完整的SQL語句這里用到字符串連接符號“+”進行字符串的連接操作。具體表示方法如下:XM='趙凱'Query1.SQL.Add('select*fromstudentwhere姓名='''+XM+'''');注意,在Delphi7.0語言的字符串中,連續(xù)兩個單引號表示一個單引號。上述SQL語句中由兩個字符串連接符號“+”,三個字符串連接而成,組成了一句完整的查詢語句。讀者要讀懂字符串連接的含義。12.2動態(tài)SQL語句的編程(3)2.使用Params屬性為參數(shù)賦值

Query組件具有一個Params屬性,它們在設計時不可用,在程序運行過程中可用,并且是動態(tài)建立的,當為Query組件編寫動態(tài)SQL語句時,Delphi7.0會自動地建立一個數(shù)組Params,數(shù)組Params是以0下標開始的,依次對應動態(tài)SQL語句中的參數(shù),也就是說動態(tài)SQL語句中第一個參數(shù)對應Params[0],第二個參數(shù)對應Params[1],依此類推。3.使用ParamByName方法為參數(shù)賦值

ParamByName是一個函數(shù),用動態(tài)SQL語句中的參數(shù)作為調用ParamByName函數(shù)的參數(shù),這樣便可以為它們賦值。使用這種賦值方法,必須要知道動態(tài)SQL語句參數(shù)的名字。使用這種方法同樣可以為各參數(shù)賦值,但在ParamByName方法中必須指明參數(shù)名。這樣給參數(shù)賦值,更加直觀一些。注意不要把Params屬性和ParamByName方法的用法混淆,Params屬性中指明的是參數(shù)出現(xiàn)的先后次序,從0開始排序,Params[0]表示第一個參數(shù),Params[1]表示第二個參數(shù),依次類推。而ParamByName方法要指定參數(shù)的名稱,所以更加直觀、易理解。12.3常用SQL語句簡介SQL是結構化查詢語言。SQL的大部分實現(xiàn)都與該語言的某個特定定義相關。例如,許多數(shù)據(jù)庫的SQL服務器支持ANSI-92SQL定義。所使用的SQL語言的語法依賴于所用的特定數(shù)據(jù)庫。結構化查詢語言SQL是定義和維護關系數(shù)據(jù)庫的專用語言,已經被眾多的數(shù)據(jù)庫管理系統(tǒng)所采用,如MSSQLSERVER、ORACLE、SYBASE、Informix等數(shù)據(jù)庫管理系統(tǒng)。事實上,關于SQL語言有一個專門的ANSI標準,而很多數(shù)據(jù)庫管理系統(tǒng)又有自己對標準SQL語言的擴充。Delphi7.0與使用SQL語言的數(shù)據(jù)庫管理系統(tǒng)兼容,在使用Delphi7.0開發(fā)數(shù)據(jù)庫應用程序時,可以使用SQL語言編程,開發(fā)出功能強大的客戶/服務器程序。12.3.1SQL的優(yōu)點SQL的用戶包括應用程序員、DBA管理員和終端用戶。SQL語言的優(yōu)點很多,簡述如下。(1)非過程化語言

SQL是一個非過程化的語言,因為它一次處理一個記錄,對數(shù)據(jù)提供自動導航。SQL允許用戶在高層的數(shù)據(jù)結構上工作,可操作記錄集,而不對單個記錄進行操作。所有SQL語句接受集合作為輸入,返回集合作為輸出。SQL的集合特性允許一條SQL語句的結果作為另一條SQL語句的輸入。(2)統(tǒng)一的語言

SQL可用于所有用戶的DB活動模型,包括系統(tǒng)管理員、數(shù)據(jù)庫管理員、應用程序員、決策支持系統(tǒng)人員及許多其他類型的終端用戶?;镜腟QL命令只需很少時間就能學會,最高級的命令在幾天內便可掌握。(3)SQL是所有關系數(shù)據(jù)庫的公共語言由于所有主要的關系數(shù)據(jù)庫管理系統(tǒng)都支持SQL語言,用戶可將使用SQL的技能從一個DBMS轉到另一個。所有用SQL編寫的程序都是可以移植的,從而大大加強了數(shù)據(jù)庫程序開發(fā)的靈活性。程序開發(fā)人員可以用多種語言編寫數(shù)據(jù)庫應用程序,但對數(shù)據(jù)庫維護的SQL語句的使用是一致的。12.3.2SQL語言的基本操作(1)SQL語言的作用很廣,它最大、最突出的功能就是查詢,也是它用得最廣的功能。除了查詢以外還可以實現(xiàn)記錄的插入、修改和刪除以及數(shù)據(jù)表的建立、修改、刪除等操作。1.Select語句

Select語句用于以行為單位從一個或多個表獲取數(shù)據(jù)。現(xiàn)在,把注意力集中到單表的Select語句上。Select語句的關鍵字如表12-2所示。基本的Select語句的規(guī)范形式如下:Select字段列表From表名Where查詢條件Groupby分組字段Having分組條件Ooderby字段名[ASC|DESC]

一般在程序中應用SQL語句前,經常要先調試SQL語句是否書寫正確。在Delphi7.0中為了調試SQL語句,提供了數(shù)據(jù)庫瀏覽器工具——SQLExplorer。數(shù)據(jù)庫瀏覽器——SQLExplorer可以通過Delphi7.0主菜單中的【Database】菜單下的【Explorer】菜單項進入,如圖12-5所示。圖12-5SQLExplorer操作窗體12.3.2SQL語言的基本操作(2)

在SQLExplorer操作窗口的左窗口中選擇數(shù)據(jù)庫別名,如stu_data,可以查看該別名下的數(shù)據(jù)表中詳細內容,包括數(shù)據(jù)表的定義信息、記錄內容和字段等詳細信息。要調試SQL語句,可以在右邊窗口中選擇EnterSQL選項,并在文本框中輸入SQL語句。例如在上圖中輸入select*fromSTUDENT,然后單擊右邊的執(zhí)行SQL按鈕,如果SQL語句書寫正確就會在下面網格中顯示具體的查詢結果?!纠?2-4】組合查詢記錄所謂組合查詢就是在查詢時查詢條件有多個。在where子句后面各個條件之間用邏輯運算符and或者or進行連接,例如要查詢姓“李”的“男”學生的記錄,則SQL查詢語句應該這樣寫:

Select*fromstudentwhere姓名like'李%'and性別='男'

此例在【例12-2】的基礎上,增加用姓名和性別兩個字段的組合查詢,并要求對姓名可以實現(xiàn)模糊匹配查詢。在原來的基礎上添加1個標簽框Label2和1個組合框ComboBox1,在組合框ComboBox1中添加“所有”、“男”、“女”3個選項,并修改Button1的Click事件代碼如下:12.3.2SQL語言的基本操作(3)procedureTForm1.Button1Click(Sender:TObject);VarStrSql:String;//存放SQL語句的變量beginStrSql:='select*fromstudentWhere1=1';{這個語句是給StrSql變量賦初值,“1=1”這個條件始終為真,并沒有多大意義,只是為了下面的SQL語句的連接時方便一些。}IfTrim(Edit1.Text)<>''ThenStrSql:=StrSql+'And姓名Like''%'+Trim(Edit1.Text)+'%''';//注意字符串的連接方法,兩個連續(xù)的單引號表示一個單引號IfTrim(Combobox1.Text)<>'所有'Then StrSql:=StrSql+'And性別='''+Trim(Combobox1.Text)+'''';Query1.Close;Query1.SQL.Clear;Query1.SQL.Add(StrSql);//將StrSql變量值加到Query1組件的Sql屬性中Query1.Prepare;Query1.Open;ifQuery1.Eofthenbegin12.3.2SQL語言的基本操作(4)

showmessage('沒有找到相關記錄!');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ù)表中查詢記錄內容。跟前面幾個例子一樣,在窗體上放置1個Query組件、1個DataSource組件、1個DBGrid組件和1個DBNavigator組件。如圖12-6所示。將Datasouce組件的DataSet屬性設置為Query1,并分別將DBGrid組件和DBNavigator組件的DataSource屬性都設置為DataSource1。本例要求從Student.db中選擇學生的學號和姓名兩個字段的數(shù)據(jù),從學生成績表Score.db中選擇與該學生相關的課程和成績兩個字段的內容,構成一個新的記錄集,可在窗體的OnActivate事件中使用SQL語句,通過“wherestudent.學號=Score.學號”短語將兩個表連接起來。SQL語句表示如下:圖12-6多表查詢運行界面12.3.2SQL語言的基本操作(6)具體程序代碼如下:procedureTForm1.FormActivate(Sender:TObject);beginQuery1.DatabaseName:='stu_data';//設置Query組件的別名Query1.Close;Query1.SQL.Clear;Query1.SQL.Add('selectstudent.學號,student.姓名,Score.課程,Score.成績');Query1.SQL.Add('fromstudent,Score');Query1.SQL.Add('wherestudent.學號=Score.學號');Query1.Open;end;

當程序運行后,數(shù)據(jù)顯示效果如圖12-5所示,通過DBNavigator組件可以瀏覽記錄指針,但卻不能添加、刪除和更新記錄內容,請讀者自己思考為什么不行?12.3.2SQL語言的基本操作(7)【例12-6】用SQL語句從Student.db統(tǒng)計出男生和女生的人數(shù),如圖12-7輸出。圖12-7輸出男女生人數(shù)統(tǒng)計表

在窗體上放置1個Query組件、1個DataSource組件、1個DBGrid組件。將DataSource組件的DataSet屬性設置為Query1,并分別將DBGrid組件的DataSource屬性都設置為DataSource1。為了統(tǒng)計男生和女生的人數(shù),需要對student.db數(shù)據(jù)表中的記錄按性別進行分組?!癎roupby性別”可以將性別相同的記錄合并成一條記錄。要得到統(tǒng)計結果,需要構造一個輸出字段,此時可使用SQL的統(tǒng)計函數(shù)Count()作為輸出字段,它按性別分組統(tǒng)計每個分組的記錄個數(shù),要顯示統(tǒng)計結果,可以用AS短語命名一個新的字段別名。本例的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)計每個學生的所有課程的總分,顯示學號,姓名和總分三項內容,則SQL語句又該怎么寫呢?這里要查詢姓名和成績,所以必須從兩張表中進行鏈接查詢,SQL語句表示如下:selectscore.學號,student.姓名,sum(score.成績)AS總分fromscore,studentWherescore.學號=student.學號Groupbyscore.學號,student.姓名12.3.2SQL語言的基本操作(9)2.Delete語句

Delete語句非常簡單,它的作用是用來刪除數(shù)據(jù)表中的記錄。具體格式如下:Deletefrom表名where條件該命令將刪除數(shù)據(jù)表中滿足條件的所有記錄內容。更常見的情況是需要刪除數(shù)據(jù)的特定行。對這種情況,添加Where子句即可。Delete語句僅僅刪除指定條件的記錄,并不是刪除數(shù)據(jù)表;如果沒有指定刪除條件,則刪除數(shù)據(jù)表中的所有記錄。

2.Delete語句

Delete語句非常簡單,它的作用是用來刪除數(shù)據(jù)表中的記錄。具體格式如下:

Deletefrom表名where條件該命令將刪除數(shù)據(jù)表中滿足條件的所有記錄內容。更常見的情況是需要刪除數(shù)據(jù)的特定行。對這種情況,添加Where子句即可。Delete語句僅僅刪除指定條件的記錄,并不是刪除數(shù)據(jù)表;如果沒有指定刪除條件,則刪除數(shù)據(jù)表中的所有記錄。圖12-8刪除指定學號的學生記錄12.3.2SQL語言的基本操作(10)確定刪除”按鈕的Click事件代碼如下:procedureTForm1.Button1Click(Sender:TObject);beginifMessageDlg('你真的要刪除學號為'+trim(Edit1.Text)+'的學生記錄嗎?',mtwarning,mbOKCancel,1)=mrOKthenbeginQuery1.Close;Query1.SQL.Clear;Query1.SQL.Add('Deletefromstudentwhere學號=:XH');Query1.ParamByName('XH').AsString:=TRIM(EDIT1.Text);Query1.ExecSQL;//必須調用ExecSQL方法執(zhí)行Delete語句,沒有返回結果

//重新獲取student表中的所有記錄

Query1.Close;Query1.SQL.Clear;Query1.SQL.Add('select*fromstudent');Query1.Open;//查詢語句要用Open方法執(zhí)行,返回一個記錄集end;end;12.3.2SQL語言的基本操作(11)3.Insert語句

Insert語句更為復雜。它用于向表添加行。Insert語句可用于向所有的字段添加值,也可以只對某些字段添加值,這依賴于具體使用的Insert語句。由于這個原因,Insert語句需要表名、字段列表,以及與每個字段相匹配的值。語句的具體形式如下:Insertinto數(shù)據(jù)表名(字段名1,字段名2,…)Values(字段值1,字段值2,…)說明:(1)如果沒有指定字段名,系統(tǒng)則會按數(shù)據(jù)表中字段的先后順序插入數(shù)據(jù);(2)字段值的數(shù)據(jù)類型必須與對應字段的數(shù)據(jù)類型相吻合;(3)數(shù)據(jù)表名可以是可以更新的視圖名稱,也可以是經過子查詢把別的數(shù)據(jù)表中的內容插入?!纠?2-8】使用Insert語句插入記錄。在【例12-1】的基礎上添加如圖12-9所示的幾個組件:1個GroupBox組件、7個標簽框(Label1~Label7)、7個編輯框(Edit1~Edit7)和2個命令按鈕procedureTForm1.Button1Click(Sender:TObject);//“插入”按鈕Click事件過程Varxh,xm,xb,csrq,zzmm,jg,rxcj:string;beginTry{開始捕捉錯誤}Query1.Close;query1.SQL.Clear;//在SQL語句中,字符類型和日期型的字段值必須加單引號,數(shù)值型字段不需要加單引號xh:=''''+edit1.Text+'''';//學號,需加引號xm:=''''+edit2.Text+''''; //姓名xb:=''''+edit3.Text+''''; //性別csrq:=''''+edit4.Text+''''; //出生日期zzmm:=''''+edit5.Text+''''; //政治面貌jg:=''''+edit6.Text+''''; //籍貫rxcj:=edit7.Text; //入學成績,不需要加單引號12.3.2SQL語言的基本操作(12)(Button1~Button2)。7個標簽框分別標注student.db數(shù)據(jù)表中的7個字段名,(圖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'',''團員'',''浙江'',442)');query1.ExecSQL;ExceptonEDBEngineErrordo//如果數(shù)據(jù)庫操作發(fā)生錯誤,則顯示提示信息。

beginapplication.MessageBox('數(shù)據(jù)庫登錄錯誤;請檢查【學號是否重復!】'+#13+#10+'或者【字段值是否為空!】或【字段類型是否匹配!】','錯誤!',MB_OKCANCEL);end;end;//重新顯示全部記錄內容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更新條件該語句以關鍵字Update開始,后接數(shù)據(jù)表名。set子句后接逗號分隔的列表,包括所要更新的字段及其新值?!纠?2-9】使用Update語句修改記錄。界面跟【例12-8】基本保持不變,只添加一個Memo1組件,用來顯示SQL語句。具體界面如圖12-10所示。圖12-10使用Update語句修改記錄

程序要求先單擊DBGrid1組件,選擇一條要修改的記錄,并將該記錄的各字段值分別顯示到對應的編輯框中,供用戶修改。修改完畢后,單擊“確定修改”按鈕調用SQL語句中的Update命令提交修改,并將Update語句顯示在Memo1組件中。具體代碼如下:12.3.2SQL語言的基本操作(15)procedureTForm1.Button1Click(Sender:TObject);Varxh,xm,xb,csrq,zzmm,jg,rxcj:string;begin//在SQL語句中,字符類型的字段值必須加單引號,數(shù)值型字段不需要加單引號xh:=''''+edit1.Text+'''';//學號xm:=''''+edit2.Text+'''';//姓名xb:=''''+edit3.Text+'''';//性別csrq:=''''+edit4.Text+'''';//出生日期zzmm:=''''+edit5.Text+'''';//政治面貌jg:=''''+edit6.Text+'''';//籍貫rxcj:=edit7.Text;//入學成績Tryquery1.Close;query1.SQL.Clear;query1.SQL.Add('Updatestudentset姓名='+xm+',性別='+xb+',出生日期='+csrq+',政治面貌='+zzmm+',籍貫='+jg+',入學成績='+rxcj);query1.SQL.Add('WHERE學號='+xh);

12.3.2SQL語言的基本操作(17)memo1.Text:=query1.SQL.Text;//在Memo1中顯示SQL語句

query1.ExecSQL;ExceptonEDBEngineErrordobeginapplication.MessageBox('數(shù)據(jù)庫登錄錯誤;請檢查:'+#13+#10+'【字段值是否為空!】或【字段類型是否匹配!】','錯誤!',MB_OKCANCEL);end;end;//重新顯示全部記錄內容withquery1dobeginclose;sql.Clear;sql.Add('select*fromstudentorderby學號');

open;end;end;{單擊DBGrid1組件中的一條記錄時,在文本框中顯示選中記錄內容}12.3.2SQL語言的基本操作(18)procedureTForm1.DBGrid1CellClick(Column:TColumn);beginwithquery1dobeginedit1.Text:=fieldbyname('學號').AsString;edit2.Text:=fieldbyname('姓名').AsString;edit3.Text:=fieldbyname('性別').AsString;edit4.Text:=formatdatetime('mm''/''dd''/''yyyy',strtodate(fie

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論