网站首页 > 技术文章 正文
8.ADO组件之ADOQuery组件
Delphi 的 ADO 组件中另外一个重要的数据集组件是 ADOQuery 组件,需要使用 SQL 语句来进行查询。
8.1 ADOQuery 与 ADOTable 的区别
- ADOQuery 组件的主要功能是用来支持 SQL 语句访问本地或远程数据库。
- ADOQuery 组件允许同时访问多个表,而 ADOTable 组件一次只能访问一个表。
- ADOQuery 组件访问的是表中的一个子数据集,即符合条件的特定的数据;而 ADOTable 组件一般访问的是表上的全部数据。
- ADOQuery 组件在只有使用 SQL 语句才能完成查询的时候必须使用该组件,支持复杂的嵌套查询。
8.2 ADOQuery 组件的主要属性
- SQL - 字符串类型,包含了需要执行的查询的 SQL 语句
在 Delphi 应用程序中使用的 SQL 语句可以分为两种:静态 SQL 语句和动态 SQL 语句。
静态 SQL 语句在程序设计阶段,将 SQL 语句作为 ADOQuery 组件的 SQL 属性值设置,可以通过对象查看器进行设置。
动态 SQL 语句则在程序运行过程中进行设置,可以动态地给 SQL 语句的参数赋值。在代码中实现查询的步骤如下:
- 调用 ADOQuery 组件的 Close 方法关闭组件;
- 调用 ADOQuery.SQL 的 Clear 方法清除原来的 SQL 语句;
- 调用 ADOQuery.SQL 的 Add 方法添加新的 SQL 语句;
- 调用 ADOQuery 的 Open 方法或 ExecSQL 方法执行 SQL 语句;
如:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from customers');
ADOQuery1.Open; 或者 ADOQuery1.ExecSQL;
- Active
可以通过设置 Active 属性为 True 来执行 SQL 语句,一般情况下,通过 ExecSQL 来运行 SQL 语句。如果执行的 SQL 语句有结果集,则可与通过 Open 方法来运行 SQL 语句。
- Parameters
该属性为 TParameters 类型,包含了 SQL 语句中使用的参数。在运行中可以访问 Parameters 属性中的参数,也可以通过该属性给 SQL 参数进行赋值。如:
ADOQuery.SQL.Add(''SELECT * FROM customers WHERE customer_id = :AnId;');
Param := ADOQuery.Parameters.ParamByName('AnId');
Param.DataType := ftInteger;
Param.Value := 1;
ADOQuery.Prepared := true;
try
ADOQuery.Active := True;
except
on e: EADOError do
begin
MessageDlg('Error while doing query', mtError, [mbOK], 0);
Exit;
end;
end;
- DataSource
该属性为动态 SQL 语句中存在未赋值的参数时,Delphi 会自动检查 ADOQuery 组件的 DataSource 属性,如果为该属性设置了属性值,则会把没有赋值的参数与 DataSource 组件中的各个字段比较,自动将相应的字段赋值给与其相匹配的参数,实现连接查询。
- Prepared
在执行查询时,可以让数据库查询分配资源并执行查询优化,也称为执行查询前的准备工作。在执行查询前设置该属性为 True 会提高应用程序的性能。
8.3 ADOQuery 组件的主要方法
- Open
SQL 语句可以分为两种,带有结果集的查询和执行数据库维护功能的 SQL 语句。一般情况下,Open 方法用于执行带有结果集的查询。
- ExecSQL
一般情况下,ExecSQL 方法用于执行没有结果集返回的 SQL 语句。不过,Delphi 并没有规定在哪种情况下一定要使用哪种方法,可以使用 Open 来执行所有的 SQL 语句。
8.4 动态查询
ADOQuery 组件的动态 SQL 语句是指带有参数的 SQL 语句,参数的值在运行过程中动态确定,在程序执行期间参数的值是可变的。如:
select * from customers where name = :NAME;
其中:“:NAME” 就是动态 SQL 的参数,运行时必须给定数据。
在 ADOQuery 组件中,该组件提供了 Parameters 属性来为参数赋值。
设计期:
单击 ADOQuery 组件的 Parameters 属性右侧的 ... 按钮,如下图所示:
在参数对话框中选择某个参数名称,在对象观察器中可以设置该参数的属性,包括参数类型、参数值等。
运行期:
在运行期,可以使用 Parameters 属性,以数组的方式进行访问和设置,也可以使用 ParamByName 方法获取对应的参数并进行设置。如:
Param := ADOQuery.Parameters.ParamByName('AnId');
Param.DataType := ftInteger;
Param.Value := 1;
8.5 动态查询示例
示例1:输入姓名查询数据
界面设计如下图所示:
组件及属性:
组件 | 属性 | 值 |
Panel1 | Align | alTop |
Caption | '' | |
Label1 | Caption | '姓名' |
Edit1 | Text | '' |
Button1 | Caption | '查询' |
ADOConnection1 | ConnectionString | Provider=MSDASQL.1;Persist Security Info=False;Data Source=demodb; |
LoginPrompt | False | |
Connected | True | |
ADOQuery1 | Connection | ADOConnection1 |
SQL | select * from d_students where name =:NAME | |
Active | False | |
DataSource1 | DataSet | ADOQuery1 |
DBGrid1 | Align | alClient |
DataSource | DataSource1 |
代码示例:
procedure TForm1.Button1Click(Sender: TObject);
var
Param: TParameter;
begin
with ADOQuery1 do
begin
Close;
Param := Parameters.ParamByName('NAME');
Param.DataType := ftString;
Param.Value := Edit1.Text;
Prepared := True;
Open;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ADOConnection1.LoginPrompt := False;
ADOConnection1.Open();
end;
示例2:输入任意 SQL 语句执行
界面设计如下:
组件及属性设置参照上例。
示例代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add(Memo1.Lines.Text);
Prepared := True;
Active := True;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
with ADOConnection1 do
begin
LoginPrompt := False;
Open;
end;
end;
猜你喜欢
- 2024-09-14 Mysql:替换某个字段中的部分字符串——replace函数
- 2024-09-14 plsql字符串分割浅谈(plsql字符串截取)
- 2024-09-14 oracle函数--INSTR、SUBSTR使用说明和实例讲解
- 2024-09-14 详解Oracle使用substr和instr截取字符串指定位置的字符
- 2024-09-14 mysql 替换某一个字段中的字符串(mysql替换一个字符串的字符函数为)
- 2024-09-14 sql注入总结(sql注入示例)
- 2024-09-14 Mybatis 中的 DAO 接口和 XML 文件里的 SQL他们如何建立关系?
- 2024-09-14 SQL Server - 字符串常用操作(sqlserver 字符类型)
- 2024-09-14 如何在Java中比较字符串?(如何在java中比较字符串个数)
- 2024-09-14 SQL截取函数(substr)与字符串查找函数(Instr)的组合应用
- 1512℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 556℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 504℃MySQL service启动脚本浅析(r12笔记第59天)
- 482℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 480℃启用MySQL查询缓存(mysql8.0查询缓存)
- 460℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 441℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 438℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)