導航:首頁 > 編程語言 > sql編程學習

sql編程學習

發布時間:2023-08-07 08:59:43

① DELPHI基礎教程:SQL編程(一)[4]

利用參數編輯器(Parameter Editor)來為參數賦值

具體方法是 選中TQuery部件 單擊滑鼠右鍵 然後從中選擇Define Parameters 便可以打開參數編輯器

例如 在TQuery部件的SQL屬性中我們設置如下的SQL語句

Setect * From Customer Where CustNO=:Number;

TQuery的DatabaseName屬性為DBDEMOS 其中Number為參數變數 我們便可以為參數Number賦值 在Datetype組合框中選擇該參數的數據類型為整數Integer 在Value編輯框中可以為參數Number賦一個值 也可以單擊Null Value檢查框為參數Number賦一個空值Null 給參數賦值之後 單擊OK按鈕 這樣TQuery部件中的SQL 查詢便准備好了 而且參數值也被賦給了動態SQL語句中相應的參數 此時當把TQuery 部件的Active屬性設置成True時 在與TQuery部件相連的數據瀏覽部件中會顯示出查詢結果 通過參數編輯器為參數賦值 這種方式缺乏應有的靈活性 在實際應用中用得較少 在實際應用中程序設計人員希望用更靈活方便的方式為參數賦值 那就是我們接下來要介紹的另一種途徑

在運行過程中 通過程序為參數賦值

用這種方式為參數賦值有三種方法

①根據參數在SQL語句中出現的順序 設置TQuery部件的Params屬性值為參數賦值

②直接根據SQL語句中各參數的名字 調用ParamByName方法來為各參數賦值

③將TQuery部仔銀遲件的DataSource屬性設置為另一個數據源 這樣將另一個數據源中與當前TQuery部件的SQL語句中的參數名相匹配的欄位值賦給其對應的參數

這三種方法我們將在下面的三小節中具體地介紹

使用Params屬性為參數賦值

TQuery部件具有一個Params屬性 它們在設計時不可用 在程序運行過程中可用 並且是動態建立的 當為TQuery部件編寫動態SQL 語句時 Delphi 會自動地建立一個數組Params 數組Params是以 下標開始的 依次對應動態SQL 語句中的參數 也就是說動態SQL語句中第一個參數對應Params[ ] 第二個參數對應params[ ] 依此類推

例如 一個TQuery部件Query 我們為它編寫的動態SQL語句是

Insert Into Customer(CustNo Name Country)

Values(念李 CustNo :Name : Country)

對於上述這條動態SQL語句中的參數 我們可以利用TQuery部件的params 屬性為參數賦值

Query params[ ] AsString := ;

Query params[ ] AsString := Lichtenstein ;

Query params[ ] AsString := USA ;

上述語句將把 賦給參數 Cuse_No Lichtenstein 賦給參數 Name USA 賦給參數 Country

使用ParamByName方法為參數賦值

ParamByName是一個函數 用動態SQL語句中的參數作為調用ParamByName函數的參數 這樣便可以為它們賦值 使用這種賦值方法 必須要知道動態SQL語句參數的名字

例如在 節中的例子中 也可以用下述方法給參數賦值

Query ParamByName( CustNo ) AsString := ;

Query ParamByName( Name ) AsString := Lichtenstein ;

Query ParamByName( Country ) AsString := USA ;

使用這種方法同樣可以為各參數賦值 而且更加直觀一些

使用Datasource屬性為參數賦值

上述兩種方法的共同特點是 我們在為各參數賦值時 我們是知道各參數對應的具體參數值的 而在具體的應用程序中 有些參數值常常是無法確定的 例如參數值來自於另搏宴一個查詢結果 對於這種情況 Delphi提供了使用Datasource屬性為動態SQL 語句中尚存在沒有賦值的參數時 Delphi 會自動檢查 TQuery 部件的 Datasource 屬性 如果為Datasource屬性設置了屬性值(該屬性的值是另一個TDatasource部件的名字) Delphi 會把沒有賦值的參數與TDatasource部件中的各欄位比較 Delphi 會將相應的欄位值賦給與其相匹配的參數 利用這種方法也能實現所謂的連接查詢 我們在學習使用TTable部件時 便會創建主要 明細型資料庫應用 用TQuery部件創建的連接查詢與主要 明細型應用是相似的

例如 在如圖 所示的應用中 設置了下列部件

● 一個TTable部件

名字為Cust 它的DatabaseName屬性為DEMOS TableName屬性為Customer

● 一個TDatasource部件

名字為Custsource 其Dataset屬性被設置為Cust

● 一個TQuery部件

名字為ORDERS 其DatabaseName被設置為DEMOS SQL屬性值為

Select Orders CustNo Orders OrderNo Orders SaleDate FROM Orders

WHERE Orders CustNo =: CustNo

ORDERS的DataSouce屬性被設置為CustSource

● 一個TDatasource部件

名字為OrderSource 其DataSet屬性被設置為Orders

● 兩個TDBGrid部件

它們分別連接CustSource和OrderSource

TQuery部件Orders中的動態SQL語句中的參數 CustNo在程序設計過程中沒有給它賦值 當該應用程序運行時Delphi會自動地到其Datasource屬性中說明的數據源CustSource中查找與參數 CustNo匹配的欄位 而CustSource中正好有一個名字為 CustNo 的欄位與參數 CustNo匹配 這樣Customer表中的CustNo欄位值被賦給了參數 : CustNo 而當每移動Customer表中的記錄指針 參數 CustNo的值會隨之改變 而參數 CustNo的值發生改變時 Orders中的動態SQL語句會根據新的參數值重新查詢 從資料庫表中獲取相應的訂單數據 這樣也變實現了類似於主要 明細型應用 即連接查詢

Prepare方法的使用

在使用動態SQL語句編程時 常常用到一個很重要的方法prepare 調用prepare 方法之後 Delphi會將帶參數的SQL語句傳送給與其對應的資料庫引擎 對動態SQL語句進行語法分析和優化 雖然在用動態SQL語句編程時 調用prepare方法並不是必須的 但是這里我們要極力推薦調用prepare方法 因為調用prepare方法後 會大大提高動態SQL 語句的執行性能 特別是當要反復多次執行同一條動態SQL語句時 其優越性會更加明顯 如果在應用程序中執行一條SQL語句之前並沒有顯式地調用prepare方法 每次在執行SQL 語句時 Delphi會隱含地調用propare方法以准備這個查詢

TQuery部件還有一個prepare屬性 這是一個布爾型屬性 當其屬性值為True時 表明該查詢已被准備好了( SQL 語句已被傳送到資料庫引擎中 ) 當我們使用參數編輯器Parameters Editor來為動態SQL語句中的參數賦值時 當設置完相應的參數值並退出參數編輯器時 Delphi會隱含地調用prepare方法以准備好查詢

當SQL語句執行完之後 要想准備下一個查詢 首先必須調用close方法 然後才能調用prepare方法准備下一個查詢 一般來說 在一個應用程序中應該調用一次prepare方法 常常在窗體的OnCreate事件處理過程中調用prepare方法 然後用上述介紹的方法為參數賦值 最後調用Open方法或ExecSQL方法執行SQL語句 以完成查詢

當然在調用prepare方法准備好一個查詢時 會消耗一些資料庫資源 因而每當一個查詢執行完畢之後 要養成調用Unprepare方法以撤消查詢的好習慣 在運行程序過程中 通過程序改變TQuery部件的SQL屬性值時 Delphi會自動地調用Close方法和Unprepare 方法 以撤消查詢

返回目錄 DELPHI基礎教程

編輯推薦

Java程序設計培訓視頻教程

J EE高級框架實戰培訓視頻教程

Visual C++音頻/視頻技術開發與實戰

Oracle索引技術

ORACLE G資料庫開發優化指南

Java程序性能優化 讓你的Java程序更快 更穩定

C嵌入式編程設計模式

Android游戲開發實踐指南

lishixin/Article/program/Delphi/201311/25147

閱讀全文

與sql編程學習相關的資料

熱點內容
浦發銀行app有什麼優點 瀏覽:966
緩解壓力放鬆心情的辦法是吵架 瀏覽:780
pythonmap使用方法 瀏覽:782
旅行世界app叫什麼 瀏覽:921
加密篦子怎麼製造視頻 瀏覽:903
電腦主伺服器未運行怎麼解決 瀏覽:328
js超級瑪麗源碼 瀏覽:308
雲鏡下載什麼格式app 瀏覽:765
iosAndroidjava 瀏覽:402
外賣員轉型做程序員 瀏覽:927
看房用什麼app准 瀏覽:157
雞蛋解壓玩具測評 瀏覽:705
阿里雲發布arm伺服器晶元 瀏覽:756
對加密貨幣平台的態度 瀏覽:373
刺客信條pdf 瀏覽:453
湛江頭條程序員 瀏覽:162
裝上加密狗就死機 瀏覽:927
windows程序員轉linux 瀏覽:570
androidusb驅動xp 瀏覽:947
單片機的數字電壓表設計 瀏覽:792