在Delphi中動態地使用SQL查詢語句 Adoquery sql 參數 冒號


 

 

在Delphi中動態地使用SQL查詢語句

在一般的數據庫管理系統中,通常都需要應用SQL查詢語句來提高程序的動態
特性。下面介紹如何在Delphi中實現這種功能。
在Delphi中,使用SQL查詢語句的途徑是:在窗體中置入TQuery構件,設置其
SQL屬性的內容值,此內容為一個字符串數組,數組的每個值對應一行SQL查詢語句。
可以在程序設計過程中事先指定,也可以在程序運行中重新賦值,即可以實現動態
地改變程序中的查詢語句。假定程序的窗體中有一個名為Query1的TQuery構件,在
程序運行過程中需要改變它的SQL查詢語句內容,則可以引用以下程序行。
Query1.close;
{先關閉以前查詢的連接}
Query1.SQL.Clear;
{清除以前的查詢語句}
Query1.SQL.Add('select * from mytable');
{增加新的查詢語句內容為select * from mytable}
Query1.Prepare;
{發送查詢到Borland Database Engine (BDE)}
Query1.open;
{建立新的查詢語句的數據庫連接}
在Delphi中,要靈活地使用SQL查詢語句,還需要使用TQuery構件的Params特性,
即在查詢語句中使用參數。Delphi中的SQL語句如需參數,則在參數名稱前使用一個
冒號':'來作為標識。例如:'select * from mytable where id_no=:p'一句,其中
p為參數,可以在程序運行過程進行在賦值。在程序運行期動態地創建帶參數的SQL
查詢語句較為復雜,其過程如下:
Query1.close;
{先關閉以前查詢的連接}
Query1.SQL.Clear;
{清除以前的查詢語句}
Query1.Params.Clear;
{清除以前查詢語句的參數}
Query1.Params.CreateParam(ftString, 'p',ptInput);
{創建新的查詢語句的參數p}
Query1.SQL.Add('select * from title1 where NO_GLOBE=:p');
{增加新的查詢語句內容為select * from title1 where NO_GLOBE=:p}
{其中p為新建的參數}
Query1.ParamByName('p').asstring:= '1';
{給新的參數賦值為'1'}
Query1.Prepare;
{發送查詢到Borland Database Engine (BDE)}
Query1.open;
{建立新的查詢語句的數據庫連接}
以上兩個示例中,SQL查詢語句都是SELECT語句,而當SQL語句是UPDATE或INSERT、DELETE時,其中的Query1.Open需要改為Query1.ExecSQL。
4、動態SQL應用實例介紹
下面給出一個完成動態SQL查詢、批記錄移動的數據庫程序。程序從數據庫my_database的表TITLE_L.DBF中選取符合要求日期的記錄,並批量移動到同一個數據庫的表my_table.dbf中。
{指定所要連接的數據庫別名}
Database1.AliasName:='MYDATABASE';
Database1.DatabaseName:=my_database;
Database1.connected :=True;
{指定目標表是Table1}
Table1.DatabaseName:= ' my_database';
Table1.TableName:= ' my_table.dbf';
Table1.Active:=True;
{指定源數據的內容對應查詢Query1}
Query1.DatabaseName:= ' my_database';
Query1.close;
{程序運行時動態添加SQL查詢語句}
Query1.SQL.Clear;
Query1.Params.Clear;
Query1.Params.CreateParam(ftInteger, 'update',ptInput);
Query1.Params.CreateParam(ftInteger, 'dndate',ptInput);
Query1.SQL.Add('SELECT* FROM TITLE_L');
Query1.SQL.Add('where LET_DATE<=:update');
Query1.SQL.Add('AND LET_DATE>:dndate');
Query1.SQL.Add('ORDER BY NO_LOCAL');
Query1.Prepare;
Query1.Params[0].asInteger:=Up_Date;
Query1.Params[1].asInteger:=Down_Date;
Query1.open;
Query1.Active:=True;
{用DBGrid1來顯示將要移動的記錄}
DataSource1.DataSet:= Query1;
DBGrid1.DataSource:= DataSource1;
{進行批量記錄移動}
BatchMove1.Mode:=batAppend;
BatchMove1.RecordCount:=0
BatchMove1.Source:=Query1;
BatchMove1.Destination:=Table1;
BatchMove1.Execute;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM