在Delphi中实现多重查询

在数据库管理系统中,查询的方式主要有以下几种:1.固定字段的单一查询。2.可选择字段的单一查询。3.限制若干个字段的多重查询。4.可任意选择字段的多重查询。前两种也称为单条件查询,后两种称为多重(或多条件)查询。

在实际中,系统(实为程序员)提供给用户的查询方式以单条件查询为多,即使提供了多条件方式,通常也只有两或三个条件,因为编写多重查询是一项非常棘手且烦琐的事情。实际上,利用表格Grid功能,就能轻松地实现多重查询。本人以Delphi为例,介绍具体的实现方法。这种思想,也同样适合于其他的编程语言(如Visual Foxpro)。

程序主要按如下三个功能来实现:

设置DBGrid;

生成查询条件(语句);

执行查询。

具体步骤如下:

⑴新建一工程文件,取名为PDBGrid.dpr;

⑵给单元文件取名为UDBGrid.pas,在其相应的表单(取名为frmDBGrid)中添加如下控件并编写相应的代码:

其中Table2(记录查询条件的数据集)对应的表 CxComm.db的结构定义如下:

表单的FormActivate事件代码如下:

procedure TfrmDBGrid.FormActivate(Sender: TObject);
begin
if Table2.Active then Table2.Close;
Table2.EmptyTable; //清空条件
Table1.Open;
Table2.Open;
end;
Button1(设置DBGrid)的Click事件代码如下:
procedure TfrmDBGrid.Button1Click(SenderTObject);
begin
MySetDBGrid(Table1,DBGrid2);
// MySetDBGrid为自定义过程
//以Table1为数据源,DBGrid2为记录筛选(查询)条件的表格
end;

Button2(生成查询)的Click事件代码如下:

procedureTfrmDBGrid.Button2Click(Sender:TObject);
begin
if MyCreate_SQL(Table1,Table2,Query1)
//MyCreate_SQL为自定义函数
//由指定数据来源表生成SQL,存入Query1
then begin
Memo1.Lines.Clear;
Memo1.Lines:=(Query1.SQL);
Memo1.Modified:=false;
end
end;

时间: 2025-01-20 12:06:59

在Delphi中实现多重查询的相关文章

在Delphi中的Access技巧集

1.DELPHI中操作ACCESS数据库(建立.mdb文件,压缩数据库) 以下代码在WIN2K,D6,MDAC2.6下测试通过, 编译好的程序在WIN98第二版无ACCESS环境下运行成功. //在之前uses ComObj,ActiveX //声明连接字符串 Const SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;' +'Jet OLEDB:Database Password=%s;'; //====

如何在Delphi中调用oracle的存储过程返回数据集

oracle|存储过程|数据 选自CSDN http://search.csdn.net/Expert/topic/2280/2280860.xml?temp=2.169436E-02 论坛中JCC0128 网友的发言 [delphi+oracle报表解决方案(一)]delphi中调用oracle的存储过程(分带返回游标,不返回值两种)  关键字: delphi ,oracle存储过程,游标,返回数据集,报表 注:delphi 6+ oracle 8.1.6 一.创建包与包体 1.附:建表aac

Delphi中的SQL编程

SQL语言作为关系数据库管理系统中的一种通用的结构查询语言,已经被众多的数据库管理系统所采用,如ORACLE.Sybase.Informix等数据库管理系统,它们都支持SQL 语言.Delphi与使用SQL语言的数据库管理系统兼容,在使用Delphi开发数据库应用程序时,我们可以使用SQL语言编程,支持SQL编程是Delphi的一个重要特征,这也是体现Delphi作为一个强大的数据库应用开发工具的一个重要标志. 17.1 SQL语言简介 17.1.1 SQL的历史 在70年代初,E.E.Codd

数据库-delphi换成EXCEL查询不到数据

问题描述 delphi换成EXCEL查询不到数据 原来数据库是用sql sever,下面的语句能正确查询出来相关记录. adoquery4.close; adoquery4.SQL.Clear; adoquery4.SQL.Add('select 学号,姓名, sum(次数) as 剩余课时数 from '); adoquery4.SQL.Add('(select 学号,姓名, 总课时数 as 次数 from incomingInfo where 费用是否已上完=:0 and 学号 in (se

Delphi中的几种数据库引擎

Delphi中经常出现的词汇是ADO,BDE,dbExpress等等,那么他们之间到底有什么异同呢,Delphi中的数据库引擎又到底有多少种呢?也许应该从整体上把握一下,才能有的放矢.   Delphi一共提供四种数据程序的设计标准,分别是Borland Database Engine(BDE),ActiveX Data Object(ADO),dbExpress,InterBase Express.  (1)Delphi的BDE是一个在窗口环境下的32位数据库引擎.它也提供一组API函数,这些

Delphi中MIDAS程序的实例化模型种类(MIDAS之三)

Delphi中MIDAS应用程序COM服务器实例化模型种类  (1)Internal Instance     创建一个In-Process的COM程序,即DLL服务器.  (2)Single Instance     如果每个客户程序都运行服务器程序的一个实例,则使用该模型.就是每个连上线的前台程序,在服务器上都会有一个对应的应用程序服务器被运行.因此每个前台发出来的查询都会有各自      独立Process的应用程序来处理,根本无所谓排队的问题.但是它会比较占用系统资源,影响服务器整体的运

初探Delphi中的插件编程_Delphi

插件结构的编程需要一个插件容器来控制各DLL的运行情况,将划分好的每个子系统安排到一个DLL库文件中.对每个DLL程序需要为容器预留接口函数,一般接口函数包括:启动调用DLL库的函数.关闭DLL库的函数.通过接口函数,插件容器可以向DLL模块传递参数实现动态控制.具体实现细节我将在下文说明并给出响应代码. 您可能需要先了解一下DELPHI中UNIT的结构,工程的结构.本文没有深入讨论DLL编程的理论细节,只是演示了一些实用的代码,我当时学习的是刘艺老师的<DELPHI深入编程>一书. 我也处于

Delphi中取得系统支持的颜色数的方法

在自己的软件中经常需要得知运行本软件的系统支持的颜色数.例如有的软件在16Bits的颜色数的计算机上开发而成,程序的颜色调试得非常漂亮,但是到了一台只支持16色的计算机上,程序变得非常难看.这就需要得到系统的颜色数. Delphi中如何取得系统的颜色数呢?下面的程序就解决这个问题. function GetSysColorNum:Integer; Var ScreenDc:HDC; NumBitsPixel:Integer; begin Result:=0; ScreenDc:=GetDC(0)

Delphi中TApplication类的用法

在Delphi中TApplication是一个有着十分重要作用的类.TApplication类是用于描述Delphi编制的应用程序的一个类.通过对这个类的灵活应用可以编制许多有特点的程序.. 1) 检测当前Windows程序是否被激活: TApplication类有一个属性--Active,这个属性就可以描述当前运行的程序是否被激活,成为Windows的焦点.检 测的代码如下: If Application.Active=False then ShowMessage('当前窗口没有被激活');