在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;
在Delphi中动态地使用SQL查询语句 Adoquery sql 参数 冒号的更多相关文章
- android之Android中的SQL查询语句LIKE绑定参数问题解决办法(sqlite数据库)
由于考虑到数据库的安全性,不被轻易SQL注入,执行查询语句时,一般不使用直接拼接的语句,而是使用参数传递的方法.然后在使用参数传递的方法中时,发现当使用like方式查询数据时,很容易出现一个问题. 错 ...
- 转: 从Mysql某一表中随机读取n条数据的SQL查询语句
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...
- oracle中sql查询语句的执行顺序
查询语句的处理过程主要包含3个阶段:编译.执行.提取数据(sql查询语句的处理主要是由用户进程和服务器进程完成的,其他进程辅助配合) 一.编译parse 在进行编译时服务器进程会将sql语句的正文放入 ...
- 从Mysql某一表中随机读取n条数据的SQL查询语句
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...
- Delphi中动态创建窗体有四种方式
Delphi中动态创建窗体有四种方式,最好的方式如下: 比如在第一个窗体中调用每二个,主为第一个,第二个设为动态创建 Uses Unit2; //引用单元文件 procedure TForm1.But ...
- EF5中 执行 sql语句使用Database.ExecuteSqlCommand 返回影响的行数 ; EF5执行sql查询语句 Database.SqlQuery 带返回值
一: 执行sql语句,返回受影响的行数 在mysql里面,如果没有影响,那么返回行数为 -1 ,sqlserver 里面 还没有测试过 using (var ctx = new MyDbConte ...
- SQL查询语句大全集锦
SQL查询语句大全集锦 一. 简单查询 简单的Transact-SQL查询只包括选择列表.FROM子句和WHERE子句.它们分别说明所查询列.查询的 表或视图.以及搜索条件等. 例如,下面的语句查询t ...
- (转)经典SQL查询语句大全
(转)经典SQL查询语句大全 一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql s ...
- 经典SQL查询语句大全
一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数 ...
随机推荐
- 20155202 2016-2017-2 《Java程序设计》第4周学习总结
20155202 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 继承与多态: 子类和父类有(is a)关系,Role role1 =new Swordsma ...
- 《JAVA程序设计》 20155208 实验四 Android程序设计
<JAVA程序设计> 20155208 实验四 Android程序设计 实验一: 实验要求: Android Stuidio的安装测试: 参考<Java和Android开发学习指南( ...
- 20155339 2017-2018-1《信息安全系统设计》第四周课堂测试、Makefile以及myod
20155339 2017-2018-1<信息安全系统设计>第四周课堂测试.Makefile以及myod 测试1-vi 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号 用Vi ...
- springboot对security的后端配置
一.Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring ...
- DSP28335做FFT傅里叶变换
1. 看了一下例程,居然没有FFT的例程,难道这个DSP28335不能做FFT吗?对了C2000系列是有C2000 ware这个库的.方便很多,不过目前不确定在C5000上运行的FFT能直接迁移到DS ...
- 洛谷 P1941 飞扬的小鸟
洛谷 P1941 飞扬的小鸟 原题链接 首先吐槽几句 noip都快到了,我还不刷起联赛大水题! 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节 ...
- 搞懂.NET Framework 历史版本(2017年)
最近被.NET平台各种名词.以及各种版本弄得有些疑惑,开发和部署,对于开发平台版本选择是个基本问题,因此,花了些时间,学习汇总了有关.NET版本演进的历史. .NET简介 这个平台相信我们都知道,不过 ...
- javaweb(七)——HttpServletResponse对象(一)
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要 ...
- ASP.NET获取汉字拼音的首字母
代码 #region GetChineseSpell获取汉字拼音的第一个字母 //获取汉字拼音的第一个字母 static public string GetChineseSpell(string st ...
- python全栈开发-前方高能-函数进阶
python_day_10 一.今日主要内容 1. 动态参数 位置参数的动态参数: *args 关键字参数的动态参数 : **kwargs 顺序: 位置,*args,默认值,**kwargs 在形参上 ...