说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何做万能查询

编辑:说三道四文库 发布时间:2017-08-18 05:44
HTML文档下载 WORD文档下载 PDF文档下载
如何做万能查询?
请问各位数据库设计高手的一些数据库查询的设计问题,

一:你们所做的数据库的复杂查询是怎样做的?(能够实现数据的交,并,补等功能)

二:又是如何在英文字段名与中文显示方式之间功换的。(字段少还好解决,但如果字段多到五,六十个那就不可想象)。

三:假如我要做出这样的一种效果:
    Select * from datapb where pbnx ='总库' and (pbzwdm like '%A1' or pbzwdm like '%A2%' or pbzwdm like '%H5%') AND (pbuw not like '%ewc%' or pbuw not like '%ewa%') 
   当然,如果我们是程序设计或数据管理员,这样的问题很好解决,但对一个一点也不懂SQL的用户来说,他们操作的是一些“中文字段名”如,上面的pbzwdm对应于中文名“职位代码”,那么我们是怎样将用户的“代码”翻译成SQL语句来传送给数据库服务器呢?

四:有哪位老兄有这方面的较为理想的 BCB 查询代码。可否奉献出来,认老弟参考参考。
    ib6@163.com
up
拜托,给个招
很感兴趣的问题,高手请了!
写一翻译器
这个问题问得好
我准备写一个这样的类或者组件
确实是很有用的东西
我现在暂时是根据用户输入一个个的判断,然后自己组合合适的sql查询字符串
我有做过,是用ACCESS, 用临时表,效率还不错。(BTW, Access对复杂查询其慢无比)。

不过我的情况都是
Condition1 and Condition2 and Condition3 ...

所以只需取出满足条件一的(到一个临时表), 在从中删除满足条件2的,等等。

这样可以避免SQL 串过长, 而且执行效率相当高。
 
交,并,补?
太复杂。
ALNG不方法对于桌面数据库还可行。
但对于C/S或更复杂的系统则不可取。
还是写翻译器,如当用户在执行查询时用 LIKE ‘%查询内容%’代替“包括”,用"="代替"等于"。用"and"代替“并且",用“not”代替"非"
等等,
好象在用 like "%查询内容%" 代替 "包括" 时有一定的难度,你还的判断用户的 "包括" 后跟随的第几个字符的开始用"%"和什么时候用"%"结尾。谁来做一下?
翻译成SQL根本不是难题, 但是条件太多很容易使SQL过长,即使对于大型数据库复杂的查询也不定快。 如果我做我会一次组织3-5个条件, 分次处理。 
写解释器是必要的
先要确定显示界面,用表格形式吧,这样比较方便又直观
我也在考虑这个这个东东,搞好了给我一个哦txf99@21cn.com
TO:ALNG
我总觉得你上面的方法有些欠妥,还有没有好的方案,最好有实例,
我一时也想不出什么办法了。
123
我到是做过所谓的万能查询,但是这个查询也是有一定的局限性,和数据库的关系太大了。

我觉得关键是如何构建SQL语句,如何将用户的意图转换成为合理的SQL语句。然后再如何将查询到的东西转换成为符合用户的规则的结果,并且将结果显示给用户看。

我写的代码和数据库的关系太大了,一两句话也说不清楚。
come on
Wingsun(孙春阳)
没关系,本来就是做数据库查询,当然关系大了
说说你思路吧!
首先我想明确一下这所谓的万能查询是否是指复合查询?

至于什么翻译器的东西对我来说就太复杂了,
像xxyyzz(做一天和尚撞一天钟)所要实现的效果,用户总不可能是这样写查询条件的吧:“我要查的记录既符合条件1又符合条件2但不符合条件3”?

是不是可以考虑放两个Edit 或什么其它控件来实现这符合和不符合的分类,然后在每个Edit 里用,或;来区分条件有几个。( 这还不太友好,反正就是这个意思:“科技以人为本”,呵~~一定要让用户用起来顺手)再在SQL语句里来添加或删除条件呢?(这首先有了友好的用户界面,对用户来说就没有困难了,剩下的难题就留给开发人员啦~~)

基于web的数据库编程我也不太了解,
但是我手头上刚好有一小段对于几个字段的复合查询的代码,(虽然与你的一个字段下有几个限制的做法不同)我还是决定把它拿出来,看看你合不合用?

 AnsiString sCondition1,sCondition2,sCondition3,sCondition4……
   bool bHasOneCondition=false; //用于指示是否具有一个查询条件,以便决定是否用“and”连接其他条件
   sCondition1=Trim(EditCondition1->Text);//
   sCondition2=Trim(EditCondition2->Text);
   sCondition3=Trim(EditCondition3->Text);
……
  
   Query1->Close();
   Query1->SQL->Clear();
   Query1->SQL->Add("select * from database");
  
 //将条件1作为查询条件(完全匹配)
   if (sCondition1!="")
   {
        if (bHasOneCondition)
            Query1->SQL->Add("and (datafield1=:datafield1)");
        else
        {   Query1->SQL->Add("where (datafield1=:datafield1)");
            bHasOneCondition=true;
        }
        Query1->ParamByName("datafield1")->AsString=sCondition1;
   }
   
 //将条件2作为查询条件(模糊查询)
   if (sCondition2!="")
  {
   if (bHasOneCondition)
            Query1->SQL->Add("and (datafield2 like :datafield2)");
        else
        {   Query1->SQL->Add("where (datafield2 like :datafield2)");
            bHasOneCondition=true;
        }
        Query1->ParamByName("datafield2")->AsString="%"+sCondition2+"%";
   }

//……其它条件依此类推

    Query1->Prepare();
    Query1->Open();
    if (Query1->IsEmpty())
        ShowMessage("没有符合条件的记录,请改变查询条件继续查询");

当然,如果你要把你几十个字段都做一个这样的查询那我觉得太不可思议了,
也想不到有哪一类数据库有这种必要?请赐教。

 
怎么,解决了?

那可要告诉我啊:)
我也正在考虑这样的问题,目前的思路是做导航,多多交流。
flyjac(小牙)的方法按提问者的思路只能实现其中的一种,要么永远是“并且”,要么永远是“或者”,或按逻辑顺序从头到尾一直下去,当操作者想在连续三五个"and"(作为一组)后再连续三五个“or"(作为一组)再再连续三五个“and"(也作为一组,并且其中还含有“not”等)此时你如何是好?就拿其中一个小问题吧,你的"("或")"都无法定位。更别说实现再复杂一点的查询了。
>>wudang(武当闲庭客)
>> 我也正在考虑这样的问题,目前的思路是做导航,多多交流。 
wudang(武当闲庭客)的思路比较接近正轨,但也存在问题,如果用户筛选条件比较多时,用户的条件“就要”筛选完成时,突然发觉条件错了,想修改。回头再来?当然我这种方法比较偏急,
我觉得应该是可以做得出来的,你完全可以根据用户的需要来构建这个SQL语句,如果用户喜欢的话,他可以随意定义这些条件之间的关系,这样用户得到了充分的灵活性,但操作却麻烦了。
请容许我整理以下我的内容,然后再给一个详细的说明。
呵呵,Wingsun(孙春阳) 说的是对的。
重要的是逻辑整合,对用户来说操作可能有点难,然而却是很灵活的,我写过一段程序,(现在没有,我在外面),那时帮别人做的通用查询。有兴趣吗?明天贴上来,不过是Delphi的。
看来我要说两句了,做万能查询不应太过求全,程序员总想把功能做的完美无缺,但有些功能并用户也许一辈子也用不到,我见过别人做的万能查询,功能真的很强,它可以写出这样的表达式:
a and ((b or c) and d)...,但中间的‘(‘很显然无法自动生成,需要用户自己点取左右括号,这样对用户来说不是简化了, 而是复杂化了,更迷惑,实际上用户用得最多的是a and b and c...这样的查询,由于我在开发一个mis系统,为了简化用户查询,自己做了一个通用查询的类来实现,由于涉及公司机密,源码不再公开,我仅讲一下它的实现方法:
一、定义结构
struct Field_Name
{
char fieldName[50];//字段名
char Displayname[50];//显示给用户的名字
int datatype;//字段数据类型
};

这样用户看到的是displayname,而构造sql描述时,使用fieldname


二、程序中对该结构作如下初始化
Field_Name a[n]={{"name","姓名",1},{"sex","性别",1},{"age","年龄",2}...};

char b[m][4]={"<","=",">","<="...}
char c[m][12]={"小于","等于","大于"...}

界面上放两个Combobox,第一个填充a[i].Displayname,第二个填充c[j]
再放一个Edit用与输入条件值,在放一个添加条件的按钮,

这样就可如下处理:
根据第一个COmbobox的index取出a[i].fieldName,在取出b[j],具体实现如下所试,
TStringList *a1,*a2;

ansistring str1,str2;
str1=ansistirng(a[i].fieldname)+AnsiStirng(b[j]);
str2=ansistirng(a[i].diaplay)+AnsiStirng(c[j])+Edit->Text

switch(a[i].datatype)
    {
     switch 1:
         str1+="'"+Edit->text+"'"
         break;
     .....
     }
if(a1->CountNum==0)
    {
    a1->add(str1);
    a2->add(str1)
    }
else
    {
    a1->Add("and "+str1);
    a2->add(" and"+str2);
    }

a2直接送到一个Listbox中显示给用户,
Listbox1->Items=a2;

用TStringList处理的好处时,可以删除中间某条条件,也即用户可以用鼠标点击ListBox选中某条件,并将其删除,a1->delete(n) a2->Delete(n)即可,
当用户完成后,将a1各个条件相加即可
以上的处理过程可做在类中

打字真累,以后再讲吧,我还要休息呢
我的文档带来了,不幸的是我现在的机子上没有word.
有人愿意看一下吗?
如果需要,请留下email,:)
我会发过来
三颗u!  qiangming@263.net
gengxp@elong.com
给我一份,gengxp@elong.com
谢谢,我也想学学
adua@263.net
上面的几位朋友:已发,请查看
上面的几位朋友:已发,请查看
不好意思,你的文档打开为乱码!
WORD2000
已重发,再打不开,可没办法了
打开了告诉我一下
非常感谢!
已能正常打开!
俺你都不发一个?
ib6@163.com
给我一份吧?yu.hermit@sian.com
呵呵,已发
请给我一份三19883010407@sina.com
请给我一份horky@163.net
我也想看看
3hsoft@china.com
me too!
iceblue007@263.net
现在好象大家都在等着要代码。
做复杂查询,随用户要求生成相应SQL语句,我觉得并不难(自大了),关键是做出一界面,来隐藏查询复杂性
将问题再提前一下。
我用ASP和Delphi实现过,没有用C++Builder(当然也不是什么问题^^),就用了一个处理函数很简单,想不想看看??hehe^^ myQQ :3888543
flyjac(小牙) :我现在就在做一个类似的查询,共60个条件!!!用户要求的,我没办法,只好if ..if ....
我有一个万能查询的控件。
万能查询?太难了。程序员应该做出一些常规SQL。对于用户的临时查询,可以考虑教教他们SQL基础知识,由用户自己写吧!
《瞬间之美》作者Robert Hoekman Jr:如何成长为UX领袖人物? TIOBE 2015年6月编程语言排行榜:Swift份额上升,Objective-C成自由落体 【CTO讲堂】Box首位华人核心工程师的回国创业之路 【探秘ES6】系列专栏:ES6简介 专访《Javascript设计模式与开发实践》作者曾探:爱编程 爱生活 【探秘ES6】系列专栏:迭代器和for-of循环 【CTO讲堂】UCloud联合创始人兼CTO莫显峰:如何成长为技术合伙人? 【探秘ES6】系列专栏:生成器 iKair转型传感器及SaaS厂商,发布Maxense平台与9款“云传感器” 免费jQuery幻灯片图片轮播插件Galleriffic的使用方法 专访IBM中国研究院院长沈晓卫博士:全新的物联网来了 《近匠》GYENNO CEO任康:用“勺子”敲开一片新市场 Horde3D——基于C++编写的3D渲染引擎 Maker Faire 2015在深圳正式开幕,关注创客生态系统 Arduino与Seeed Studio达成战略合作——专访Arduino联合创始人Massimo Banzi 免费开源的Bootstrap富文本编辑器bootstrap-wysiwyg使用方法 CCAI2015:首届中国人工智能大会将于7月26-27日在京举行 拥抱互联网+ 用友NC6助力集团企业蜕变数据驱动型公司 《近匠》融云,自主研发真正“不丢消息”的IM云服务 【CTO讲堂】听云CTO Wood:APM实现原理及对IT和产品运营的价值 从7个维度浅析虚拟现实Alpha年 Maker Faire上的微软:将技术与工具带给Maker才是关键 友盟2015年Q1移动互联网报告:车联网App崛起 多面编程语言Scala NEC高可用集群软件EXPRESSCLUSTER X3.3面向中国市场正式发布 【探秘ES6】系列专栏:模版字符串 专访图书作者祁宇:C++11让程序更简洁、更现代、更强大 滴滴打车CTO张博:生死战役,技术和时间赛跑 Qualcomm拥抱创客文化:如何基于DragonBoard 410c创造和创业? 【探秘ES6】系列专栏:剩余参数和默认参数 专访资深程序员庄晓立:我为什么要选择Rust? 在linux下安装应用程序 关于串口的疑难问题 怎么连接数据库啊 请问如何用setfilter检索日期型数据 谁熟悉mpeg4 Audio? 怎么实现在界面上画网络拓补图!!!??? 一个关于企业上网的问题--高分求教 请问各位大哥如何屏蔽掉不想让此IP访问特定的网页? 厦门地区等待程序员办证通知的朋友,谁先知道具体时间请公布! 我调用数据库中的数据时候出现问题了 菜鸟提问! 串口问题 高分求两个文件:分别为tlbimp.exe和excel.dll 50分一个 串口问题 有谁知道HSV和RGB两种颜色模式的转换公式? 关于照片显示,请大家讨论 请教:关于表格的滚动问题 一个关于企业上网的问题--高分求教 数据类型转换问题 有了解“广州南方电信系统软件有限公司”的哥们么,了解一下情况。 有谁知道HSV和RGB两种颜色模式的转换公式? VB中的坐标问题 求SQL*PLUS帮助文件 有谁知道浙大中控软件公司的? 服务器能上sina or sohu的免费邮件而客户机却不能 大家来讨论一下 用VC编程序能否访问internet上的Access数据库吗?UP有分!! 请问如何在VC中获取CPU温度、CPU速度以及风扇转速? 如何在网页里加上代码 来实现网页打印功能?????? 为什么我安装的Apache不能用! 请问,用java可以侦听游戏遥杆的信号吗?该怎样做? 厦门地区等待程序员办证通知的朋友,谁先知道具体时间请公布! AutoTickets Sample 初始版 十万火急:请问在数据库中的一个字段如何放入*.doc的WORD文档?? PrintGrid 注册码 装linux之前的问题 pb8中如何打开pb7的pbl文件 那里可以下载JDK 怎样取得精确到毫秒的系统时间? 朱镕基报告录音 请问哪里有DirectX的SDK下载? 蓝屏,没有办法恢复,帮我恢复2000系统。 各位大侠都是高手,请给小弟指点一下,学完c学什么?拜托了 :) 请教个小问题?谢谢! 看别人的原码 关于数据库记录锁定的问题? 高手,旧命呀, 我的论坛刚刚开通,欢迎光临 60分請教,怎樣保存對DataGrid數據的修改? ****怎样删除word段首空格**** 使用WebLogic数据源的问题,请大侠帮忙 13岁1米65算高吗 两个物体间的电势差如何判断正负如图是三套不同的均匀金属球,将他们靠拢,则:图1中左球到右球的电势差是 _______ (大于零/小于零)的;图2中左球到右球的电势差是 _______ (大于零/小于 左边的手机是的手机水滴不能汇聚,右边的手机的水滴是可以聚成水滴,那个是原装的屏幕 怎样证明敲击桌子发声时在振动 菜鸟送分问题.怎么判断电压正负.有图.假如测的AB两端电位,A点+10V,B点+5V.求UAB是多少,UBA是多少?UAB叫做A点到B点的电压,还是叫做A点到B点的电压.UAB=VB-VA,即电压UAB等于B点电位减A点电位, 英法都是通过资产阶级的方式建立了资本主义制度谈谈两国革命的异同点 才1米59 有可能1米75吗? 新手菜鸟提问,怎么判断电压UAB正负.假如测的AB两端电位,A点+10V,B点+5V.求UAB是多少,UBA是多少?UAB叫做A点到B点的电压,还是叫做A点到B点的电压.UAB=VB-VA,即电压UAB等于B点电位减A点电位, 古时候,在某个王国里有一位聪明的大臣,他发明了国际象棋,献给了国王······古时候,在某位王国里有一位聪明的大臣,他发明了国际象棋,献给了国王,国王从此迷上了下棋,为了表示感谢,国 证明敲桌子发生时振动 我想问一下这串珠子是什么材质的? 用 java 循环语句编写 最好能将具体的分析也写在来!15.宰相的麦子:相传古印度宰相达依尔,是国际象棋的发明者.有一次,国王因为他的贡献要奖励他,问他想要什么.达依尔说:“只要在国际象 敲桌子时,怎能证明桌子在振动呢? 正负电压转换想做一个正负可调双路数控电压源,现可以输出两路+2v~+12v电压,问下用什么电路或芯片能实现把其中一路转换为负,电压的绝对值不变 太阳比月亮大多少?没有办法知道的? 怎样证明桌子在振动?同上 song of storm and fire的小提琴版本 以前在一个电视节目里听过 忘记是什么节目了 不过真的很好听啊 请不要给我一些普通版本的a song of storm and fire 只求全部都是小提琴演奏的那个版本 印度国王奖赏国际象棋发明者的故事给了我们什么启示 现在是下学期了,物理课越听越头痛,根本不知道老师在讲什么.都不懂怎么学.我是女生,高二是报定理科的,目标是理科尖子班,但是我现在瘸腿了,化学、生物学的都很不错,但是物理差的太厉害 A song of storm and fire的声谱?分低声部和高声部的! 太阳大还月亮大,为什么 氨水与SO2反应是不是氧化还原,氯水呢? 图为四缸发动机工作原理:内燃机通过连杆把四个汽缸的活塞连在一根曲轴上,并使各汽缸的做功过程错开,在飞轮转动的每半周里,都有一个汽缸在做功,其他三个汽缸分别在做吸气、压缩和排 古时候,某个王国有一位聪明的大臣,他发明了国际象棋,并献给了国王,国王从此就迷上了下棋,为古时候,某个王国有一位聪明的大臣,他发明了国际象棋,并献给了国王,国王从此就迷上了下棋,为 太仓哪里学英语比较好?韦博跟韵林那个好? 为什么资本主义革命最先在欧洲大西洋岸爆发 棋盘上的学问:古时候,在某个王国有一位聪明的大臣,他发明了国际象棋,献给了国王,国王从此迷上了下棋.为了对聪明的大臣表示感谢,国王答应满足这个大臣的一个要求.大臣说:“就在这个 请问下各位童鞋,太仓的洪恩学英语让我过去面试,就是教小孩子英语,请问这个工作好吗,福利怎么样急的,我以前没教过,但是他们说没关系,我怕是骗人的 英法资产阶级革命为什么属于欧洲范围内的革命 谁学过新东方新概念英语二?适合多大的人群呢? 想在太仓学个商务英语,英博 轩泽 韵琳 韦博 哪个比较好一点? 中国历史上智力最低的皇帝是哪位? 小学语文词语搭配()的烟火 ()的礼炮 ( )的金水桥 ( )的城楼 陶侃惜谷中表现了他的什么政治主张 当可逆反应改变除温度之外的其他条件 重新建立平衡 K为什么不变比如改变反应物或生成物浓度,平衡向正或逆方向移动后重新建立平衡,此时反应物的转化率改变了,K为什么不变. 填空 ( )的中国龙 “看到动人的爱情故事我还是会流泪”的英文翻译 万历首辅张居正与皇帝是如何分割政治权利的?明代创立的内阁制与之前的丞相制有什么不同?如题.还有一个麻烦也帮帮我吧:军机处是如何行使权力的?君主专制的过分强化带来了哪些弊端? 情感帝和智商帝进留言时间: 2009年08月30日 19点43分 你自己说的话要数,我把你当成最朋友啊 留言时间: 2009年08月30日 19点44分 一切的选择在于你自己 男女关系.后来女的放弃,重新找了个 当经济形势需要实行扩张性财政政策时,为什么公债管理的操作方法是调低公债利率水平? “我把像鸡蛋一样大的石头扔进水里”是不是比喻句 据说只有智商高的内涵帝才能解出这道题小芳:“你妹啊,老娘这月大姨妈还没来,愁死姐了,简直就是坑爹!” 提问:短文中谁很着急?A.:小芳她妹妹 B:小芳她老娘C:小芳她姐姐D:小芳她爹 2010-2011初一数学期末第六题探究与思考答案急……………… could you please...是表示请示的祈使句吗the landlady asked,"could you please turn down your radio?"改为间接引语是the landlady asked me to turn down my radio.直接引语变间接引语时,如果是祈使句要在动词原形前加to, 雅典民主政治创造了议会制具体指什么?是公民大会?还是其他的? 第一题 can you open the door for me?yes,of course.为什么要用can不可以用may的吗?第二题 can i ask you some questions?of course.为什么要用some?不是肯定句才能用some 而疑问和否定句才用any的吗?第三题 in a way ele 世界著名水处理公司有哪些? 第七题的话 KSB核电泵好不好?应用在哪些范围内? 世界三大水处理公司的名称拥有电除盐模堆(EDI)生产技术的世界型公司,就知名度而言前几位是那些企业.请业内人士指教. 概括17、18世纪欧美地区阻碍资本主义发展的因素有哪些?阻碍因素不同导致美国与英、法两国的革命目标有何区别? 英语.资,本主义,资,本主义国家 全球著名的水处理公司有哪些? 内阁制是谁创建的,为什么 电势差正负的判定若说求U(AB)那是 电势A减电势B还是 电势B减电势A 有一些物体虽然在振动但听不到声音有那些原因A发声频率不在人的听觉范围内.B发出声音响度太小了C没有传声的介质 D三种都有可能 7题对么 不对的话是什么 为什么 德国凯士比KSB阀门 (巴莎阀业) 有一个振动的物体发出了声音,而我们却听不到这个声音,可能的情况是:1.( )2.( )3.( )快点! 第7题哦, 朝鲜表态强化核力量 美韩揣测朝“核冒国考报名昨天截止 浙江最热门职位33日本媒体爆料杭州绿城主帅冈田武史将离临安破获特大涉毒涉枪案 缴获整枪43温州:成绩将非评价学校教育质量唯一标最高院公开失信者名单 查谁是老赖浙江院士揭露伪大师治病行骗:治疗效果系心商合杭高铁拿到准生证 安吉将结束不通杭州地铁3号线为啥比原先的规划短了十已婚男连续胸袭女同事遭解雇 自称“没国考报名结束平均70人争1个岗位 湖美国情报机构被爆监听35名国际政要电杭州推新能源交通 新能源车:年底再推美油轮在尼日利亚遇袭 两人被海盗劫为美国肯尼迪家族亲戚杀人案将重审 72男子路边停车酿惨剧 车上天窗夹死3岁国考报名昨结束 湖州邮政一个岗位33韩美官员会谈 争取明年上半年确定作战金正恩成马来西亚高校荣誉博士 为表彰法国与德国希望年底前就美国监听与美进北京:病人家属嫌120要价高 将急救印度历史教科书遭嘲笑:称二战日本向美大马侨领:砂州缺华裔代议士 华小课题澳洲新州降低投资要求 争夺中国投资移法国工程师之死和利比亚乱局学习贯彻习近平总书记在中央全面深化改上海网友捎话两会:灰霾染黑了鼻子王岐山赞《星星》引韩媒高度关注总理三提邮政业 邮政局长的喜和愁陕西首次使用远程视频提讯系统审理案件\"风水官员\"怎能\"当好人民公仆楼继伟:将清理区域税收优惠中国文化,世界因你而多彩中超联赛争冠篇:谁能“狙击”恒大?葡萄牙波尔图队主帅下课罗纳尔多梅开二度葡萄牙5:1大胜喀麦多吃番茄保护前列腺 男性必看“九大黄广东侨办官员赴深圳调研侨政工作 为侨人民至上 全国人代会为云南暴恐事件遇甘肃省启动“三八”维权周 进社区为妇高清:张亮获封男神登杂志封面 早春造楼继伟:今年将在城乡医保中提出部分做
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘