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

如何做万能查询

编辑:说三道四文库 发布时间:2017-06-25 10:04
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基础知识,由用户自己写吧!
开发者找众筹,哪些网站更靠谱? 48小时脑力激荡 中美青年创客大赛英特尔北京选拔赛 “微应用+大平台”推动企业软件走向碎片化 浅谈Hive vs. HBase 十款最新的JavaScript开发工具 JavaScript Promise启示录 百度携多位安全专家深入探讨安全人才快速培养机制 卡饭技术代表严佳:引入安全人才,企业应遵循S.L.E.E.P、S.T.A.R法则 百度资深研发工程师周晓波:平台+数据 百度培养安全人才的重要思路 代码审查是如何抹杀开发者积极性的? 事件分析平台EventHub开源 云计算智能交通行业论坛:李德毅院士谈智能车 多家知名企业分享应用实践 我伙呆!CRM生死对手微软及Salesforce或将联手 阿里巴巴曾鸣:数据时代来临 OpenStack企业应用之路技术培训:虚机迁移、HA、VDI、跨Hypervisor管理 云计算技术背后的那些天才程序员:KVM之父Avi Kivity 中国气象局联手阿里云:海量气象数据变“活数据” 浪潮首度公布“I2I计划” 全面接盘IBM X业务 一周消息树:Surface Pro 3想替代笔记本太难,微软正逐渐迷失方向 就是要赚钱!NativeX推自定义原生广告交易 继智能手机后的下一个战场:智能家居 鏖战云端——亚马逊的生存法则 如何保住公司的人才:创造良好的学习氛围 主宰全球的10大算法 专访Google数据科学家彭晨:大数据成为潮流走近各行各业! 强横Metal技术来袭,能否取代OpenGL? Swift横空出世,Xcode 6 Beta有了哪些新变化? 《近匠》GameMei:简单易用、快速开发商用游戏 Gartner:2014年一季度浪潮服务器出货量中国第一 【技术博客推荐】张安站:大数据时代下的商业存储 Amazon继续登顶IaaS魔力象限,榜眼是微软而非Google 问斑竹! 怎样在jsp中调用oracle817中的过程和函数?在线等待回复! 如何改变CStaic控件的背景色 各位大虾,给我介绍几本C++的名著好吗 关于水晶报表,控制分页显示。急急急急!!!! help:--------------->在线热切等待! 天啊我都快疯了 是不是用户对象必须继承System.Web.UI.UserControl 怎样把shs片断对象各式的图表转换成网页可以引用的图形各式?? 如何拖文件 怎样拦截键盘输入 【送分有理】好不容易混成五个三角,感谢新老朋友的大力支持啊^_* Exchange Web Service 问题? 关于远程连接问题!在线等! 这一SQL语句错在哪里? 在Delphi中,用SQL脚本更新存储过程? ★★★★★突然想到一个realloc的使用问题,请指教!★★★★★★ 在线等候!急 搜了搜,关于word和图片格式的文件都是文件上传到数据库并显示,可是怎么让一个word对象保存到数据库并显示呢? 这条sql语句怎样写 谁知道计算机等级考试在那个网站能查分(2002年下半年二级C)? 求助,如何在SQL Server数据库设计好之后,把它打包,生成setup.exe可执行安装程序。 NT无盘高手进 請問哪位可以提供點完成端口的資料阿? 网络的不通 如何把VC++中的输入IP地址的控件导出来? VS.NET的第六、七张碟有什么用呀? B/S,如何当一个form为非编辑模式的情况下让其中的一个field为编辑模式 form提交的有效性检查问题 把 MYSQL* mysql作为参数据传递处理 出现错误 有关98下的声音问题,来者有分 NT/2000下,怎么将应用程序在开机时自动加载?谢谢,送高分,我会再加的 金山毒霸不能卸载?! 教你发短信不收费!!!!!!!!!!! 关于颜色值格式的问题 关于设置主键的问题! 我想说的是,漏题不仅仅在湖北. Win2000环境下,VB程序如何能得到计算机当前的CPU使用率? 系统错误:&h800706BA(-2147023174) 请问这个错误 一般是什么地方出问题 谢谢 急急急急急急!!( 想了解一下硬盘还原卡的原理与破解 ! 不是盖的 Visual Stdio6.0,Visual Basic6.0,MSDN,CorelDral 10,Visual Foxpro6.0下载。 Rose建模中使用中文 關于顯示Money型數據的符號問題 寻找用RegisterDeviceNotification注册过USB外设的大虾,帮忙看一下我的问题 怎么把PAINTBOX中的图形保存下来? 关于计数器 ☆☆☆☆☆→测试性问题←☆☆☆☆☆ 高分寻求JSP/Servlet写的聊天室源代码?请各位高手帮忙! 请问谁有redhat8教程? 我在asp中插入一个excel控件,怎么把excel里面的内容保存到数据库? 急!请教大家一个小问题! cat 's是猫的.还是猫是. She is as oid as my brother. control 是什么意思?用英文解释解释它的定义《英文> 在美国,人们常常用“she”来指代“狗”,用“he”来指代“猫”对不对 英语几道单项选择题 别担心,一切都在控制之中,(用英语怎么说?且要用control的短语) 网络语言利与弊辩论赛,我是正方.给我多点材料.利弊都要,越多越好, 小学英语毕业考总复习 九、阅读理解阅读短文,根据上下短文的意思判断下列句子是否正确Hi,this is Chen Jie.I’m going to have a busy weekend!On Saturday,I’m going to the bookstore by taxi .I’m going to buy a new C “水都”威尼斯 把短文分成两段.两段的关系是(). 【With the help of 】my friends,I caught up with my classmates soon.【…】means:A.UnderB.Thanks toC.ByD.Because make it possible to do = ______ doing? 对威尼斯的印象作文这篇作文的印象. DO you have a house in beijing?no,i don' t have so much money so i have to()one 1\rent 2\borrow 3\buy 4\make we will have two days off a week at that time.翻译 is the book written by LuXun?...这样问对吗,怎么改.为什么不是被动式?为什么开头用be的 A:Why don't you get her a ring?B:__________________.I don't have so much money. 改错I hear we well have a( two days) holiday in( two days )time The book that is written by Luxun is good.详解.这句翻译成中文是:"这本书鲁迅写的好"?还是,这本书是鲁迅写的好?还是,这是一本鲁迅写的好书.它的结构是主系表结构?那么The book that is written by Luxun 是 笑,全世界便与你同声笑,哭,你便独自哭.英语翻译、、急用、、要英文演讲 把She empties this basket every day.改写成过去时急 With the help of the government,a large number of people __after the flood in 1991.a、survived b、 suspended c、 suffered d、 subjected这题选什么?为什么?请翻译整句 He likes flying ( ) every year .A there and here B here or there C here and there D there or here he buys a new car every year.she empties basket every day.两句中的动词+S为什么不一样? The suggestion to close the road has found favour with local people关闭这条公路的建议已得到当地人的支持to close the road 为什么有tohas found favour with 请问get here ,get there的here和there是什么词性,做什么成分? Nothing will change until she breaks this life,this life-size mirro求翻译 帮我根据我的名字起个英文名吧我的名是“胜华”,有下列要求,英文名的音要尽量符合中文发音,不要那种稀奇古怪或者如apple这样中国人自认为可爱,外国人听得怪的名字(我想到了赵丽蓉的 秋天的作文2000字11 popular,LuXun,the,is,book,written,by dogs can help plice_______(catch)robbers and find lost people 求2000字的英语 文章最好要 没翻译过的,关于商务英语的 英语单词written是什么意思,是write的什么形式? was written是被动语态吗? 原句子 This poem was written by a student .这首诗是一个学生写的. These firemen can't find people.These dogs help their.改病句急用! 急求英语旅游论文2000字 1.children should make ____ 1:Who is your best friend,Tim?2:My best friend is Brian 1:Why dose not he t__ to you now?2:Because we had a f____ the day before testerday.1:How did it s____ 2:When he wanted to copy my homework.I did not think it was a good i___ for him to copy m___ I make it a rule to run_____exercise every morning填介词或副词 Children should ( )chores 只能用make和do I want to konw who is you best friend/who your best friend is 意思有什么不同?或者哪个错了?那I want to konw what your name is/is your name made it a rule后面跟什么? Children should make _______ for old people in a bus.A.room.B.a room.C.rooms.D.the room. instrument of monetary control是什么意思? We have a two-day _____.后面应用holiday还是vacation? 需要的是用英语解释这两个词!design 设计 和 control 控制.首先是两个单词、需要的是用英语解释这两个词!design 设计 和 control 控制.the Sum of all thrills帮我解释一下这个词组好不好…… 请问去旅馆的路怎么走?Excuse me ,can you tell me ____ the hotel is?在第二个拐角处向右转。____ ____ ____ ____ on the right. 英语翻译将1日龄的白羽肉鸡160只随机分成4组饲养,每组40只,又将每组随机分成5个小组,每小组8只.各小组平均体质量差异不显著,试验4个组分别为1个空白对照组(基础日粮)、1个试验对照组 regulate and control 请问有什么区别?都有控制的意思. Excuse me,could you tell me how to get to the Grand HotelExcuse me,could you tell me how to get to the Grand Hotel?I thought it was on this corner,but I seem to _ a mistake.A.having made B be making Cmake D have made 为什么选B 美音和英音的区别?怎样区分? have the flu,have a cough,have a good time,have a lesson,have lessons,have fun,have a picnic中文是什么? Shall we make it a rule that no language ( ) English should be spoken in an English class?填介词,望说明理由 如何区分美音与英音? [w46] I wanted to take part in the game; but my friend told me _____.A.not to B.not to do C.not do itD.don't do翻译,并分析. It's for that reason that the language of the USis English是什么句型 她和她的猫 SHE AND HER CAT怎么样 为什么不能说we will have a five days holiday.what about going to suzhou? 【英语】We make it a rule that each of us ___ the bedroom one day a week.A.has cleaned B.have cleaned C,cleans D.clean 她到处寻找那只猫she looked for the cat---- ---- ----- ------ 填四个空 那位老人通常晚饭后散步八小时 (make it a rule)英语 WE will have a seven-day holiday this month 改为同义
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘