Delphi中使用动态SQL的几个问题

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情
Delphi支持参数化SQL语句,不过俺很少用Paramters/Params属性,一般都是自己构造SQL,
用SQL.Text:='Select * from ..Where ID='''+edit1.text+'''';
不过这种方法要小心SQL注入攻击哦。
今天改用ADOQuery控件的Paramters属性,本已为简单的很,一用发现了不少问题。由于我只使用一个ADOQuery控件,而其中的SQL语句和语句中的参数经常要变,所以刚开始在程序中用了如下代码:
..........
ADOQ.Parameters.Clear;
ADOQ.Parameters.CreateParameter(...); //创建参数1
ADOQ.Parameters.CreateParameter(...); //创建参数2
ADOQ.SQL.Clear;
ADOQ.SQL.Assign(memo1.text);

............

可一执行,就有时正常,有时报错,说什么不正确的参数设置(用的ACCESS)。
经过两天的折腾,发现必须使用下面的代码(真是奇怪):
..........
ADOQ.Parameters.Clear;
Parami:=ADOQ.Parameters.ADDParameter; //创建参数1
Parami.Name:=...;  Parami.Value:=... 
Parami:=ADOQ.Parameters.ADDParameter; //创建参数2
Parami.Name:=...;  Parami.Value:=... 
        //ADOQ.SQL.Clear;  // 该句不能使用,
ADOQ.SQL.Assign(memo1.text);
............


还有创建参数的名称不仅要和SQL语句中的参数名称一致,创建参数的顺序也要和SQL语句中参数出现的顺序一致
从Delphi的帮助上也没发现什么,真是不理解,还有如果SQL 语句是非Select形则两种方法均可。
???
准备阅读Delphi ADOQuery的源代码
InstallShield使用——几个技术问题介绍 InstallShield使用 阅读详情

相关推荐

Delphi连接SQL Server 2000

一、在Delphi7中连接MS SQL Server 2000的方法。刚开始时界面如下:添加4个控件。     设置控件属性过程: 1、ADOConnection1设置1)双击ADOConnection1,进行设置连接字符串(作用是:选取连接驱动方式和连接的数据库设置)。过程如下图所示:    2、ADOQuery1设

涛涌四海向大家学习,与大家携手共进…… 3万+

delphi如何调用sql存储过程,并获取结果

delphi如何调用sql存储过程,并获取结果 adostoredproc1.Close; adostoredproc1.ProcedureName:='sp_thchl'; adostoredproc1.Parameters.Clear; adostoredproc1.Parameters.CreateParameter('out',ftInteger,pdoutput,1,1); adostoredproc1.ExecProc; edit1.Text :=adostoredproc1.Parameters[0].Value;

Delphi考虑sql注入

Delphi项目防止Sql注入

GavinPan的专栏 4278

Delphi参数化SQL的小问题

     今天用参数化SQL时运行死活过不去,报告异常说edatabaseerror parameter table not found,就是说参数table在SQL中找不到了.但死活查代码都看不出任何问题.   历一小时,最后才查出原因,动态加入tadoquery.sql参数化SQL语句在调用参数前先解析下SQL,如下:  Parameters.ParseSQL(SQL.Tex

CODER 沙漠孤狐 3357

Delphi动态使用SQL查询语句 Adoquery sql 参数 冒号

http://blog.sina.com.cn/s/blog_732d14b50100qnt8.html 在Delphi动态使用SQL查询语句 在一般的数据库管理系统中,通常都需要应用SQL查询语句来提高程序的动态特性。下面介绍如何在Delphi中实现这种功能。在Delphi中,使用SQL查询语句的途径是:在窗体中置入TQuery构件,设置其SQL属性的内容...

weixin_30852367的博客 615

delphi使用SQL的教程4(使用Params属性为参数赋值 )

17.4.1 使用Params属性为参数赋值   TQuery部件具有一个Params属性,它们在设计时不可用,在程序运行过程中可用,并且是动态建立的,当为TQuery部件编写动态SQL 语句时, Delphi 会自动地建立一个数组Params,数组Params是以0下标开始的,依次对应动态SQL 语句中的参数, 也就是说动态SQL语句中第一个参数对应Params[0],第二个参数对应p...

dipo2207的博客 754

Delphi 读写Oracle,中文出现乱码:靠靠

Delphi连接Oracle数据库时,出现中文乱码:靠靠,plsql查询出来的显示正常: with DmMain.ADOStoredProc1 do         begin           Close;           Parameters.Clear;           ProcedureName := 'pkg_SynZhongTai.sp_SaleListEnd';

gjtao1130的专栏 2739

delphi 取得存储过程中的返回值

procedure TForm1.Button1Click(Sender: TObject); var x:Integer; begin with ADOStoredProc1 do begin ProcedureName := 'My_Test'; Parameters.Clear; Parameters.CreateParameter(

easyboot的专栏 5443

Delphi动态使用SQL查询语句

在一般的数据库管理系统中,通常都需要应用SQL查询语句来提高程序的动态 特性。下面介绍如何在Delphi中实现这种功能。 在Delphi中,使用SQL查询语句的途径是:在窗体中置入TQuery构件,设置其 SQL属性的内容值,此内容为一个字符串数组,数组的每个值对应一行SQL查询语句。 可以在程序设计过程中事先指定,也可以在程序运行中重新赋值,即可以实现动态 地改变程序中的查询语句。假定

Kei's Blog 3195

Delphi环境下自定义SQL查询动态生成与执行实战

在现代数据库应用开发中,静态SQL语句已难以满足复杂多变的业务需求。自定义SQL查询通过动态构造SQL命令,支持运行时条件拼接,显著提升数据访问灵活性。其核心原理在于将SQL语句分解为可变片段,结合参数化输入进行重组,并利用数据库引擎的预编译机制安全执行。相较于固定查询,它具备更高的适应性,广泛应用于多维度报表、用户自定义筛选及细粒度权限控制等场景。本章将为后续动态生成机制与组件封装提供理论支撑。更进一步,可将整套查询模板定义为结构化配置对象。例如使用JSON格式描述:},],

weixin_42601134的博客 1105

DELPHI中DBCHART开发中的几个问题

1,在DELPHI的实际开发中,我们都需要在程序中绑定数据源,以便更好的适应实际的开发需求,这里只是简单的做个介绍:我用的是FASTLINE,里面需要动态的绑定x,y轴,在DBCHART中可以直接设置,那么在程序中如何设置呢?          sSql := select scan_start_time,sum+(+trim(adoQtarget.FieldByName(nam

Rubi的专栏 7225

delphi使用SQL的教程3

17.3.3通过TQuery部件如何获得活动的数据 我们在前面的章节里介绍TTable部件时,我们知道通过TTable部件从数据库中获得的数据都是活动的,也就是说用户可以直接通过数据浏览部件对这些数据进行编辑修改。而通过TQuery部件可以获得两种类型的数据:●“活动”的数据这种数据就跟通过TTable部件获得的数据一样,用户可以通过数据浏览部件来编辑修改这些数据,并且当调用...

dipo2207的博客 248

delphi使用SQL的教程2

在程序运行过程中,首先调用TQuery部件的Close方法关闭当前的TQuery部件,然后调用Clear方法清除SQL属性,并说明新的SQL命令文本,然后调用Add方法,将新的SQL命令文本加入到SQL属性中。 ③通过调用TQuery部件的Open方法或ExecSQl方法执行SQL命令。Open方法只执行Select命令,ExecSQL方法还可以执行其它的SQL命令。Open...

dipo2207的博客 354

DelphiSQL编程

DelphiSQL编程 SQL语言作为关系数据库管理系统中的一种通用的结构查询语言, 已经被众多的数据库管理系统所采用,如Oracle、Sybase、Informix等数据库管理系统,它们都支持SQL 语言。Delphi使用SQL语言的数据库管理系统兼容,在使用Delphi开发数据库应用程序时,我们可以使用SQL语言编程,支持SQL编程是Delphi的一个重要特征,这也是体现De...

dkopg24406的专栏 1097

delphi query下的sql动态查询

delphi query下的sql动态查询效果图 设计视图 所需控件: 1. Query(数据集控件) 2. Datasource(数据访问控件) 3. DBGrid (数据浏览控件) Query->Datadource->DBGrid代码如下procedure TForm1.Button2Click(Sender: TObject); begin if combobox1.

MAO_JIN_DAO的博客 3085

delphi使用SQL的教程1

SQL语言作为关系数据库管理系统中的一种通用的结构查询语言,已经被众多的数据库管理系统所采用,如ORACLE、Sybase、Informix等数据库管理系统,它们都支持SQL语言。Delphi使用SQL语言的数据库管理系统兼容,在使用Delphi开发数据库应用程序时,我们可以使用SQL语言编程,支持SQL编程是Delphi的一个重要特征,这也是体现Delphi作为一个强大的数据库应用...

dipo2207的博客 365

DelphiSQL

SQL(Structured Query Language) is a standardized language for defining and manipulating data in a relational database. In accordance with the relational model of data, the database is perceived as a...

cumao2792的博客 490

delphi使用SQL的教程5

17.5SQL编程实例 我们在学习了SQL程序的编写方法之后,我们便可以着手创建自己的应用程序了,通过创建应用程序我们对Delphi的强大功能就会有更深刻的印象,同时会进一步全面掌握有关SQL编程的知识,在本节中我们主要介绍两个例子,前一个例子主要是用静态的SQL语句编程,后一个例子是用动态SQL语句编程。 17.5.1设计简单的SQL程序编辑器 例17.1:在这个例子中,我们...

dipo2207的博客 239

Delphi拼装SQL语句应该注意的地方

Delphi使用SQL语句要注意的事项,归纳起来主要有一下几条:   1、一定不要漏空格或换行符。   在使用Delphi开发管理软件时,我们要经常拼装SQL语句,例如: 'SELECT * FROM Users'+ 'WHERE UserOID IS NOT NULL' 这个时候SQL语句就变成了 SELECT  *  FROM  UsersWHERE UserOID IS

疯狂的老鼠 1199
下一篇: 《Delphi模式编程》心得
superbirdxp
博客等级 码龄23年 33粉丝 68原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值