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

在Delphi中动态地使用SQL查询语句 Adoquery sql 参数 冒号的更多相关文章

  1. android之Android中的SQL查询语句LIKE绑定参数问题解决办法(sqlite数据库)

    由于考虑到数据库的安全性,不被轻易SQL注入,执行查询语句时,一般不使用直接拼接的语句,而是使用参数传递的方法.然后在使用参数传递的方法中时,发现当使用like方式查询数据时,很容易出现一个问题. 错 ...

  2. 转: 从Mysql某一表中随机读取n条数据的SQL查询语句

    若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...

  3. oracle中sql查询语句的执行顺序

    查询语句的处理过程主要包含3个阶段:编译.执行.提取数据(sql查询语句的处理主要是由用户进程和服务器进程完成的,其他进程辅助配合) 一.编译parse 在进行编译时服务器进程会将sql语句的正文放入 ...

  4. 从Mysql某一表中随机读取n条数据的SQL查询语句

    若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...

  5. Delphi中动态创建窗体有四种方式

    Delphi中动态创建窗体有四种方式,最好的方式如下: 比如在第一个窗体中调用每二个,主为第一个,第二个设为动态创建 Uses Unit2; //引用单元文件 procedure TForm1.But ...

  6. EF5中 执行 sql语句使用Database.ExecuteSqlCommand 返回影响的行数 ; EF5执行sql查询语句 Database.SqlQuery 带返回值

    一: 执行sql语句,返回受影响的行数 在mysql里面,如果没有影响,那么返回行数为  -1 ,sqlserver 里面  还没有测试过 using (var ctx = new MyDbConte ...

  7. SQL查询语句大全集锦

    SQL查询语句大全集锦 一. 简单查询 简单的Transact-SQL查询只包括选择列表.FROM子句和WHERE子句.它们分别说明所查询列.查询的 表或视图.以及搜索条件等. 例如,下面的语句查询t ...

  8. (转)经典SQL查询语句大全

    (转)经典SQL查询语句大全 一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql s ...

  9. 经典SQL查询语句大全

    一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数 ...

随机推荐

  1. 关于 idea 快捷键 alt + f7 无法使用的一些尝试

    1. 概述 问题 使用 idea 时, 快捷键 alt + f7 无法生效 环境 OS: win10 idea: idea 2018.1.5 GeForce Experience: 3.17.0.12 ...

  2. VMWare 桥接模式

    桥接网络模式是VMware虚拟机中最简单直接的模式. 桥接网络(Bridged Networking) 桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图 ...

  3. Hadoop命令大全

    Hadoop命令大全 分类: 云计算2011-03-01 15:04 6852人阅读 评论(0) 收藏 举报 hadoop作业任务集群class脚本 1.列出所有Hadoop Shell支持的命令   ...

  4. 20155230 实验四《android程序设计》实验报告

    20155230 实验四<Android程序设计>实验报告 一.安装Android Stuidio 二.从一个活动启动另一个活动 在启动活动的活动里添加如下语句即可 Intent inte ...

  5. 20155302 实验三 敏捷开发与XP实践

    20155302 实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验内容及步骤 (一)编码标准 在IDEA中使用工具(Code->Reformate Code)把代码重 ...

  6. nginx重启无法找到PId的解决办法

    nginx停止的时候,出现了如下错误 nginx: [error] open() "/export/servers/nginx/logs/nginx.pid" failed (2: ...

  7. GlusterFS学习之路(三)客户端挂载和管理GlusterFS卷

    一.客户端挂载 可以使用Gluster Native Client方法在GNU / Linux客户端中实现高并发性,性能和透明故障转移.可以使用NFS v3访问gluster卷.已经对GNU / Li ...

  8. Linux安装gitlab

    一.GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务.安装方法是参考GitLab在GitHub上的Wiki页面. 二.我相信使用过git的开 ...

  9. 探寻ASP.NET MVC鲜为人知的奥秘(3):寻找多语言的最佳实践方式

    如果你的网站需要被世界各地的人访问,访问者会使用各种不同的语言和文字书写习惯,那么创建一个支持多语言的网站就是十分必要的了,这一篇文章就讲述怎么快速合理的创建网站对多语言的支持.接下来通过一个实例来讲 ...

  10. Sqlserver新增自增列

    if exists(select * from syscolumns where id=object_id('表名') and name='列名') begin alter table 表名 drop ...