基于Delphi的通用查询模块的设计与实现

合集下载

Delphi通用自定义数据查询

Delphi通用自定义数据查询
s := ‘学员证件号码,fcode,字符,学员准考证号,fexam,字符,缴款日期,fdate,日期,缴款金额,famount,数值‘;
iform.ListView1.Clear;
while trim(s) <> ‘‘ do
begin
myitem := iform.ListView1.Items.Add; //添加多个条件值必须复制本句
……
Delphi通用自定义数据查询(D6SQL2000),通用查询设计,有三个通用查询设计方案,可以通过自定义建立SQL查询语句完成用户需要的查询数据要求。调用示orm, iform);
//以下是将查询关键字添加到列表中,格式:关键字,数据库中字段名,类型(分字符、数值、日期),最后一个不要加豆号
s := ‘学员证件号码,fcode,字符,学员准考证号,fexam,字符,缴款日期,fdate,日期,缴款金额,famount,数值‘;
uses iunit; //还需要引用ComCtrls单元以供Tlistitem调用。
procedure TeForm.S1Click(Sender: TObject);
myitem.Caption := ‘ ‘; //空着
myitem.SubItems.Add(copy(s, 1, pos(‘,‘, s) - 1)); //条件值名称
s := copy(s, pos(‘,‘, s) + 1, length(s));
myitem.SubItems.Add(copy(s, 1, pos(‘,‘, s) - 1)); //条件值对应的数据库字段
var myitem: Tlistitem; i: integer; s: string;

基于Delphi语言开发图书索书号查询系统

基于Delphi语言开发图书索书号查询系统
进 行排 架 。 因此, 照清单 中所 提 供 的 书号 和 书名查 按
找 该 图 书并进 行 下 架是 不 行 的 。 唯一 的 办法 就 是首
个 简 易 的索 书 号查 询 系统 来 自动完 成 这个 繁 琐 且
重复 的操 作过 程 。可视化 编程 语 言 D l i. 开发 e h70在 p 数据 库 系统 方 面 具有 强 大 的优 势 .是 当前 主 流编 程
先 确 定这 些 图 书的 索 书号 ,然 后 ,按 照 索 书号 在 书 架 上 查 找相应 的 图书并 进 行 下 架 ,这 样 做才 是 比较
科学的。
开发 工具 之一 。故 文章 采用 De h70编 写程 序 来实 l i. p 现这 个工 作 。
目前 ,图 书馆 图书管 理 系 统采 用 的 是北 邮图 书 系统 ,该 系 统提 供 了的检 索 功 能 。 因此 ,图书 馆 尝
第2 4卷 第 ( ) 6期
21 0 2年 0 6月
农 业 书情 报 学 J u n l f ir ya dI fr t n S in e r utr o r a o ba n noma o c cs n Agi l e L r i e i c u
Vo . 4 1 ,N O 0 2 6

些 近期 采 购清 单 上 的 图书 需要 下 架 。这 些 采 购清
单 中 图书数 据包括 包号 、书号 、书名 、数量 、折扣 、 实 样 和 码 洋 ,以 E cl x e 文件 类 型 保存 。 图 书 馆 的 图
书是按 《 中图法 》 ( 五 版 )进 行 分类 ,按 索 书号 第
试 地 检 索 了几 条 记 录 。可 能 是 由于 网 络 不 太 稳 定 、

Delphi数据库的拼音检索(查询)方案

Delphi数据库的拼音检索(查询)方案

Delphi数据库的拼音检索(查询)方案Delphi数据库的拼音检索(查询)方案-汉字转换成拼音昨夜看到一篇文章,可以用Delphi将汉字->拼音,可是将拼音转换成汉字又该如何操作哪?我的数据库:通讯录软件缺少用拼音查找功能.结果,搞到12点还是无果!唉!中午找到输入拼音可以检索汉字,可是在数据库中怎样实现哪?2个小时,无果!今天实现:1.首先建立字库;2.检索:先从数据库读出所要查询字段所有记录,将其放入控件ListBox,再按照拼音检索需要的数据.实现是靠的迂回策略(读取数据库汉字->转换成拼音->依据拼音检索结果->实现数据库的拼音检索),没找到直接在数据库查询,然后显示结果的方法,希望高人指点一二。

下面附上Code:1.字库Code:{//汉字拼音码检索对应的拼音字母}function GetCharInd(zzchar:string):char;begincase WORD(zzchar[1]) shl 8+WORD(zzchar[2]) of$B0A1..$B0C4:result:='A';$B0C5..$B2C0:result:='B';$B2C1..$B4ED:result:='C';$B4EE..$B6E9:result:='D';$B6EA..$B7A1:result:='E';$B7A2..$B8C0:result:='F';$B8C1..$B9FD:result:='G';$B9FE..$BBF6:result:='H';$BBF7..$BFA5:result:='J';$BFA6..$C0AB:result:='K';$C0AC..$C2E7:result:='L';$C2E8..$C4C2:result:='M';$C4C3..$C5B5:result:='N';$C5B6..$C5BD:result:='O';$C5BE..$C6D9:result:='P';$C6DA..$C8BA:result:='Q';$C8BB..$C8F5:result:='R';$C8F6..$CBF9:result:='S';$CBFA..$CDD9:result:='T';$CDDA..$CEF3:result:='W';$CEF4..$D188:result:='X';$D1B9..$D4D0:result:='Y';$D4D1..$D7F9:result:='Z';elseresult:=#0;end;end;2.查询实现部分:{汉字拼音码的检索}function DisByStrInd(ListBoxStr:TListBox;StrInd:string):string; label NotFound;varzzchar :string;i,j:integer;beginfor i:=0 to ListBoxStr.Items.Count-1 dobeginfor j:=1 to Length(StrInd) dobeginzzchar:=ListBoxStr.Items[i][2*j-1]+ListBoxStr.Items[i][2*j];if (StrInd[j]<>'?') and (UpperCase(StrInd[j])<>GetCharInd(zzchar))then goto NotFound;end;if result='' then result:=ListBoxStr.Items[i]else result:=result+#13+ListBoxStr.Items[i];NotFound:end;end;以下是Delphi7中 Unit单元的完整代码:{************************************************************** ******}{ *1.名称: SelectByPinYin 单元.*2.功能:本单元为此数据库程序的通过汉字拼音查询单元.*3.软件环境:Win98+Delphi7+AccessXp2002.*4.作者:Domain.*5.E-mail:******************6.制作日期:2008.04.15 }{********************************************************************}unit SelectByPinYin;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, NEOFORM, ComCtrls, MenuBar, T oolWin, ExtCtrls, StdCtrls, DBCtrls,Buttons;typeTSelectPY = class(TEDairyForm)Panel1: TPanel;Panel2: TPanel;Panel3: TPanel;Panel4: TPanel;ListBox2: TListBox;Edit1: TEdit;Label1: TLabel;Label2: TLabel;BitBtn1: TBitBtn;BitBtn2: TBitBtn;ListBox1: TListBox;Label3: TLabel;procedure FormCreate(Sender: TObject);procedure Edit1Change(Sender: TObject);procedure ListBox2Click(Sender: TObject);procedure ListBox1Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varSelectPY: TSelectPY;getName:String;{函数在这里定义}function GetCharInd(zzchar:string):char;//汉字拼音码function DisByStrInd(ListBoxStr:TListBox;StrInd:string):string; implementationuses DataMain;{$R *.dfm}{//汉字拼音码检索对应的拼音字母}function GetCharInd(zzchar:string):char;begincase WORD(zzchar[1]) shl 8+WORD(zzchar[2]) of$B0A1..$B0C4:result:='A';$B0C5..$B2C0:result:='B';$B2C1..$B4ED:result:='C';$B4EE..$B6E9:result:='D';$B6EA..$B7A1:result:='E';$B7A2..$B8C0:result:='F';$B8C1..$B9FD:result:='G';$B9FE..$BBF6:result:='H';$BBF7..$BFA5:result:='J';$BFA6..$C0AB:result:='K';$C0AC..$C2E7:result:='L';$C2E8..$C4C2:result:='M';$C4C3..$C5B5:result:='N';$C5B6..$C5BD:result:='O';$C5BE..$C6D9:result:='P';$C6DA..$C8BA:result:='Q';$C8BB..$C8F5:result:='R';$C8F6..$CBF9:result:='S';$CBFA..$CDD9:result:='T';$CDDA..$CEF3:result:='W';$CEF4..$D188:result:='X';$D1B9..$D4D0:result:='Y';$D4D1..$D7F9:result:='Z';elseresult:=#0;end;end;{汉字拼音码的检索}function DisByStrInd(ListBoxStr:TListBox;StrInd:string):string;label NotFound;varzzchar :string;i,j:integer;beginfor i:=0 to ListBoxStr.Items.Count-1 dobeginfor j:=1 to Length(StrInd) dobeginzzchar:=ListBoxStr.Items[i][2*j-1]+ListBoxStr.Items[i][2*j];if (StrInd[j]<>'?') and (UpperCase(StrInd[j])<>GetCharInd(zzchar))then goto NotFound;end;if result='' then result:=ListBoxStr.Items[i]else result:=result+#13+ListBoxStr.Items[i];NotFound:end;end;{在 FormCreate 中,将联系人姓名加入 ListBox1}procedure TSelectPY.FormCreate(Sender: TObject);vari:integer;begininherited;with adodm.PersonName dobeginlistBox1.Clear;//用循环的方法加入for i:=0 to adodm.PersonName.RecordCount-1 dobeginself.ListBox1.Items.Add(adodm.PersonName.FieldByName('姓名').AsString);adodm.PersonName.Next;end;listBox1.Sorted:=true;adodm.PersonName.First;//DateSet指针指向第一条记录end;// edit1.SetFocus;end;//实现单击选择性名procedure TSelectPY.ListBox2Click(Sender: TObject);var xIndex:integer;begininherited;xIndex:=self.ListBox2.ItemIndex;//得到Item选项的Indexlabel3.Caption:=self.ListBox2.Items.Strings[xIndex];//从Index 得到 Text;getName:=self.ListBox2.Items.Strings[xIndex];end;{输入拼音查找汉字}procedure TSelectPY.Edit1Change(Sender: TObject);varSelStr:string;begininherited;SelStr:='';ListBox2.Items.Text:=DisByStrInd(listBox1,Edit1.Text);end;{单击选择}procedure TSelectPY.ListBox1Click(Sender: TObject);var nIndex:integer;begininherited;nIndex:=ListBox1.ItemIndex;ListBox2.Items.Text:=ListBox1.Items.Strings[nIndex];getName:=self.ListBox2.Items.Text;end;end.。

基于Delphi的通用查询模块的设计与实现

基于Delphi的通用查询模块的设计与实现

产生 s L Q 语句挂父膏 q一 用
查询字段 , 关系运算符 、 多条件之问 的逻辑关 系等。⑤查询操作
表 1 要 控 件 及 说 明 主
- 方 便易 用 。 询 模 块 与 其 它 模 块 间 的 调 用简 单 。 根 据 被查 询 字 22程 序 实 现 查 ⑥ 通 用 查 询 模 块 的 主 程 序 为 函 数 P biQ ey(aetoi u l ur PtnF r : c l l 段 , 自动 设 置 数 据 输 入 类 型 , 检 查 数 据 输 入 合 法性 。 能 并 1 . 2通用 查 询 模 块 界 面设 计 T om; a S tT a S t v r i e t s ig 。其 中参 数 P r t F r D t e D t e a l r r t n ) a : a ; FtS : r ae . n 根 据 需 求 描 述 , 面 设 计 尽 量 使 用 户 操 作 方 便 、 询 灵 活 。 F r 是 调用 通用 查 询 模 块 的 父 窗 E .参 数 D t e 是 查 询数 据 界 查 om 1 aa t S Fl rt 是根 据用 户查 询方 案 t 在 实际 运 用 中 , 条 件 查 询 的 查 询 条 件 超 过 6种 的 比较 少 , 以 集 ,为通 用查 询 模 块 提 供 数 据 源 , ieSr 多 所 我 们在 设 计 界 面 时保 留 6种 查 询 条 件 的 空 间 。 如果 超 过 6种 . 就 而 产 生 的 S L查 询语 句 , 为 返 回 值 。 Q 作 .. 要 添加 查 询 .查 询条 件 的 范 围可 以包 括 到整 个 数 据库 表 中 的所 22 1主 程 序 有 字段 。界 面 如 图 1 。 Stae a (ae tomN me / 置查 询 方 案 名 eC sN me rnF r .a ) / P ;设 Ii om:/ 体初 始 化 。 nt r / F 窗

基于Delphi通用查询技术的实现

基于Delphi通用查询技术的实现

所不 同, 有时还 需要保存这些频繁使 用的检索条件 。能够综合处理这 些情况而形成 的应用程序 则会具有 更加 强 大的生
命力 , 本文论述在 D lh 20 e i 0 7开发环境下的通用查询 功能的实现技术 。 p
关 键 词 : e h; 件 ;自定 义 ;多功 能 查 询 Dl i控 p 中图 分 类 号 :P l T3 1 文 献标 识码 : A d i 0 3 6/.s .0 62 7 .0 1 1 .2 o:1. 99 ji n 10 - 5 2 1 .20 8 s 4
杨 建平
( 江苏省江 阴中等专业学校, 苏 江 阴 24 3 ) 江 14 3 摘要 : 应用程序 功能设计 的过程 中, 在 通常需要设计数据记录查询 功能。一般来说 , 查询 因不同的数据 集而体现 不同的
检 索条件和不 同的结果集 ; 时即使有相 同的数据 集, 因应用需求、 有 但 地点或者时间的不 同, 其检 索条件和 结果 集也 会有

2 1 年第 1 0 1 2期
算Leabharlann 机 与现代 化 总第 16期 9
J U N IY I N A H A I A J U XA D IU S
文章编号 :0 62 7 (0 )209 -4 10 -45 2 1 1 - 90 1 0 -
基 于 D lh 通 用查 询 技 术 的实 现 e i p
R ai t n o nv ra Qu r eh oo yB sd o lh e l ai f iesl e yT c n lg ae nDe i z o U p
YANG Ja —ig in pn (iny pcazdScn a col o agu J nyn 14 3 C ia J gi Sei i eodr Shos f i s , i gi 2 4 3 , hn ) a n le y Jn a

一步步教你优化Delphi字串查找

一步步教你优化Delphi字串查找

一步步教你优化Delphi字串查找一步步教你优化Delphi字串查找本人在编写离线浏览器WebSeizer的过程中,用到大量字符串处理函数,这是很耗CPU的一个处理过程,为了编写出高效率的网页解析引擎,对优化代码作了一番研究。

1 、高精度的计时函数代码优化时需要用到精确的计时器。

常用的有GetTickCount函数,可以达到毫秒级的精度。

但还是很不够的,这时可以采用提高循环次数的办法。

另外,还有一个精度更高的定时——“高分辨率性能计数器”(high-resolution performance counter),它提供了两个API 函数,取得计数器频率的QueryPerformanceFrequency和取得计数器数值的QueryPerformanceCounter。

实现原理是利用计算机中的8253,8254可编程时间间隔定时器芯片实现的。

在计算机内部有三个独立的16位计数器。

计数器可以以二进制或二—十进制(BDC)计数。

计数器每秒产生1193180次脉冲,每次脉冲使计数器的数字减一,产生频率是可变的,用QueryPerformanceFrequency可以得到,一般情况下都是1193180。

QueryPerformance Counter可以得到当前的计数器值。

所以只要你的计算机够快,理论上精度可以达到1/1193180秒。

2 、代码优化实例下面以一个自定义的字符串函数的为例,说明代码优化过程。

Delphi提供的字符串函数里有一个Pos函数,它的定义是:function Pos(Substr: string; S: string): Integer;它的作用是在字符串S中查找字符串Substr,返回值是Substr在S中第一次出现的位置,如果没有找到,返回值为0。

在本人编写WebSeizer软件(天空软件站有下载)过程中,Pos 已经不能满足要求。

一方面:在处理网页中的字符串时,要求对大小写不敏感,即< h t m l > 和<HTML>代表的含义完全一样。

基于Delphi7的通用数据查询模块设计与实现

基于Delphi7的通用数据查询模块设计与实现
I p e e t to m lm n a in
SHIFe g n
( i i gP bi S cryB re ee s op fr t nC ne , rmq 30 1 X n a u l eui odr fneC rs nomai etr U u i8 0 0 ) jn c t D I o
了程序 的代 码量 ,降低 了软件 开发和维 护成本 ,提高 了软件
开发效率 ,而 开发 出的软件也十分灵活和高效 。
2 开发环 境选 择
D lh 是 B r n 司强力 推出的基于 Widw 视窗 的可 e i p o ad公 l no s
视化 编程环境 ,它采 用了弹性可复用 的面向对象 编程语言 ,可 在短时间内快速开发出功能强大的数据库应用程序 ,被业界赞
N L UL N L UL
字 段中文名 字 段名
V q s i g C sr ti r a s lt n , S t:srng; r
— —
ds anm c a i l a e hr py
Fedye i t l p sx f x c a hr c a h r
N L UL
e t xi; e d; n
ADOp b cF r t u l . is; e d n;
表 1数 据 表 结构
列名
i d
tbe a a lnme
e d n ;
333 写通 用查询 窗体 “ .-编 开始查询”按钮单击事件
数据类型
mt
c a hr
可否为空
说明
用户单击 “ 开始查询”按钮 ,当输入 的查询 条件正确 时 , 通用查 询模 块根据查 询条件 自动在数 据表 中进行 检索 ,并将 符合条 件 的数 据记 录放在控件 “ B r E ”中进行 显示 ,核 D Gi h d

Delphi中进行复杂查询的通用方法

Delphi中进行复杂查询的通用方法

if Val <>'<所有>' then
SQL.Add(Format('%s = ''%s''',[FieldName,Val]));
end;
对于日期型字段,
procedure GetSql(SQL:TStrings;FieldName:String;dFrom,dTo:TDateTime);
begin
if Conditions.Count=0 then Exit;
temp:=TStringList.Create;
temp.AddStrings(Conditions);
temp[0]:='WHERE '+temp[0];
for i:=1 to temp.Count-1 do
procedure TDM.InitComboBox(FieldName, TableName: String; Cb: TComboBox);
var
Qry:TQuery;
begin
Qry:=TQuery.Create(self); //动态创建Query
Qry.DatabaseName:=Database1.DatabaseName;
三、 小结
通过以上一些步骤,就可以完成复杂的查询工作。其中关键函数,InitComboBox、RefreshQuery、DelConditions、AddConditions、GetFieldName、AddOrder可以放在DataModule中供所有数据库窗体共享,而且对所有不同的数据库的查询来说是通用的,可以在不同的数据库系统中复制,不用修改。而GetSql重载函数可能根据不同的数据库系统有细微的差别。
while not Qry.Eof do
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于Delphi的通用查询模块的设计与实现周飞1,胡众义2(1.温州大学现代教育中心浙江温州3250002.温州大学计算机科学与工程学院浙江温州325000)【摘要】:本文提供了基于Delphi下的通用查询模块,给出了其设计原理及实现的主要技术。

该模块操作简单,用户可自定义查询,调用方便,并在多个MIS中得到有效的应用。

【关键词】:通用;查询;面向对象开发环境0.前言目前管理信息系统中一个很重要的功能是查询。

查询模块的设计是整个系统设计的关键。

在以往的开发中,大多采用将查询静态地封装在系统内部,当查询需求发生变动时,对系统进行修改维护,然而用户对查询的需求往往是不断变化的,频繁的需求变动势必造成频繁地修改系统,使得维护的工作量及成本大大增加,因此设计开发支持用户自定义查询功能的通用查询模块,不仅能缩短系统的开发周期,而且易于维护。

本文使用Del-phi设计,针对用户的需求,设计一个操作方便、查询高效的通用查询模块。

1.通用查询模块设计本模块的设计思想是根据用户自定义的各种查询条件,产生相应的SQL语句供其它模块调用。

1.1需求描述①用户可自定义查询,选择数据库表中的任一字段作为查询字段。

②用户可任意的组合查询字段进行多条件查询。

③可按任一选定的字段进行排序。

④查询方案能保存,供下次查询使用,并且能进行修改、删除等操作。

查询方案包括:查询方案名、查询字段,关系运算符、多条件之间的逻辑关系等。

⑤查询操作方便易用,查询模块与其它模块间的调用简单。

⑥根据被查询字段,能自动设置数据输入类型,并检查数据输入合法性。

1.2通用查询模块界面设计根据需求描述,界面设计尽量使用户操作方便、查询灵活。

在实际运用中,多条件查询的查询条件超过6种的比较少,所以我们在设计界面时保留6种查询条件的空间。

如果超过6种,就要添加查询,查询条件的范围可以包括到整个数据库表中的所有字段。

界面如图1。

图1查询模块界面界面说明如下:①【方案】:此次查询方案以XML(可以扩展的标记语言)存储。

②【另存为】:保存此次查询方案,供下次查询使用。

③【删除】:删除被选择的查询方案。

④【添加查询】:当查询条件超过6种时,增加查询条件。

⑤【关系】:多种查询条件之间的逻辑关系,包括"且"、"或"等逻辑运算符。

⑥【字段】:查询字段,数据表中的所有字段都可以作为查询字段。

⑦【比较】:查询字段与用户输入的数值之间的关系。

⑧【数值】:用户根据查询字段而输入的查询内容。

⑨【确定】:根据用户自定义的查询方案产生并返回SQL语句,供其它模块调用。

⑩【排序字段】:选择查询中的某一字段进行排序。

⑾【清除所有】:清空被选中的查询方案。

2.通用查询模块实现把查询字段名转换为数据库中对应的字段名,比较运算符、逻辑运算符转换为SQL中的相应符号,设置数据输入类型,数据输入合法性的检查等是实现本模块的主要技术。

2.1主要控件及说明本模块中使用的主要控件及说明见表1表1主要控件及说明2.2程序实现通用查询模块的主程序为函数PublicQuery(ParentForm:TForm;DataSet:TDataSet;varFilterStr:string)。

其中参数Parent-Form是调用通用查询模块的父窗口,参数DataSet是查询数据集,为通用查询模块提供数据源,FilterStr是根据用户查询方案而产生的SQL查询语句,作为返回值。

2.2.1主程序SetCaseName(ParentForm.Name);//设置查询方案名。

InitForm;//窗体初始化。

CreateFieldDateSet(DataSet);//创建字段数据集。

GetFilterStr;//产生SQL语句。

2.2.2窗体初始化AddRelationList();//添加逻辑运算符。

AddCompareList();//添加关系运算符。

RelationComboBox1.KeyValue:='and';ReadQueryCase;////读取方案。

……//将关系、字段、比较的下拉框存到数组中。

2.2.3设置输入类型当用户选择不同的查询字段,根据查询字段的数据类型自动设置数据输入类型。

输入的数据类型有数字、字母、时间等等。

比如当查询字段为数字型,则要禁止字母等其他数据类型的输入。

通过过程SetInputType(FieldComboBox:TDBLookupCom-boBox;varKey:Char;Text:string)来实现。

关键代码如下:FieldCDS.Locate('FieldName',FieldComboBox.KeyValue,[]);//取查询字段名caseTFieldType(FieldCDS.FieldByName('FieldType').Value)offtDate,ftTime,ftDateTime://时间ifnot(Keyin['0'..'9','.','-',':','',#13,#10,#8])thenKey:=#0;ftSmallint,ftInteger,ftWord://整数ifnot(Keyin['0'..'9',#13,#10,#8])thenKey:=#0;ftFloat,ftCurrency,ftBCD://实数if(Pos('.',Text)<=0)thenifnot(Keyin['0'..'9','.',#13,#10,#8])thenKey:=#0(下转第157页)(上接第151页)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!elseifnot(Keyin['0'..'9',#13,#10,#8])thenKey:=#0;end;2.2.4检查输入合法性用户输入查询内容时,程序要自动检测输入的合法性,使用函数CheckInputData(FieldComboBox:TDBLookupComboBox;Text:string)来实现。

关键代码如下:FieldCDS.Locate('FieldName',FieldComboBox.KeyValue,[]);caseTFieldType(FieldCDS.FieldByName('FieldType').Value)offtDate,ftTime,ftDateTime://时间tryDateTimeResult:=StrToDateTime(Text);exceptResult:=False;MessageDlg('日期或时间格式不对',mtWarning,[mbOk],0);end;end;2.2.5根据用户自定义的查询方案产生SQL语句首先把查询方案进行分解,如果是多条件查询,先把第一项查询转换为SQL语句,然后用同样的方法把其他几项查询逐个的转换成SQL语句,最后把所有的SQL语句加起来。

本模块使用函数AFilter(RelationComboBox,CompareComboBox,FieldCom-boBox:TDBLookupComboBox)获取一项查询。

参数说明见表1。

主要代码如下:ifFieldCDS.Locate('FieldName',FieldComboBox.KeyValue,[])thencaseTFieldType(FieldCDS.FieldByName('FieldType').Value)offtString,ftWideString,ftMemo://字符串或备注型ifCompareComboBox.KeyValue='like'thenValue:=QuotedStr('%'+ValueEdit.Text+'%')elseValue:=QuotedStr(Val-ueEdit.Text);ftSmallint..ftBCD,ftBytes..ftAutoInc:Value:=ValueEdit.Text;ftDate,ftTime,ftDateTime:Value:=QuotedStr(ValueEdit.Text);end;Result:=RelationComboBox.KeyValue+''+FieldComboBox.KeyValue+''+CompareComboBox.KeyValue+''+Value+'';代码说明:取查询字段,判断其数据类型。

如果是字符串或备注型并且比较运算符等于"相似"则在输入数值前后加上符号"%",否则直接取值。

如果是数字型,直接取值。

如果是日期时间型则在输入数值前后加上引号。

最后把逻辑运算符、查询字段、比较运算符和数值相加作为返回值,即得SQL语句。

2.3模块的调用此通用查询模块调用简单。

父窗口ParentForm可以通过函数PublicQuery(ParentForm,QueryDataSet,FilterStr)来调用查询模块。

参数说明见主程序。

3.结束语本文通过MIS中用户动态查询需求进行分析,设计并实现了支持用户自定义查询功能的通用查询模快。

该模块在温州多家药品流通企业的MIS中得到使用,能很好地满足系统运行期间用户提出的新查询需求的要求,避免了因需求变动对原系统频繁修改而造成的系列问题,提高了系统的开放性和健壮性。

参考文献:1.胡和平,等通用数据库查询系统研究与实现[J],计算机工程与应用,1998.5:3-42.王瑞霞,等基于复用的动态查询构件系统的设计与实现[J],计算机应用研究,2006.1:144-1463.周新会,等Delphi数据库通用模块及典型系统开发实例导航[M],北京:人民邮电出版社,2006式,通过HTTP或HTTPS协议直接访问。

HTTP协议采用了请求/响应模型。

一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

(2)封装协议本系统所提供的接口都是使用WebService、XML技术组织及实现的。

DataExchange客户端与DataExchange服务端、各应用系统与DataExchange客户端都是通过WebService实现消息交换和功能调用接口。

以WebService为基础的接口设计是基于SOAP的接口设计。

SOAP(SimpleObjectAccessProtocol)简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议,它包括四个部分:SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(encodingrules),用于表示应用程序需要使用的数据类型的实例;SOAPRPC表示(RPCrepresentation),表示远程过程调用和应答的协定;SOAP绑定(binding),使用底层协议交换信息。

相关文档
最新文档