亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 041.htm

?? delphi編程
?? HTM
?? 第 1 頁 / 共 3 頁
字號:
<p>表17.1 TQuery部件返回查詢結果數據的類型</p>
<p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p>RequestLive屬性值 CanModify屬性值 查詢結果的類型</p>
<p>────────────────────────────────</p>
<p>False False 只讀數據</p>
<p>True(SQL語句滿足約束條件) True “活動”數據</p>
<p>True(SQL語句不滿足約束條件) False 只讀數據</p>
<p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p> </p>
<p>當TQuery部件返回只讀的查詢結果數據集,而用戶又希望修改這只讀的數據集時,一般這樣來處理,
在應用程序中另外增加一個 TQuery 部件 Query2( 假設獲得只讀結果的TQuery部件的名字是Query1),在Query2中設置修改語句UpDATE對Query1
中的數據進行修改操作,這樣會實現對只讀數據的修改。</p>
<p> </p>
<p>17.4 動態SQL語句的編程</p>
<p> </p>
<p>在17.3節中,我們已經介紹了動態SQL語句(又被稱為參數化的SQL語句),在其中包含在程序過程中可以變化的參數,在實際的程序設計中使用得更多的是動態SQL語句,
因而在這一節里我們重點介紹如何給動態SQL語句的參數賦值,
以在應用程序中靈活地使用SQL語句。動態SQL語句的編寫、執行等等與17.3節中介紹的SQL語句的編寫、
執行是一樣的。</p>
<p>動態SQL語句中的參數,我們可以通過兩種途徑來為它賦值:</p>
<p>1. 利用參數編輯器(Parameter Editor)來為參數賦值</p>
<p>具體方法是:選中TQuery部件,單擊鼠標右鍵,然后從中選擇Define
Parameters 便可以打開參數編輯器。 </p>
<p>例如,在TQuery部件的SQL屬性中我們設置如下的SQL語句: </p>
<p>Setect * From Customer Where CustNO=:Number;</p>
<p> </p>
<p>TQuery的DatabaseName屬性為DBDEMOS,其中Number為參數變量。我們便可以為參數Number賦值,在Datetype組合框中選擇該參數的數據類型為整數Integer,在Value編輯框中可以為參數Number賦一個值,也可以單擊Null
Value檢查框為參數Number賦一個空值Null。給參數賦值之后,單擊OK按鈕,這樣TQuery部件中的SQL
查詢便準備好了,而且參數值也被賦給了動態SQL語句中相應的參數,此時當把TQuery
部件的Active屬性設置成True時,在與TQuery部件相連的數據瀏覽部件中會顯示出查詢結果,通過參數編輯器為參數賦值,這種方式缺乏應有的靈活性,在實際應用中用得較少,在實際應用中程序設計人員希望用更靈活方便的方式為參數賦值,那就是我們接下來要介紹的另一種途徑:</p>
<p>2. 在運行過程中,通過程序為參數賦值</p>
<p>用這種方式為參數賦值有三種方法:</p>
<p>①根據參數在SQL語句中出現的順序,設置TQuery部件的Params屬性值為參數賦值。</p>
<p>②直接根據SQL語句中各參數的名字,調用ParamByName方法來為各參數賦值。</p>
<p>③將TQuery部件的DataSource屬性設置為另一個數據源,這樣將另一個數據源中與當前TQuery部件的SQL語句中的參數名相匹配的字段值賦給其對應的參數。</p>
<p>這三種方法我們將在下面的三小節中具體地介紹</p>
<p> </p>
<p>17.4.1 使用Params屬性為參數賦值</p>
<p> </p>
<p>TQuery部件具有一個Params屬性,它們在設計時不可用,在程序運行過程中可用,并且是動態建立的,當為TQuery部件編寫動態SQL
語句時, Delphi 會自動地建立一個數組Params,數組Params是以0下標開始的,依次對應動態SQL
語句中的參數, 也就是說動態SQL語句中第一個參數對應Params[0],第二個參數對應params[1],依此類推。</p>
<p>例如:一個TQuery部件Query1,我們為它編寫的動態SQL語句是:</p>
<p> </p>
<p>Insert Into Customer(CustNo,Name,Country)</p>
<p>Values(:CustNo,:Name, : Country)</p>
<p> </p>
<p>對于上述這條動態SQL語句中的參數,我們可以利用TQuery部件的params
屬性為參數賦值:</p>
<p> </p>
<p>Query1.params[0].AsString := &quot;1988&quot;;</p>
<p>Query1.params[1].AsString := &quot;Lichtenstein&quot;;</p>
<p>Query1.params[2].AsString := &quot;USA&quot;;</p>
<p> </p>
<p>上述語句將把&quot;1988&quot;賦給參數:Cuse_No,&quot;Lichtenstein&quot;賦給參數:Name,&quot;USA&quot;賦給參數:Country。</p>
<p> </p>
<p>17.4.2 使用ParamByName方法為參數賦值</p>
<p> </p>
<p>ParamByName是一個函數,用動態SQL語句中的參數作為調用ParamByName函數的參數,這樣便可以為它們賦值,使用這種賦值方法,必須要知道動態SQL語句參數的名字。</p>
<p>例如在17.4.1節中的例子中,也可以用下述方法給參數賦值:</p>
<p> </p>
<p>Query1.ParamByName('CustNo').AsString := &quot;1988&quot;;</p>
<p>Query1.ParamByName('Name').AsString := &quot;Lichtenstein&quot;;</p>
<p>Query1.ParamByName('Country').AsString := &quot;USA&quot;;</p>
<p> </p>
<p>使用這種方法同樣可以為各參數賦值,而且更加直觀一些。</p>
<p> </p>
<p>17.4.3 使用Datasource屬性為參數賦值</p>
<p> </p>
<p>上述兩種方法的共同特點是:我們在為各參數賦值時,我們是知道各參數對應的具體參數值的。而在具體的應用程序中,有些參數值常常是無法確定的,例如參數值來自于另一個查詢結果,對于這種情況,Delphi提供了使用Datasource屬性為動態SQL
語句中尚存在沒有賦值的參數時, Delphi 會自動檢查 TQuery 部件的
Datasource 屬性, 如果為Datasource屬性設置了屬性值(該屬性的值是另一個TDatasource部件的名字),Delphi
會把沒有賦值的參數與TDatasource部件中的各字段比較,Delphi
會將相應的字段值賦給與其相匹配的參數,利用這種方法也能實現所謂的連接查詢,我們在學習使用TTable部件時,便會創建主要--明細型數據庫應用,用TQuery部件創建的連接查詢與主要-
-明細型應用是相似的。</p>
<p>例如:在如圖17.7所示的應用中,設置了下列部件:</p>
<p>● 一個TTable部件</p>
<p>名字為Cust,它的DatabaseName屬性為DEMOS,TableName屬性為Customer。</p>
<p>● 一個TDatasource部件</p>
<p>名字為Custsource,其Dataset屬性被設置為Cust。</p>
<p>● 一個TQuery部件</p>
<p>名字為ORDERS,其DatabaseName被設置為DEMOS,SQL屬性值為:</p>
<p> </p>
<p>Select Orders.CustNo,Orders.OrderNo,Orders.SaleDate FROM Orders</p>
<p>WHERE Orders.CustNo =: CustNo</p>
<p> </p>
<p>ORDERS的DataSouce屬性被設置為CustSource</p>
<p>● 一個TDatasource部件</p>
<p>名字為OrderSource,其DataSet屬性被設置為Orders。</p>
<p>● 兩個TDBGrid部件</p>
<p>它們分別連接CustSource和OrderSource。</p>
<p>TQuery部件Orders中的動態SQL語句中的參數:CustNo在程序設計過程中沒有給它賦值,當該應用程序運行時Delphi會自動地到其Datasource屬性中說明的數據源CustSource中查找與參數:CustNo匹配的字段,而CustSource中正好有一個名字為
CustNo 的字段與參數:CustNo匹配,這樣Customer表中的CustNo字段值被賦給了參數
: CustNo , 而當每移動Customer表中的記錄指針,參數:CustNo的值會隨之改變,而參數:CustNo的值發生改變時,Orders中的動態SQL語句會根據新的參數值重新查詢,從數據庫表中獲取相應的訂單數據,這樣也變實現了類似于主要--明細型應用。即連接查詢。 </p>
<p>17.4.4 Prepare方法的使用 </p>
<p>在使用動態SQL語句編程時,常常用到一個很重要的方法prepare,調用prepare
方法之后,Delphi會將帶參數的SQL語句傳送給與其對應的數據庫引擎,對動態SQL語句進行語法分析和優化。雖然在用動態SQL語句編程時,調用prepare方法并不是必須的,但是這里我們要極力推薦調用prepare方法,因為調用prepare方法后,會大大提高動態SQL
語句的執行性能,特別是當要反復多次執行同一條動態SQL語句時,其優越性會更加明顯。
如果在應用程序中執行一條SQL語句之前并沒有顯式地調用prepare方法,每次在執行SQL
語句時,Delphi會隱含地調用propare方法以準備這個查詢。</p>
<p>TQuery部件還有一個prepare屬性,這是一個布爾型屬性,當其屬性值為True時,
表明該查詢已被準備好了( SQL 語句已被傳送到數據庫引擎中 ) ,
當我們使用參數編輯器Parameters Editor來為動態SQL語句中的參數賦值時,當設置完相應的參數值并退出參數編輯器時,Delphi會隱含地調用prepare方法以準備好查詢。</p>
<p>當SQL語句執行完之后,要想準備下一個查詢,首先必須調用close方法,然后才能調用prepare方法準備下一個查詢。一般來說,在一個應用程序中應該調用一次prepare方法,常常在窗體的OnCreate事件處理過程中調用prepare方法,
然后用上述介紹的方法為參數賦值,最后調用Open方法或ExecSQL方法執行SQL語句,以完成查詢。</p>
<p>當然在調用prepare方法準備好一個查詢時,會消耗一些數據庫資源,
因而每當一個查詢執行完畢之后,要養成調用Unprepare方法以撤消查詢的好習慣。在運行程序過程中,通過程序改變TQuery部件的SQL屬性值時,Delphi會自動地調用Close方法和Unprepare
方法,以撤消查詢。</font></p>
<p> </p>
<hr color="#EE9B73" size="1" width="94%">

</TD>
<TD CLASS="tt3" VALIGN="bottom" width="8%"  bgcolor="#e0e0e0"><strong><A HREF="042.htm"><FONT style="FONT-SIZE: 9pt">后一頁</font></A><BR>
<A HREF="040.htm"><FONT style="FONT-SIZE: 9pt">前一頁</font></A><BR>

<A HREF="index.html"><FONT style="FONT-SIZE: 9pt">回目錄</font></A><BR>
<A HREF="../../../../index.htm"><FONT style="FONT-SIZE: 9pt">回首頁</font></A><BR>
</strong>
</TD>
</TR>
</table>
</BODY></HTML>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人三级在线观看| 久久99国产乱子伦精品免费| 国产激情一区二区三区桃花岛亚洲| 一级女性全黄久久生活片免费| 欧美日韩激情一区| 精品亚洲免费视频| 美女一区二区久久| 亚洲免费色视频| 精品国产欧美一区二区| a级高清视频欧美日韩| 图片区小说区区亚洲影院| 国产午夜精品福利| 3atv一区二区三区| 成人av在线一区二区| 毛片一区二区三区| 国产一区二区三区综合| 偷拍亚洲欧洲综合| 日韩avvvv在线播放| 亚洲男人的天堂在线观看| 亚洲精品视频在线看| www日韩大片| 日韩一区二区三区在线| 在线免费观看成人短视频| 国产乱子伦视频一区二区三区| 天天免费综合色| 美腿丝袜亚洲综合| 国产伦精品一区二区三区免费| 岛国精品一区二区| 国产成a人亚洲精| 老汉av免费一区二区三区| 国v精品久久久网| 一区二区三区影院| 国产精品性做久久久久久| 国产福利一区在线| 在线一区二区三区做爰视频网站| 日韩中文欧美在线| 一区二区三区在线视频播放| 性欧美大战久久久久久久久| 亚洲精品免费在线播放| 日本视频一区二区| 99久久精品国产网站| 国产精品99久久久久久宅男| 色综合久久久网| 99国产欧美另类久久久精品| 宅男噜噜噜66一区二区66| 国产欧美综合色| 国产欧美日韩综合精品一区二区| 一个色妞综合视频在线观看| 麻豆久久一区二区| 91久久久免费一区二区| 久久欧美一区二区| 国产欧美综合在线观看第十页 | 亚洲成人激情自拍| 丰满岳乱妇一区二区三区| 91精品国产综合久久久久久久久久| 国产精品色哟哟网站| 国产精品久久久久久久久图文区 | 蜜桃一区二区三区在线| www.欧美日韩| 26uuu亚洲综合色欧美| 亚洲第一主播视频| 91日韩精品一区| 欧美在线观看禁18| 国产精品午夜在线观看| 久久精品国产色蜜蜜麻豆| 欧美日韩成人一区二区| 亚洲一区二区三区四区在线免费观看| 一区二区三区中文在线观看| 粉嫩aⅴ一区二区三区四区 | 成人激情黄色小说| 精品国产电影一区二区| 久久狠狠亚洲综合| 精品日韩一区二区三区免费视频| 久久精品免费在线观看| 久久福利视频一区二区| 91精品国产综合久久久久久久久久| 亚洲妇女屁股眼交7| 久久91精品久久久久久秒播| 在线综合视频播放| 亚洲国产精品一区二区久久恐怖片| 日本韩国欧美国产| 亚洲一线二线三线视频| 日本韩国精品在线| 亚洲一区二区视频在线| 欧美午夜片在线看| 久久精品一区二区三区四区| 激情av综合网| 91精品国产色综合久久不卡电影| 国产精品国产自产拍在线| 成人深夜在线观看| 一区二区在线观看免费视频播放| 91啪九色porn原创视频在线观看| 亚洲日本一区二区| 国产一区二区在线看| 国产精品久线在线观看| 欧美亚洲图片小说| 蜜臀av一区二区| 国产欧美精品一区二区色综合朱莉| 成人黄页在线观看| 亚洲一区二区三区四区在线观看| 欧美一区二区三区视频免费播放| 韩国精品主播一区二区在线观看| 国产欧美一区二区精品性色超碰| 91在线观看地址| 日韩电影一区二区三区| 久久久一区二区三区| 日本二三区不卡| 国产最新精品免费| 亚洲精品国产视频| 精品久久久久av影院 | 91黄色免费看| 麻豆传媒一区二区三区| 中文字幕永久在线不卡| 国产成人精品综合在线观看| 成人免费视频在线观看| 91麻豆精品久久久久蜜臀| 成人精品视频.| 日韩中文字幕亚洲一区二区va在线| 精品国产伦一区二区三区观看体验 | 3d成人动漫网站| 极品少妇一区二区三区精品视频| 成人免费在线播放视频| 欧美变态凌虐bdsm| 在线一区二区观看| 成人午夜在线播放| 青椒成人免费视频| 3d动漫精品啪啪| 99精品黄色片免费大全| 国产一区激情在线| 婷婷激情综合网| 亚洲免费成人av| 国产精品无圣光一区二区| 日韩美一区二区三区| 国产精品亚洲а∨天堂免在线| 午夜精品久久久| 亚洲人一二三区| 日本一区二区成人| 色8久久精品久久久久久蜜| 黄色小说综合网站| 日本午夜一本久久久综合| 综合久久久久久| 国产精品毛片久久久久久久| 久久久噜噜噜久久人人看| 欧美一区二区三区免费在线看| 91成人在线免费观看| www.欧美.com| 97se亚洲国产综合自在线| 国产成人免费视频网站高清观看视频| 久久机这里只有精品| 另类综合日韩欧美亚洲| 免费观看30秒视频久久| 日本在线不卡视频一二三区| 亚洲777理论| 亚洲.国产.中文慕字在线| 亚洲国产视频网站| 亚洲国产成人va在线观看天堂| 一区二区三区欧美| 亚洲综合色区另类av| 亚洲一区视频在线| 亚洲aⅴ怡春院| 日本不卡一区二区| 蜜乳av一区二区三区| 久久精品国产99国产精品| 老司机午夜精品| 国产精品66部| 不卡av在线网| 欧美视频一区二区三区四区| 欧美在线你懂的| 91麻豆精品国产自产在线观看一区 | 一本久道中文字幕精品亚洲嫩| 91福利在线看| 欧美高清视频一二三区| 国产一区二区三区蝌蚪| 国产精品123| 91亚洲国产成人精品一区二区三| 色94色欧美sute亚洲线路一久| 欧美猛男男办公室激情| 3d动漫精品啪啪一区二区竹菊| 欧美va日韩va| 中文字幕永久在线不卡| 午夜视频在线观看一区| 蜜桃一区二区三区四区| 成+人+亚洲+综合天堂| 欧美中文字幕不卡| 精品久久久久久久一区二区蜜臀| 欧美国产日韩精品免费观看| 亚洲伊人伊色伊影伊综合网| 久久99精品久久只有精品| av一区二区三区在线| 欧美一区2区视频在线观看| 国产亚洲午夜高清国产拍精品 | 91精品国产一区二区三区蜜臀 | 亚洲图片欧美色图| 国产米奇在线777精品观看| 色婷婷亚洲精品| 精品免费99久久| 亚洲亚洲人成综合网络| 国产成人av网站| 欧美精品123区| 亚洲毛片av在线|