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

如何做万能查询

编辑:说三道四文库 发布时间:2017-03-30 06:52
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基础知识,由用户自己写吧!
【微信讲师面对面】你在企业服务号开发中遇到的坑和难点 五个解决方案让MongoDB拥有RDBMS的鲁棒性事务 浅谈Apache Spark的6个发光点 安卓 “假ID” 签名漏洞,竟然骗过了支付宝和360 从Social到Big Data,移动App蚂蜂窝转型推新品 《近匠》nice曹大鹏,从男装导购到潮人社区的心路历程 DevOps扼杀的不是开发者,而是开发生产力! 利用Docker构建开发环境 Netflix公布Cassandra新性能:基于AWS的百万次写入每秒 一周消息树:谷歌Android遭遇“颠覆”危机 微软发布新应用Snipp3t,iOS平台首发且无Windows Phone版 TOP10优秀微信开发商随后揭晓 2014微信开发者大会开幕在即 8月12日:PC鼻祖IBM 5150迎来33周年 平板创作3D展现:蒙特利尔大学发明Hyve-3D设计系统 Quick Charge技术解析:关于手机快速充电的那些事儿 性能分析十八招,你用哪一招? 流程在企业内的作用及成熟度 Gartner:至2017年Chromebook销量将增2倍 后稀缺时代思考:机器横行下的人类夹缝求生 TIOBE 2014年8月编程语言排行榜:Swift跌出Top 20 精华回顾!历届MDCC大会精彩演讲与议程汇总 《近匠》Fancy3D:亿级游戏背后的轻量级引擎 假如李小龙是程序员…… Docker已扎根新一代PaaS 三星或发布首款头戴式VR设备Project Moonlight 英特尔亚太研发总经理何京翔:数据化时代背后的智慧 云络网络科技CEO Steve Mushero:游戏行业的云运维 腾讯游戏运营管理中心总监刘栖铜:腾讯游戏云的理想与实践 一号专车产品总监曹景辉:LBS应用仍有无限的创新空间 昆仑游戏总裁张益豪:做好中国游戏的海外代理 游族首席运营官陈礼标:重点打造全球化IP 一个关于代理制动执行的问题?? 希望建一个数码产品的网站,希望得到大家的帮助 这一回又是关于 SQL的问题 ! 编成的MM 100分求解 生成的EXE文件为何这么大 如何返回结果集? 一个项目要多少钱,谁说了算? 在Delphi5.0中使用TADODataset控件如何保存已被其它用户修改的数据? 有谁知道,在Datagrid中,我明明要删除第二页的第一条数据,但为何... ReleaseDC的问题 jiangsheng老先生,请问如何在程序中修改WebBrowser的语言设置? 高手指教 #define FIELDOFFSET(s, f) ((DWORD)(& ((s*)0)->f )) 什么意思 请问:Win32应用程序的参数如何实现? 请问结束循环用什么语句? 该功能如何实现? JSP中如何实现在某页面停留5秒后,自动重定向到另一页面?是用JavaScript还是JSP实现? javaw.exe是干什么用的呀? 请问,哪有pb6。5下载? pb的帮助问题 请问:到哪里可以找到一本关于windows platform SDK的函数库类图书? 小问题:如何实现程序初启时初始化界面延时显示。 delphi 一个急而有趣的VC中用数据库的问题(可能是微软的一个BUG) 各位帮帮忙:要想能看懂C51单片机的汇编程序,应该怎么学啊! 我用PB从NOTES数据库中提取数据,怎么数据总是被截断,但我的数据并不长,*_* @_@ 代码如下 接口的用处是什么?? together那有下载? 怎样设置一个各个窗体都可以用的变量? 连接sqlserver的问题 怎样得到内存大小 请问,有谁知道《原罪》(原名:original sin)这部影片其片后的歌曲叫什么名字? 各位帮帮忙:要想能看懂C51单片机的汇编程序,应该怎么学啊! 一个怪问题,大家帮忙来看看? 请教应该如何处理,First-chance exception : Microsoft C++ Exception? 毕业设计! 高分!! dbgrid 很奇怪的问题:任务兰上的时间显示? 疯狂的猜想-----致西瓜的眼泪(点点点) ActiveX Control如果做到背景透明? 怎么判断它们相等? 请教各位高手,谢绝低手回答。 请教各位高手,谢绝低手回答。 table中插入<IMG>时无法添满<TD> 诚征解答,我的家当全部奉上!关于解释器语法分析中分析方法的选择问题! 如何动态数据窗口分组?急急急!!!! 给分!!请提供一下netCDF的文件格式 outlook 无法写新邮件,提示,无法创建信纸,通讯薄加载失败,请指点! syntaxfromsql的问题 简单问题! java中可以使用类似于 X + =10;的语句? JSP中文存储问题!(高分求教) 跪求六年级上册寒假新时空整本数学、英语答案,带题目的. 一个三位数和一个两位数的差为225,在三位数的左边写上这位两位数,得到一个五位数,在三位数的右边写上这两位数,也得到一个五位数,已知前面的五位数比后面的五位数大225,求这个三位数和 英语翻译“语文没拿到的去老师办公室”用文言文怎么说 黄金速算怎样学 一个三位数和一个两位数的差为225,在在三位数的左边写上这个两位数得到一个五位数,在三位数的右边写上这两位数,也得到一个五位数,已知前面的五位数比后面的五位数大225,求这个三位数 六年级一班有54人,其中12人近视,六一班视力正常的占全班的人数百分之几? 现在儿童流行学什么速算法呢? 某校初三年级春游,现有36座和42座两种客车供选择租用,若只租用36座客车若干辆,则正好坐满;若只租用...某校初三年级春游,现有36座和42座两种客车供选择租用,若只租用36座客车若干辆,则正 五一班有54人,其中有12人近视,五一班近视力正常同学占全班人数的百分之几?哈哈~ 学会计《速算大法》 某校九年级春游,现有36座和42两种客车供选择租用,若只租用36座客车若干辆,则正好坐满;若只租用42 座客座客车,则能少租一辆,且有一辆车没有坐满,但超过30人;已知36坐客车每辆租金400元,42 六一班有12 人近视,其中男生有5 人,视力正常的有36人,其中男生有20人.则六一班女生近视率是()六1班有12 人近视,其中男生有5 人,视力正常的有36人,其中男生有20人,女生的近视率是() 某校初三年级春游,现有36座和42座两种客车供选择租用,若只租用36座客车若干辆,则正好坐满,但超过30人;(接上)已知36座客车每辆租金400元,42座客车每辆租金440元.(1)该校初三年级共有多 包括智慧屋还有第65页的智慧屋 五(1)班54人,其中有12人近视.五(11班视力正常的同学占全班人数的百分之几? 有了计算器还用不用练速算?有了电脑用不用学写书信?大哥们给个准点的要还用练不、因为什么? 没有全本没关系!我只要76 77页的 我的理想 天文学家要有1、写清楚自己的理想是什么2、交代清楚为什么会有这样的理想3、准备怎样实现自己的理想 脑速算课有必要学吗 语文及格95%,数学及格90%,两门都及格34人,没有两门不及格的,求总人数说明解题思路 中国古代天文学家 一道我不会的六年级数学应用题(请用方程解达)小明和小华在一个400米的环形道上练习跑步.两人同时从同一点出发,反向而行.小明每秒跑4.5米,小华每秒跑5.5米.经过多少秒,两人第二次相遇? 中国的天文学家有哪些? 学校买来排球12个,篮球6个,共付462元.已知买2个篮球的钱可以买3个排球,问排球和篮球每个各多少元? X+2.5×2.25%X=56254=X-X20% 天文学家是什么有哪些天文学家 学校买了12个篮球和16个排球,一共用了1060元,每个篮球价钱比排球贵23元,一个篮球多少元? x/(80+70)+2=x/(80+50)一个步骤也别省,好让我知道是怎么解的. 小学六年级苏教版数学三级训练全本答案 跪求啊!速度··· 1.购买3斤苹果,2斤橘子需6.9元,购买8斤苹果,9斤橘子需2.8元.那么苹果、橘子各买一斤需多少元?2.汽车从甲地到乙地,先行上坡,后行下坡,共用9.4个小时,如果甲乙两地相距450千米.上坡车速为每小 这个方程怎么解?a/q+a+aq=3a/q*a*aq=-8 天文学家是谁 1、有一块240公顷的土地,要种上玉米和西红柿,种玉米的面积和总西红柿的面积的比是2:6.这块土地种玉米和西红柿各多少公顷?2、学校新进132本图书,按3:4:5分配给三,四,每个年级可以得到多少 把数字4写在一个三位数的左边,再把得到的四位数加上六百,所得的和正好是原数的24倍,求原数,求讲解 甲、乙两车分别从A、B两地同时相向出发,甲每小时行45千米,乙每小时行50千米.当两车相遇时,乙车超过中点20千米.两车经过多少小时相遇? 大树栽植土球大小土球的大小如何确定?和蓬径 或高度有什么联系?只有这两项怎么确定土球大小呢第一个回答不错噢,我先分加上去先。现在是乔木呢 H=2.5-3.5m,P=2.5-3.0 这个土球大小怎么确定 天文学家有哪些 摆脱啊 呵呵 知道偷懒了. 如何确定乔木土球规格 移栽植物时为什么要带一定数量的芽和叶?如上 世界上有哪些著名天文学家? 61页答案) 1植物移栽时,人们往往要去掉几片叶,为什么?2把木本植物主干基部的树皮和形成层环割一圈,会...1植物移栽时,人们往往要去掉几片叶,为什么?2把木本植物主干基部的树皮和形成层环割一圈,会 外国天文学家有哪些 某校初三年级春游,现有36座和42座两种客车供选择租用.某校初三年级春游,现有36座和42座两种客车供选择租用,若只租36座客车若干辆,正好坐满,若只租42座客车,则能少租一辆,且有一辆没有坐 =某校初三年级春游,现有36座和42座两种客车供选择租用,若只租用36座客车若干辆,则正好坐满;某校初三年级春游,现有36座和42座两种客车供选择租用,若只租用36座客车若干辆,则正好坐满;若 1.甲、乙两人共同生产一批零件,甲生产的是乙的一又三分之二倍;如果甲把自己生产的零件给乙55个,甲生产的是乙的四分之三,甲、乙两人各生产多少个零件?2.甲、乙两人去看电影,一张电影 初一数学课堂点睛37页的5.6.7.8.9.10题求你们了1.若a乘x的平方乘y的b四方幂是关于x,y的四次单项式,且系数为3/1,则a= ---,b=---。2.在代数式2/5,-y,-2x/1,-m的平方乘n,3/2b,m+n,xyz,nx的平方 植物移栽叶子焉了植物移盆现在叶子焉了怎么办?是刚发出来的向日葵苗! 汽车在平直的公路上行驶,丙站为甲乙两站的中点.已知汽车在甲至丙路段上行驶的速度为每小时四十千米,在丙至乙路段上行时速度为每小时六十千米,求汽车在甲乙两站间行驶的平均速度.王 初一数学课堂点睛p20页16题2008减去它的一半,再减去余下的三分之一,再减去余下的四分之一,以此类推,一直到最后减去余下的2008分之1,求最后剩下的数。 某校初三年级春游,现有36座和 42座两种客车供选择,若只租用36座客车若干辆,则正好坐满,若只租用42...某校初三年级春游,现有36座和42座两种客车供选择,若只租用36座客车若干辆,则正好坐满, 六年级奥数题(不许用方程,用对应法解)“六一”儿童节前夕,春晖小学开展了为灾去小学献爱心活动,1、2、3年纪的同学们为灾区学生献爱心活动,1、2、3年级的同学们为灾区学生购买了5种 p27 28页 某校初三年级春游,现有36座和42做两种客车供选用,若只族用36座客车若干辆,则刚好坐满;若只租用42座客 在一个八位数的最左边写上2,所得的数比原数多多少 初一数学《课堂点睛》2.1 整式(2)答案. 某校初三年级春游,现有36座和42座两种客车供选择租用,若只租用36座客车若干辆,则正好坐满;若只租用42 客车,则能少租一辆,且有一辆车没有坐满,但超过30人;已知36座客车每辆租金400元,42座 一个三位数和一个两位数的差为225,在三位数的左边写上这个两位数得到一个五位数,在三位数的右边写上这个两位数,也得到一个五位数,已知前面的五位数比后面的五位数大225,求这个三位数 英语翻译赶上90后的头班车,自认为是个名不副实的天蝎子.来自于湖北仙桃,传说,吃了仙桃的桃会变成神仙,想必大家都没听说过,因为那是我杜撰的!至于兴趣爱好嘛,喜欢爬爬北高峰,骑车溜达
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘