• 在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;

  • 相关阅读:
    Android SDK 国内镜像及配置方法
    Python多线程学习
    JProfiler 8下载地址和注册码
    Python自动化测试工具Splinter简介和使用实例
    linux系统新建用户ssh远程登陆显示-bash-4.1$解决方法
    Linux系统安装VMware Tools
    CentOS minimal网络设置
    接口测试之webservice
    VirtualBox-Linux系统安装增强功能
    PhantomJS快速入门
  • 原文地址:https://www.cnblogs.com/hcwp/p/3853068.html
Copyright © 2020-2023  润新知