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

如何做万能查询

编辑:说三道四文库 发布时间:2017-02-23 01:28
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基础知识,由用户自己写吧!
中国第二届CSS开发者大会视频&amp;PPT全部免费观看 如何基于Vert.x实现远程调用? Go 1.5如期发布,完全告别C代码 Rust一周集锦(三):关闭3个RFC并为1.4版本做准备 【CTO讲堂】多备份创始人陈元强:在线灾备革命背后的事 探索React:组件间通信过程解析 机智云完成2亿元B轮融资 将围绕信息安全与机器学习创建“机智云联合实验室” 【CTO讲堂】深度?广度?浅析技术人员的职业发展之路 详解React Flux架构工作方式 专访Tiny框架创始人悠然:好的软件设计是“品”出来的 开发移动应用的7大设计要点 历时一年半 现代Web框架Phoenix 1.0正式发布 【七问七答】对话Erlang核心成员Eric Merritt 分布式文档数据库MongoDB开发版本3.1.7发布 年末巨献!SDCC 2015中国软件开发者嘉年华全面开启 Qualcomm中国2015高峰论坛:新品牌与5G技术展望 福利!MDCC 2015 免费展位等你来申请! 《近匠》Gamegou:多些坚持,瞄准海外的小团队也有春天 细说JavaScript异步函数发展历程 YoMail创始人Albert Yang:我与Email交织的程序人生 TIOBE 2015年9月编程语言排行榜:时髦语言Rust进前50 50张999元限量特惠票!SDCC2015软件开发嘉年华 首批讲师名单公布 百度安全:XcodeGhost大爆发可能只是冰山一角 北京市计算中心云计算转型:缘定OpenStack MDCC 2015移动开发者大会 八大技术专场首批议题剧透 Apple TV指南:从零开始用Swift开发个tvOS应用 React Native、开源:MDCC平台与技术Android专场全揭秘! 相约MDCC 2015 首批免费展位破茧而出 MDCC 2015召开在即,平台与技术iOS专场大咖来了! 一个iOS开发者对tvOS SDK的初探 前Twitter iOS技术团队负责人:使用第三方库的四大准则 请问,在FRAME页中点击IE“刷新”按钮后如何只刷新一个frame而不刷新整个页面?? 请教(无为):关于VC与XML 向各位大侠求救!VB6如何直接输出到打印机?(有关POS机) 请问哪里有InstallShield下载啊 在FRAME页中点击IE“刷新”按钮后,如何只刷新一个frame而不刷新整个页面?? 使用VC+ATL生成控件,在VB中设计时属性窗口设置的值保存不住,运行的时候可以保存,是什么问题 怎样在dephi中用ado调用视图 ~~~动态设置数据窗口~~~~~~~~~~~~~~~~~~~~~~~~~~~! 一两狂死郎之天衣有缝:我是琳琳,提问有关音量问题的人。请来一下!! 有关李维的ADO/MTS/COM的问题,求救! vc与xml 请教:vc与xml 如何做象IE里最大化按钮下的转动的“e"字母? help!!!!!!!高分。。关于applet和servlet通信一个问题 JVM INSTR pop ;什么意思?高手帮帮忙! 如何访问子数据窗口中文本控件的text属性。在线等待!!!!!!!!!! 有的程序Dialog控件比Visual C++所提供的要多,不只是如何实现的?是自己做的吗? 我编了一个用MODEM-MODEM拨号对传的程序。但端口检测不正确,不能拨号。 怎么用installshield 实现软件加密? 急!如何将含NULL的string给MEMO字段赋值 请教:为什么我在WinXP上装完了vs.net,却无法启动?点击出现vs的初始画面,然后什么都没了? 请问hresult的错误码的意思,在哪里可以找到? 有关ORACLE的数据链的问题 我是琳琳,刚才提问有关音量问题的人。如果用一个TrackBar控制左右音道如何解决? 如何控制控件的显示层次! 单文档程序中的对话框中要打印和预览,该如何编程 有人能想通这是怎么算出来的吗? 如何设定objfilesys 一两狂死郎之天衣有缝:如果用一个TrackBar控制左右音道如何解决? 华山论剑 If ((p + 5) / 5) Mod 2 = 0 Then ...出错 ADODB.Recordset 错误 '800a0e78' ???????大侠 有没有办法实现AOL的ICQ中的位于桌面左右并排挤掉所有窗口包括桌面?? 在edit1的edit1keydown事件中为何不能向应button1.click事件??? 希望不要看见DBGrid中的一行记录,但不是要删除她, how? 请问windows优化大师这种界面是用什么控件做的?什么地方有下载的? ■■关系同志们的命运啊,希望都参与讨论■■ 请问如何给一个窗口发送WM_LBUTTONDOWN? 谁能介绍几本SQL SEVER的好书呀,小弟感激不尽呀!!! 请问pdf 文件用什么软件才能打开。急急。。。。。 Access数据库加了密码后用ADO直接不能访问了,用ODBC可以,如何解决? 我不明白这两个程序的函数的作用讲解一下!!谢谢!! 怎么往数据库里添加记录》 why can't connect www.boost.org? 哪里有好的email地址搜索哦工具 关于动态字段的ACCESS查询 要把ACCESS编译成可执行程序,怎么办? 多文档的子窗体关闭事件? 有无搞头 对自己心仪的女网友该说真话呢还是说...... 请问如何实现菜单上实现右键菜单? 一瓶二氧化碳有多重一般正常使用的二氧化碳气瓶,他的容积是多少? 制取乙烯的化学方程式 乙烯和氯气光照条件下反应的产物是什么?发生取代反应还是加成反应? 如何制备乙烯,相关的反应原理以及方程式 UV胶粘剂的成份有哪些? 液态二氧化碳的储存条件请问液态二氧化碳的常温下储存条件是什么,在钢瓶中的压力需要是多少. 液态氧,氮,氩,气体氧,氮,氩,二氧化碳,氢,乙炔,混合气有毒吗 气体膨胀液体技术中的DELOS过程,液体CO2的来源是什么? 怎么判断LNG槽车储罐和气化站储罐哪个温度更低呢? 一立方液氧能气化多少立方气态氧气 胶水:想问一下普通用的胶水的成份,含不含PVC? 储罐中液态CO2气化时,为什么设回流管?还有用槽车充装液态CO2储罐时,为什么气相,液相两种管都要接上? 有没有哪家公司分析汽车漆涂料好一点的,最近公司想要把汽车漆涂料做一个改进,想要找家公司先分析一下我们现在用的汽车漆涂料怎么样? 聚乙烯能和溴水发生取代反应吗? 二氧化碳在储罐的压力是多少请教液体二氧化碳的储罐压力要求是多少?温度25度左右时. 哪里能做UV涂料配方分析的公司? 怎么去PVC胶水 橡胶密炼配方有公司会分析吗?公司一批进口的橡胶很不错,想知道密炼配方是什么,有公司会分析吗? UV胶和无影胶是同义词,请问怎么清理.UV胶粘了之后,想清理掉.如何用类似浸泡的方式清理掉.用什么化学药品?或药水. 金属上能喷UV油漆吗 乙烯和氯气发生加成反应的条件是什么?乙烯和氯气能够反应么?在什么条件下?最好有权威一点的论据. 加热试管中碳酸氢铵:有刺激性气味气体生成,试管上有液滴生成.液滴是怎样产生的? 最便宜的涂料配方有公司分析吗?我们厂有一批比较便宜的涂料配方,想改良下,哪家公司分析好? 乙烯与氯气加成反应的计算一摩尔乙烯与氯气加成后再与氯气取代,整个过程最多需氯气多少摩尔?题上只说是取代,希望给出具体过程。 碳酸氢铵固体在试管中加热,试管口有---说明生成了 工业制硅反应方程式 液态CO2储罐中的2.2MPA的压力是气态的压力还是液态的压力? 将碳酸氢铵在试管中加热,使放出的气体依次通过盛有过量的过氧化纳 浓硫酸的容器,最后得到的气体是什么啊只有一种气体,是O2么?那铵气呢? 工业上制取硝酸的相关反应方程式 二氧化碳与空气的液态压力 取少量碳酸氢铵固体装在试管中在酒精灯上加热,观察到的现象___,说明碳酸氢铵受热___,保存碳酸氢铵化肥应_ 工业上制取碘酸钾的反应方程式 寻求水性压敏胶配方,联系电话:13862829 乙烯制备乙酸乙酯的分步反应为什么 那位能告诉我一吨液态氧是多少立方~`急要~ 二氧化碳40°C,3MPa压力下是液体还是气体?此时二氧化碳的密度是多少?常压应该是101KPa(0.1MPa) 以乙烯为有机原料合成乙酸乙酯的各步反应方程,并注明反应类型共四个应该~ 一吨液态氧等于几立方 压敏胶的成分结构压敏胶的俗名,英文简称市场价格,主要用途,分子式,结构简式,合成反应方程式,主要性质,重要用途? 无影胶水怎么使用好呢? 什么是uv丝印油墨 1吨液态二氧化碳能转化成多少气态二氧化碳压力在9公斤左右,温度是10度左右.想知道对应关系是多少,密度无法确定,请按照正常的气态液态密度来.非常着急. 将温将碳酸氢氨加热生成氨气,水,二氧化碳,现有碳酸氢铵1mol加热后恢复原状,求生成气体的体积,质量,密度,及与氢气的相对密度.将温度提高到200度又会怎样? 如何去除UV丝印油墨 压敏胶的组成成分一般是什么?用的是广州坚红化工的YH-1型压敏胶,望知道的大侠告知. 乙烷加热分解生成乙烯和氧气,取乙烷部分分解后的反应混合物1体积,使其充分燃烧生成1.6体积的co2(同温同压),则乙烯的分解率是多少 PVC丝印油墨配方 压敏胶配方 原料价格主要是要知道1吨压敏胶水的制作成本 知道方法的最好 最好知道是些什么原料 乙烯和乙烷混合气体共amol,与bmol的氧气共存一密闭容器,点燃后充分反应,乙烯和乙烷全部消耗完,乙烯和乙烷全部消耗完,得到CO和CO2的混合气体和45gH2O,试求:1.当a=1时,乙烯和乙烷的物质的量之 液态氧的储存条件是什么?它在什么情况下可以转化为气态氧?液态氧重量(g)÷×22.4=气态氧(l) 检验CO2的方法为什么这题不能用燃着的木条,也不能向瓶中滴加澄清石灰水? 已知碳酸氢铵固体受热分解成氨气、二氧化碳和水蒸气,则该混合气体的平均相对分子质量为? 气态氧变成液态氧需要多大压力在0摄氏度, 三元乙丙橡胶耐过热水的胶管配方三元乙丙橡胶制品的配方啊 成本一定要低哦 硬度80成本4000左右 乙醇生成乙烯反应方程式? 液态氧怎样和气态氧换算?比如,我有一个氧气罐,10升,压力是20Mpa,换算成给病人吸入的氧气,是多少升?也就是说换算成气态氧,一共有多少升.我也看不懂你的这些公式。 乙烯和氯气反应的条件 二氧化碳的单位是用什么来计算的一便写出他的符号 氧气变为液态氧后是因为什么? 急!氯气和乙烯的反应条件溴单质和乙烯反应不需要条件,但我上次听说氯气和乙烯反应需要催化剂,那氯气和乙烯反应到底需不需要催化剂?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn