程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 第十七章-SQL編程(一)(2)

第十七章-SQL編程(一)(2)

編輯:Delphi

在Delphi應用程序中編寫和使用的SQL語句有兩種:即靜態SQL語句、動態SQL 語句。靜態SQL語句是在程序設計階段,將SQL命令文本作為TQuery部件的SQL屬性值設置。而動態SQL語句編程是SQL語句中包含一系列的參數,在程序運行過程中各參數值是可變的,即可以動態地給SQL語句中的參數賦值。

靜態方式是把SQL命令文作為TQuery部件的SQL屬性值進行設置,這樣,當執行應用程序時,Delphi便執行TQuery部件SQL屬性中設置的SQL命令。如果是SQL中的查詢命令,把TQuery部件通過TDataSource部件與數據控制部件相連,查詢的結果將會顯示在與 TQuery部件相連接的數據浏覽部件中。動態SQL語句是指SQL語句中包含一些參數變量,在程序中可以為這些參數賦值,在程序運行過程中,各個參數值是變化的。TQuery部件的SQL 屬性中的SQL語句的編寫也有兩種方法,一種方法是在程序設置階段便將相應的SQL語句寫入到TQuery的SQL屬性中,另一種方法是在Delphi開發的應用程序將SQL語句,包含在Pascal代碼單元中。

在SQL編程中使用TQuery部件的具體方法步驟如下:

①為TQuery部件設置DatabaseName屬性,它可以是用BDE建立的數據庫的別名,或桌面數據庫系統中的目錄名或數據庫服務器中的文件名,如果在應用中使用了TDatabase 部件,那麼TQuery部件的DatabaseName屬性可以是TDatabase部件中定義的一個數據庫別名。詳細情況請參看“TDatabase部件的使用”;

②為TQuery部件設置SQL屬性,TQuery部件的SQL屬性值就是應用程序要執行的SQL 命令文本,設置SQL屬性有兩種方法:

● 在程序設計過程中,我們可以通過對象浏覽器(Object Inspector)編輯SQL屬性在Object Inspector中選擇SQL屬性,這樣會打開String List Editor窗口,在其中我們便可以編寫SQL命令,我還可以打開Visual Query Builder來編寫SQL命令 (只有Delphi的客戶/服務器版本才具有這一工具)。

● 將SQL命令包含在Pascal代碼單元中

在程序運行過程中,首先調用TQuery部件的Close方法關閉當前的TQuery部件,然後調用Clear方法清除SQL屬性,並說明新的SQL命令文本,然後調用Add方法,將新的SQL命令文本加入到SQL屬性中。

③通過調用TQuery部件的Open方法或ExecSQl方法執行 SQL 命令。 Open 方法只執行Select命令,ExecSQL方法還可以執行其它的SQL命令。Open方法和ExecSQL 方法的區別我們在後面的章節裡會進一步地加以討論的。

如果使用動態SQL語句,首先調用prepare方法,給動態SQL語句中的參數賦值,然後再調用Open方法或ExecSQL方法。調用propare 方法並不是必須的,但是對於要多次執行TQuery部件中SQL屬性中的動態SQL語句,調用Prepare可以大大提高TQuery部件執行SQL語句的性能。 

17.2.2 在TQuery部件中編寫簡單的SQL查詢命令 

在這一節裡我們將學習如何使用TQuery部件編寫簡單的SQL查詢命令,並在Delphi 應用程序中實現SQL查詢。

例如,如果我們想查詢出表Customer.DB中客戶的編號和公司名稱,我們按下列步驟來實現:

①在應用窗體中放置一個TQuery部件、一個TDataSource部件一個TDataGrid部件,並將它們連接起來 

②設置窗體TQuery 部件Query1的DatabaseName屬性值為DBDEMOS

③雙擊Object Inspector窗口中Query1的SQL 屬性, Delphi 將顯示 String List Editor窗口。

④在圖17.3中的窗口中輸入SQL語句:

Select CustNo,Company From Custormer;

⑤單擊OK按鈕,關閉String List Editor窗口。

⑥設置Query的Open屬性為True。

17.3 SQL語言編程概述 

在Delphi應用程序中的SQL命令語句是包含在TQuery部件的SQL屬性中,TQuery部件的SQL屬性是TString類型的,也就是說SQL屬性值是一個字符串列表,這個字符串列表非常類似於一個字符串類型的數組,有關TString類型的信息請參看聯機幫助。在前一節裡我們介紹了TQuery部件可以執行兩種SQL語句:

● 靜態SQL語句

● 動態SQL語句 

靜態SQL語句在程序設計時便已固定下來,它不包含任何參數和變量,例如下面的語句便是一條靜態SQL語句: 

Select * From Cusromer Where CustNo = 1234; 

而動態SQL語句,也被稱作參數化的語句,在其中間包含著表示字段名或表名的參數,例如下面的語句是一條動態SQL語句: 

Select * From Customer Where CustNo =: Number;

其中的變量Number便是一個參數變量,它由一個冒號引導,在程序運行過程中,必須要為該參數賦值,該條SQL語句才能正確執行,每次運行應用程序時可以為該參數變量賦予不同的值。

17.3.1 SQL命令文本的編寫

1. 使用String List Editor編寫

我們要為TQuery部件的SQL屬性設置SQL命令文本時,可以在應用窗體中選擇TQuery部件且雙擊Object Inspector窗口中的SQL屬性,這樣便打開了String List Editor 窗口,在該窗口中我們便可以編寫各種SQL命令,如圖17.3所示。

在編寫完適當的SQL語句之後,選擇 OK 按鈕便可以將編輯器中的 SQL 命令文裝入到TQuery部件的SQL屬性中,選擇SAVE按鈕可以將編寫好的SQL命令保存到一個文件中供以後編程時使用。我們在編寫SQL命令文本時還可以選擇Load按鈕從一個 SQL 命令文件中調入SQL命令。在程序運行過程中,要想設置TQuery部件的SQL屬性,必須首先調用Close方法,關閉TQuery部件,然後再調用Clear方法清除SQL屬性中現存的SQL命令語句,最後再調用Add方法為SQL屬性設置新的SQL命令語句。例如:

Query1.Close {關閉Query1)

Query1.SQL.Clear {清除SQL屬性中的SQL命令語句}

Query1.SQL.Add('Select * From Country');

Query1.SQL.Add('Where Name ="ARGENTINA" ');

在為TQuery部件設置SQL屬性時調用Close方法總是很安全的,如果TQuery部件已經被關閉了,調用Close方法時不會產生任何影響。在應用程序中為SQL屬性設置新的SQL 命令語句時,必須要調用Clear方法以清除SQL屬性中現存的SQL命令語句,如果不調用Clear方法,便調用Add方法向SQL屬性中設置SQL命令語句,那麼新設置的SQL命令語句會追加在現存SQL命令語句後面,在程序運行時常常會出現出乎意料的查詢結果甚至程序無法運行下去。

在這裡要特別注意的,一般情況下TQuery部件的SQL屬性只能包含一條完整的SQL語句,它不允許被設置成多條SQL語句。當然有些數據庫服務器也支持在TQuery部件的SQL屬性中設置多條SQL語句,只要數據庫服務器允許這樣,我們在編程時可以為 SQL 屬性設置多條SQL語句。

2. 使用Visual Query Builder編寫

客戶/服務器版本的Delphi還包含一個可視化的查詢構造器Visual Query Builder ,用這個可視化的工具我們只能編寫Select語句。在應用程序窗體中選擇TQuery部件後,單擊鼠標右鍵,彈出一個彈出式菜單,從中選擇Run Visual Query Builder後便會彈出一對話框提示你選擇要訪問的數據庫,選擇想要訪問的數據庫之後選擇OK按鈕,緊接著會出現一個彈出式對話框提示你選擇要查詢的數據庫表,一次可以選擇多個數據庫表,若要選擇多個數據庫表,每選擇一個表之後單擊Add按鈕,接著選擇另一個表,選擇完要查詢的表之後單擊Close按鈕,這樣,可視化的查詢構造器中將會顯示出用戶選擇的數據庫表。  

有關如何使用可視化的查詢構造器Visual Query Builder 請參看聯機幫助信息, 在Visual Query Builder中構造完一個查詢並退出Visual Query Builder時,其中的SQL 命令語句會自動地寫入相應的TQuery部件的SQL屬性。 

17.3.2 SQL程序的執行 

在為TQuery部件設置完SQL屬性的屬性值之後,也即編寫好適當的SQL程序之後,可以有多種方式來執行SQL程序。

在設計過程中,設置完TQuery部件的SQL屬性之後將其Active屬性的值置為True,這樣便可以執行SQL屬性中的SQL程序,如果應用中有與TQuery部件相連的數據浏覽部件( 如TDDGrid TDBEdit等)那麼在這些數據浏覽部件中會顯示SQL程序的執行結果。

在應用程序運行過程中,通過程序調用TQuery部件的Open方法或ExecSQL 方法可以執行其SQL屬性中的SQL程序。Open方法和ExecSQL方法是不一樣的。大家在程序設計過程中一定要注意。Open方法只能用來執行SQL語言的查詢語句(Select命令),並返回一個查詢結果集,而ExecSQL方法還可以用來執行其它常用的SQL語句(如Insert、UPDATE、 DELETE等命令)例如:

Query1.Open (這樣會返回一個查詢結果集)

如果調用Open方法,而沒有查詢結果時,會出錯。此時應該調用ExecSQL 方法來代替Open方法。如:

Query1.ExecSQL (沒有返回結果)

當然在設計應用程序時,程序設計人員是無法確定TQuery部件中的SQL 語句是否會返回一個查詢結果的。對於這種情況應當用Try…Except模塊來設計程序。在 Try 部分調用Open方法,而在Except部分調用ExceSQL方法,這樣才能保證程序的正確運行。

例如:

Try

Query1.Open

Except

Query1.ExecSQL

End

在應用程序中使用TQuery部件時,還可以設置它的UniDirectional屬性為True,這樣會加快檢索數據庫表的速度,但是這樣只能往一個方向移動記錄指針, 在缺省情況下,UniDirectional屬性的值為False。

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