?? 041.htm
字號:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI基礎教程-->第十七章 SQL編程(一)</TITLE>
<META NAME="keywords" CONTENT=" DELPHI基礎教程 第十七章 SQL編程(一)">
<META NAME="description" CONTENT=" - DELPHI基礎教程 - 第十七章 SQL編程(一)">
<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋體"}
.tt2 {font: 12pt/15pt "宋體"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>
<TD CLASS="tt3" VALIGN="top" 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>
<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷體_GB2312">第十七章 SQL編程(一)</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
<p>SQL語言作為關系數據庫管理系統中的一種通用的結構查詢語言,
已經被眾多的數據庫管理系統所采用,如ORACLE、Sybase、Informix等數據庫管理系統,它們都支持SQL
語言。Delphi與使用SQL語言的數據庫管理系統兼容,在使用Delphi開發數據庫應用程序時,我們可以使用SQL語言編程,支持SQL編程是Delphi的一個重要特征,這也是體現Delphi作為一個強大的數據庫應用開發工具的一個重要標志。 </p>
<p>17.1 SQL語言簡介 </p>
<p>17.1.1 SQL的歷史 </p>
<p>在70年代初,E.E.Codd首先提出了關系模型。70年代中期,IBM公司在研制
SYSTEM R關系數據庫管理系統中研制了SQL語言,最早的SQL語言(叫SEQUEL2)是在1976
年 11 月的IBM Journal of R&D上公布的。1979年ORACLE公司首先提供商用的SQL,IBM公司在DB2
和SQL/DS數據庫系統中也實現了SQL。</p>
<p>1986年10月,美國ANSI采用SQL作為關系數據庫管理系統的標準語言(ANSI
X3. 135-1986),后為國際標準化組織(ISO)采納為國際標準。1989年,美國ANSI采納在ANSI
X3.135-1989報告中定義的關系數據庫管理系統的SQL標準語言,稱為ANSI
SQL 89, 該標準替代ANSI X3.135-1986版本。該標準為下列組織所采納:</p>
<p>● 國際標準化組織(ISO),為ISO 9075-1989報告“Database Language SQL With
Integrity Enhancement”</p>
<p>● 美國聯邦政府,發布在The Federal Information Processing Standard
Publication(FIPS PUB)127</p>
<p>目前,所有主要的關系數據庫管理系統支持某些形式的SQL語言,
大部分數據庫打算遵守ANSI SQL89標準。 </p>
<p>17.1.2 SQL的優點</p>
<p>SQL廣泛地被采用正說明了它的優點。它使全部用戶,包括應用程序員、DBA管理員和終端用戶受益非淺。</p>
<p>(1) 非過程化語言</p>
<p>SQL是一個非過程化的語言,因為它一次處理一個記錄,對數據提供自動導航。SQL允許用戶在高層的數據結構上工作,而不對單個記錄進行操作,可操作記錄集。所有SQL
語句接受集合作為輸入,返回集合作為輸出。SQL的集合特性允許一條SQL語句的結果作為另一條SQL語句的輸入。</p>
<p>SQL不要求用戶指定對數據的存放方法。
這種特性使用戶更易集中精力于要得到的結果。所有SQL語句使用查詢優化器,它是RDBMS的一部分,由它決定對指定數據存取的最快速度的手段。查詢優化器知道存在什么索引,哪兒使用合適,而用戶從不需要知道表是否有索引,表有什么類型的索引。</p>
<p>(2) 統一的語言</p>
<p>SQL可用于所有用戶的DB活動模型,包括系統管理員、數據庫管理員、
應用程序員、決策支持系統人員及許多其它類型的終端用戶。基本的SQL
命令只需很少時間就能學會,最高級的命令在幾天內便可掌握。</p>
<p>SQL為許多任務提供了命令,包括:</p>
<p>● 查詢數據</p>
<p>● 在表中插入、修改和刪除記錄</p>
<p>● 建立、修改和刪除數據對象</p>
<p>● 控制對數據和數據對象的存取</p>
<p>● 保證數據庫一致性和完整性</p>
<p> </p>
<p>以前的數據庫管理系統為上述各類操作提供單獨的語言,而SQL
將全部任務統一在一種語言中。</p>
<p>(3) 是所有關系數據庫的公共語言</p>
<p>由于所有主要的關系數據庫管理系統都支持SQL語言,用戶可將使用SQL的技能從一個RDBMS轉到另一個。所有用SQL編寫的程序都是可以移植的。</p>
<p> </p>
<p>17.2 TQuery部件在SQL編程中的運用</p>
<p> </p>
<p>在Delphi中是通過TQuery部件來實現對SQL語言支持的,也就是說用Delphi
開發數據庫應用程序時,使用SQL語言操作數據庫中的數據的唯一途徑是經過TQuery部件。
TQuery部件在Delphi中使用SQL語言編程時占居著絕對重要的地位。在使用Delphi
開發的數據庫應用中,可以使用SQL語言訪問下列三個方面的數據庫:</p>
<p>● Paradox或dBASE數據庫中的表</p>
<p>在訪問這些桌面數據庫系統中的數據時,只能使用ANSI標準的SQL語言中的部分SQL
語句,它們主要包括:Select、Insert、Update和Delete語句;即本地SQL語句。有關詳細情況請參見附錄“局部SQL語句的使用”。</p>
<p>●</font> <font face="宋體" lang="ZH-CN">本地InterBase數據庫服務器中的數據庫</p>
<p>在InterBase數據庫中支持的SQL語句, 在Delphi中都可以使用。有關InterBase中SQL語句的語法和限制,請參看“InterBase的語言參考”。<dir>
<dir>
<p>● 遠程數據庫服務器中的數據庫</p>
</dir>
</dir>
<p>當然這要求在Delphi中必須安裝相應的SQL Link。只要是數據庫服務器上的DBMS支持的SQL語句,在Delphi中都可以使用。有關語法
及限制請參看相關的數據庫管理 系統的文檔。</p>
<p> </p>
<p>值得一提的是,Delphi還支持異構查詢,即可以同時查詢多個數據庫服務器中相同的或不同類型的數據庫表,例如查詢的數據可以是來自ORACLE數據庫中的表和Sybase數據庫中的表或者其它多個數據庫中的表。</p>
<p> </p>
<p>17.2.1 TQuery部件的使用</p>
<p> </p>
<p>TQuery部件是一個數據集部件,它在Delphi部件選擇板上的數據訪問頁(Data
Access)上,它與TTable部件具有很多共同的特性,我們在第十五章“數據訪問部件的應用及編程”中較詳細地進行了介紹。
TQuery 部件在 SQL 編程中占居了十分重要的地位。 它實現了Delphi對SQL語言的支持,在Delphi開發的數據庫應用中,SQL語句是通過TQuery部件傳遞到要訪問的數據庫系統的數據庫引擎中,由數據庫引擎具體執行SQL語句,
以實現對數據的操作,而不是傳遞給Delphi中的BDE,由BDE實施具體的SQL動作。</p>
<p> </p>
<p>我們已經知道了TTable部件在訪問數據庫時已經具備很強大的功能。TTable部件通過Delphi內置的BDE可以實現對各種數據庫系統的訪問,然而TQuery部件提供了一些
TTable部件不具備的功能,它們是:</p>
<p>●多表聯接查詢</p>
<p>●復雜的嵌套查詢(Select中包含著Select子查詢)</p>
<p>●明確需要按SQL語言進行的操作</p>
<p> </p>
<p>因為TTabel部件不能使用SQL語言,而在TQuery部件可以使用SQL語言,因而TQuery部件也就具備了強大的關系查詢能力。當然這也使數據庫應用程序本身變得更復雜了。</p>
<p>在Delphi應用程序中編寫和使用的SQL語句有兩種:即靜態SQL語句、動態SQL
語句。靜態SQL語句是在程序設計階段,將SQL命令文本作為TQuery部件的SQL屬性值設置。
而動態SQL語句編程是SQL語句中包含一系列的參數,在程序運行過程中各參數值是可變的,即可以動態地給SQL語句中的參數賦值。
</p>
<p>靜態方式是把SQL命令文作為TQuery部件的SQL屬性值進行設置,這樣,當執行應用程序時,Delphi便執行TQuery部件SQL屬性中設置的SQL命令。如果是SQL中的查詢命令,
把TQuery部件通過TDataSource部件與數據控制部件相連,查詢的結果將會顯示在與
TQuery部件相連接的數據瀏覽部件中。動態SQL語句是指SQL語句中包含一些參數變量,在程序中可以為這些參數賦值,在程序運行過程中,各個參數值是變化的。TQuery部件的SQL
屬性中的SQL語句的編寫也有兩種方法,一種方法是在程序設置階段便將相應的SQL語句寫入到TQuery的SQL屬性中,另一種方法是在Delphi開發的應用程序將SQL語句,包含在Pascal代碼單元中。</p>
<p>在SQL編程中使用TQuery部件的具體方法步驟如下:</p>
<p>①為TQuery部件設置DatabaseName屬性,它可以是用BDE建立的數據庫的別名,
或桌面數據庫系統中的目錄名或數據庫服務器中的文件名,如果在應用中使用了TDatabase
部件,那么TQuery部件的DatabaseName屬性可以是TDatabase部件中定義的一個數據庫別名。詳細情況請參看“TDatabase部件的使用”;</p>
<p>②為TQuery部件設置SQL屬性,TQuery部件的SQL屬性值就是應用程序要執行的SQL
命令文本,設置SQL屬性有兩種方法:</p>
<p>● 在程序設計過程中,我們可以通過對象瀏覽器(Object Inspector)編輯SQL屬性
在Object Inspector中選擇SQL屬性,這樣會打開String List Editor窗口,在其
中我們便可以編寫SQL命令,我還可以打開Visual Query Builder來編寫SQL命令
(只有Delphi的客戶/服務器版本才具有這一工具)。</p>
<p>● 將SQL命令包含在Pascal代碼單元中</p>
<p>在程序運行過程中,首先調用TQuery部件的Close方法關閉當前的TQuery部件,然
后調用Clear方法清除SQL屬性,并說明新的SQL命令文本,然后調用Add方法,將新的SQL命令文本加入到SQL屬性中。</p>
<p> </p>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -