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

如何做万能查询

编辑:说三道四文库 发布时间:2017-10-18 11:45
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基础知识,由用户自己写吧!
Android平台View的按键事件KeyDown用法 Android加速感应器实现屏幕自动旋转-Sensor属性 Android视频播放类VideoView解析 Javascript如何检测浏览器关闭了小叉叉 文件操作 - DOS BAT批处理编程入门教程(六) 获得手机中的电话簿 Android开发学习小心得 VC中用CPPToolTip轻松实现工具提示 Android中MediaRecorder类实现视频录制 WEB开发中将数据库记录转换到EXCEL表格文件xls供下载 F#是什么语言 函数式编程语言F#:基于CLR的另一个头等编程语言 编程获取Google PR值方法集锦 第一个F#入门程序Hello world 在F#中将函数作为一等对象的值 PHP获取Google PR值 ASP.NET(C#)获取Google PR值 android.appwidget类剖析 Android NDK之JNI使用例子 RemoteViews - Android Widget开发入门 ASP.NET如何用正则表达式得到网站页面中的所有链接 PHP实现图形验证码案例(1) Android Widget开发实例-电量监控 Android自带Widget - Clock指针钟表源代码分析 C#实现文件批量改名工具 PHP利用Google Chart API生成饼图 PHP操作SQLite数据库 PHP利用DomDocument创建XML文件 ASP.NET如何加密/解密URL网址 如何使用C#读取csv文件 三步骤实现ASP.NET(C#)项目中添加谷歌(Google Map)地图 请大家评论一下这样的团队有无发展可能 谁可以提供一套新闻系统的源代码,谢谢了 困惑:美工与代码 求助,如何让窗口只有最小化按钮,而无关闭、最大化按钮? 我想当程序员 哪里有类似woll2woll公司的ip4000vcl7中record view 一样的控件 直连SQLSERVER问题 请教:我错在哪? 如何设置一个用户的权限只能访问一个数据库?该用户同时不能有删除、创建数据表的权限? 请问:Java触发的问题(急) 关于ASP的安全和稳定性碰到的一些问题,想和高手们讨论一下 Mysql 的replication sqlanywhere6 建的单机数据库,为什么配完odbc后连接总提示连接错误? 改行了散分散分散分散分散分散分 主板关闭USB设备后不能在启用,是什么问题啊?各位高手望赐教! 关于 request的问题 救救小弟! 用javamail发信为何连不上服务器 请大家评论一下这样的团队有无发展可能 如何加密Access数据库,加密后如何使用?谢谢 关于richtextbox问题 打印问题? 关于SetTransform的问题 还我的硬盘空间——老鸟帮帮我!! XP上使用vc6.0有问题 php程序只能放在linux主机的根目录下吗? 关于程序打包 listbox問題 请教文件 坏了,我的D盘怎么自动产生了一个fc2tr文本 结帖错误 php下的xml问题? 内部网TCP/IP失效问题求解!在线等候 怎样将有scroll的form全部抓成图片?我用GetFormImage只能抓屏幕上显示的部分,请帮我。高分求助!不够再加!! 客户端的函数怎么样用客户端用户输入的信息... 怎样改变MC的颜色。 病毒邮件。请问有什么办法解决 帮帮我这个菜鸟! PCI Device 驱动程序? 救我吧. link的时候提示cannot open file "mfc42u.lib"的问题。怎么解决? 如何才能上网呢 请问如何重绘一个应用程序的窗体或内部 Object 的边缘,就像 SPY++ 的 FindWindow Tool 实现的样式?? 救救我,给100分 NT4.0为主域控制器,有办法降级为独立服务器吗? VBA 如何调用 DotNet's WebService ?? dbexpress为什么在插入带自增长字段时候出错? 为什么不同的查询语句会有不同的效率? 我现在要开发一个游戏大厅,谁能帮我提供一些技术参数>?在线等待。 不是水贴:请求帮助,有上海师范大学的请进 紧急!那位有clearcase winnt 4.2 的注册码,高分相送!!!!! 宛转的近义词是什么 在水稻上,钾肥可单用吗?有什么坏处? 器官移植中,只有当供者与受者的HLA完全一致时,才能进行移植?完全一致可能实现吗?如不能实现 则移入的器官不是会被当做抗原被排斥吗.. 宛转的近义词 2011长春稻谷价格 CaCN2水解生成气体应该先生成H2CN2再分解成一些东西,其中有气体.是CaCN2不是Ca(CN)2!不一样的! 低压系统中功率因数低会影响母线电压吗 大圆A与小圆B的一部分重叠,重叠部分的面积是圆A的1/5,是圆B的1/3.已知两个圆A和B的面积的面积和为20平方分米,求圆A,B的面积各是多少平方分米 石灰氮 完全水解 产物之一是一种常见的氮肥- -HCN能作氮肥?氨气算是氮肥么?有点纠结啊…。 宛转近义词 种莲藕钾肥用多了会有伤害吗 把图中的8个部分用红黄蓝绿4种不同的颜色着色,且相邻的部分不能用同一种颜色,不相邻的部分可以使用把图中的8个部分用红、黄、蓝、绿4种不同的颜色着色,且相邻的部分不能用同一种颜色 坎坷 宛转的近义词?有根据的,并说明根据. 什么时候吃藕 在空格中填上颜色的词语.( )( )不接?( )装素裹? 请问‘宛转’的近义词 为什么玻璃棒被丝绸摩擦过后,是玻璃棒失电子,而不是丝绸 成语:( )袍加身,灯( )酒( ) ( )装素裹 骨髓移植配对成功的概率如何计算 骨髓移植后,患者血型可能改变,为什么不发生排异反应?RT. 二保焊机加热器坏了焊接会有什么影响? 白血病半匹配骨髓移植成功的概率有多大 海拔高度查询丰镇市九龙湾尖山海拔多高 骏马的理想,是();雄鹰的理想,是();我们青年一代的理想,是(). 什么是半匹配骨髓移植 大连东财对面的大尖山海拔有多少米 为什么人品很好,能力又很强的,是千里马,我们要骑着他? 草木灰中含有硝酸钾和不溶于水的物质,实验室可通过哪三步操作,分离出碳酸钾,所 我所在地海拔有多高 蛋白质酶为什么不能水解成肽链 维护公共秩序的作用是什么? 请问,矿山雪花银纯还是电解银纯?为什么很多人都喜欢手工做的银首饰?电解银有毒害物质吗? 如果没有酶存在,蛋白质能否水解? 碳原子最多连4个碳原子是初中的知识还是高中的?是碳原子 潜水艇水怎么养 磁星骑士中谁最厉害四个人之中 甲苯磺酸还是苯甲磺酸?名称都行吗? 汽车能想潜水艇一样在水里游吗? 不溶于水但溶于稀盐酸和不溶于水且不溶于稀盐酸有什么不同 用分子,原子知识回答下列问题1,气体极易被压缩,体积会缩小 周围有好多与自己有关的人去世了最近几个月有几个与自己有千丝万缕的人,帮过我的人,去世了,非正常死亡,心里很难受,觉得好怪异,不会是我有什么特殊体质了吧?!最近好朋友的妈妈得了癌 FeS要很稀盐酸反应不?生成物是什么? 用分子、原子的知识回答下列问题:1、向轮胎里打入气体,可使轮胎鼓胀.2、水、水蒸气、冰三者化学性质性质相同.3、湿衣服放在太阳晒着的地方比放在晒不着的地方容易干.4、水电解后生 为什么人会死,而且死后还要烧掉啊,热死后会不会变成天使. 如何验证硫化亚铁不溶于水而溶于稀盐酸?如何验证? 硫酸钾肥放置2年后能不能失效(保质期) 在紧张的学习环境中,保留自己的一份兴趣和爱好,我们的生活会更美好;在寻常的家庭生活中,营造温馨和谐的氛围,我们的生活会更美好;在人生的旅途中,拥有一份快乐的心情,我们的生活会 用四种不同的颜色对下面的A,B,C,D,E五个区域染色,相邻的区域染不同的颜色,共有多少种不同的染色方法? 椿象能吃美国白蛾吗谢谢了,大神帮忙啊 什么叫有机钾肥 碘离子和碘单质哪个能使淀粉变蓝 1.5摩水含有多少个水分子 钾肥是什么? 一群群骏马在草原上奔驰(改成打比方的句子) 如果吃的东西放在盛有菌种冷冻的冰箱里食物会被污染吗就是实验室存放菌种的冰箱 为什么水稻施完钾肥变黄? 一支钢笔长1,35(),一张纸的厚度为75() 绝对零度能冻住太阳吗? 青少年如何履行维护国家统一的义务? 珍爱生命放飞理想的文章拿钢笔纸写的要短 日本将设国家安全局 拟任命民间人士担美一女子7年对残障男友不离不弃感动众美售P3C首架飞机抵台 马英九称与日10月百城住宅均价环比上涨1.24%北京今日重度污染 邢台唐山长春“爆表军艺宣传处:不清楚李双江身体情况 请志愿军战士与女学生相约战后见面 62手机模型热卖成“学生救星” 不怕被老共和党参议员:美国安局可能在监听奥巴三季度游客满意度浙江宁波居全国第四军艺宣传处:不清楚李双江身体情况 请两部门启动救灾预警响应指导应对台风“\"来往\"拉拢客户赠流量 专家称类金华多部门回应申领环保标志将收费:系美国超市自销商品走俏 3年销售额11日本美魔女大赛60岁奶奶夺冠 中日韩韩美11月举行第7轮防卫费分担会谈 白宫万圣节变身恐怖“盘丝洞”(组图)谷歌谴责美国安局监听行为 称其“严重万箭齐发!金正恩笑逐颜开观看朝军火力美国使馆神秘“白盒”遍布全球 疑为监普京怒了!最大的黑天鹅飞出洪秀柱幕僚透露:洪正在慎重考虑参选“国泰君安两大首席为啥互撕?“里子”看一个重大信号:中国将实行“新计划经济山水水泥清盘呈请被驳回俄军机被击落,中国券商操碎了心房贷证券化启幕 中国版两房渐近土耳其黑天鹅事件,世界动荡的临界点正与你有关!\"工资税\"起征点要变了王老吉使用“吉庆时分”获法院支持 全国1%人口没有户籍,你的身份是“黑霸道的阿里 傲娇的美团与搜狗中国人的性事为何背负着那么多包袱?大炮一响,XX万两,让军工逼入你视线一大波年底行情袭来 客官们都是专家~国运当头 还不布局磨蹭啥?电视里的中国芯来了 海信推出国产画质半年奖、季度奖能用全年一次性奖金方法负面情绪又不能吃,你要那么多有什么用企业所得税月(季)度预缴纳税申报表修生活中必不可少的学习工具,你有了吗?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘