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

如何做万能查询

编辑:说三道四文库 发布时间:2017-05-24 04:59
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基础知识,由用户自己写吧!
成功的社区在于拥抱变化——知乎创始人周源专访 优化UITableViewCell高度计算的那些事 国外iOS大牛:开发Apple Watch应用我犯过的错 云上Java System Profiling与Debugging——蚂蚁金服观察与实践 搜狗商业平台Java技术实践 Java在电信软件领域的技术实战 关于Java框架Vert.x的几点思考 Java在游戏服务器开发中的应用 Java框架研发思考 那些年,Java程序员用过的开发工具 Java内存模型的历史变迁 Java 8与Apache Ignite Java开发与技术挑战——关于技术的技术思考 专访唯品会架构师肖桦:做编码的架构师 越来越“简单”的Java 我的Java!越过山丘 专访沙梓社:做个“Think Different”的技术牛人 基于ES6,使用React、Webpack、Babel构建模块化JavaScript应用 财税街创始人石克清:创业须空杯心态+有效社交 自我知识管理:连贯性就是生产率 玩转Google I/O 2015:Android M、IoT、Glass 2.0、VR、ATAP ARC中Retain Cycle揭秘 失控与逆转!企业移动化2.0时代下如何求变? 玩转物联网之MQTT 专访都灵创客教育奚炎:被忽视的Maker教育 13岁iOS开发者:Swift开发Sprite Kit游戏实践 专访豌豆荚「自动装」开发团队:无需Root即可批量点击「下一步」 iOS项目的持续集成与管理 《近匠》谛听科技,探索智慧家庭的智能网关 【简讯】Python 3.5.0b1发布 《算法的乐趣》作者王晓华访谈:多看、多做、多想是秘诀 如何播放Flash? 我的IE不能自动填写域名了!!!第一个答对者20分! 一個很簡單的問題,在線等候,謝謝!! /usr/bin/top的原码在哪个路径下啊?小弟找了好久还是找不到急啊! 尊敬的流芳先生: 程序员考试中的一道很简单的c试题,有个问题 Sun Blade 2000 要多少钱? 活动目录中,遇到这个问题。 我的机器用程序向局域网内的另外一台机器发送一条信息,类似于发送控制台信息 [请教]会用客户端ftp软件客户端代理功能的进来帮帮忙 急求VCD的Specification! 在线紧急求助!!! 在MDI中如何更改子窗口标题? 请问有哪位好心的大哥能给我一个Bounds Checker V601_D.exe 的序列号? 100分求助如何在iPlanet中配置cgi-bin? 高分求助:请问如何确定某个窗口是否存在? 怎么样在vb中把一个excel表的数据拷贝到另一个excel中(包括行高,列宽,字体等) In Pro*c, 为什么我不能用#define UNAME_LEN 20 去定义常量. 高分 高分求《.NET开发的最佳实践与案例分析--北京讲座》示例源码及相关资料!!! 请教高手 那们有 AlphaBlend 函数的帮助中英文都行。 麻烦大家帮我看一下,代码错在那里。 详细说说rs.open sql,conn,Cursor Type,LockType 紧急求救!在线等待: 哪里可下载INTEL IPL库? 关于 我的GNOME的主Panel消失了,我该怎么办???? 一个C程序的问题求助! 请大家推荐一个支持EJB2.0 的免费的应用服务器 运行时建立数据库表 麻烦各位一下,这个错在哪了? 关于access关于自动增量的字段! 关于快捷菜单的问题。 世界上最大规模的大学生群架[真实](转载) win2000日文版与98SE怎么连接? IE6下注销用户的问题。 在线等待! 高分求助! 谁知道哪里有VB7的电子书?? php如何在长字符串中加<br>换行符,以达到强制换行目的?? 谁能讲一讲用evc访问如何访问pc上的数据库? win2k下的一个sql语句 紧急求救 高分求高分求“对话框打印”源码,大家帮我看看我的为什么不行? 视图中的表单公式是不是在IE下无效?为什么我试了一下不起作用? 下拉子数据dddw的问题 用一个窗口调用另一个窗口出现时LOAD事件为何没有做! 怎么写服务器控件的客户端事件阿? 请教透明窗体的实现 不好意思,提个智障问题,感谢帮助。 sql问题,如何用一条sql语句,同时删除两个表中的纪录 关于shell 随便一篇电影的观后感 截止到 5.27 日,选修课用的,2000字左右! 夜晚天空中的云层为什么会有红色的呢?夜间观察会发现天空中的云层,有的是白色或者灰色,但同时也有的云层是红色,这是为什么呢? 仿写句子:天空上的云,有的像羽毛,轻轻的飘在空中;有的像鱼鳞,一片片整齐的排列着.(注意修辞手法以 求一篇关于日本侵略中国的:影视评论\观后感求一篇关于日本侵略中国的:影视评论\观后感或如何看待日本侵华的事实与日本当今为何拒不认罪的现实或者是反思(选其中一种形式字数2000以 为什么傍晚天空是红色的 天上的街市 在哪里使用了联想? 天鹅的见解这篇短文的2~4段意思是什么? 哪一种体育运动最好? 晚上天空上的云为什么发亮在没有夕阳,天空中没有光线的情况下。是不是地上的灯光? 心墙 刘墉 阅读答案 用4个词语描写我一路上天游峰的感受 夜晚的天空为什么可以变成红色? 描写西双版纳 优秀作文300字 摘抄描写天游峰高的句子可可可 记金华的双龙洞课文中的好词佳句 天鹅的见解你对快乐有什么特殊的感受? 体育运动有多少种运动种类 皿加偏旁,缶加偏旁,戈加偏旁 游记作文500字 一共有多少种体育运动这个我还真不知道 知道的来说下 贝加偏旁,皿加偏旁,缶加偏旁,戈加偏旁. 天鹅的见解阅读答案,一匹骏马在湖边饮水;一条鲤鱼在湖里吹气泡;一只雄鹰在湖面上空盘旋.雄鹰一会儿直冲云霄,一会儿滑翔,不屑一顾地对骏马和鲤鱼说:“天空广阔无比,在天空自由自 描写天游峰的词语. 填部首组新字:身、口、工、火、寸、入、戈加同一个部首变为新字 快乐的见解 作文要400字,我悬赏就那么多了 英语翻译请各位英语高手帮忙下翻译一段阿甘的剧本 EXT.GREENBOW,ALABAMA Mrs.Gump and young Forrest walk across the street.Forrest walks stiffly next to his mother.阿甘 Now,when I was a baby,Momma named me after the great Civil Wa 关于天空的个性签名,悲伤点的最好天空是英文的 天游峰的扫路人 哪个句子生动的感受描写天游峰的高与险 求阿甘正传的英文剧本!知道的说下 我长大了300字 天空中为什么出现很长的云?很长很长?这是什么云? 为什么有时侯晚上的天空的云是红色的晚上我在阳台坐的时候发现天空的云是红的是为什么呢? 下暴雨前天空为什么是暗黑色 这云出现在日本的天空上?什麼时候可以出现呢.兄弟们,让我YY一次吧. 求普通高中英语教科书听力录音是人民教育出版社的 求选修6的课文和单词听力~ 两个人从操场的同一地点出发,相反跑步,一直两个人的速度分别是6米/秒和8米/秒,操场一周山是400米,求经过多长时间两个人独二次相遇? 模仿忘不了的笑声写作文,不写笑声,还可以写什么? 只有一个录音机,英语书,磁带,怎么练听力听力不算好,特别是听那些问句选答句的,以及长一点的阅读选项.脑子总反应不过来,刚想起这句话意思,下一段话就过去了英语书是学校发的,磁带学校 甲乙两个人在圆形操场跑步,已知甲的速度比乙快,如果两个人在同一地方同时出发,同向路,则经过3分20秒,可以第一次相遇,若反向跑,则经过40秒,也可以第一次相遇,已知甲跑的速度是每秒跑6米, 爱的消息刘墉阅读答案 六年级下册语文第六单元阅读材料第4课忘不了的笑声说说文章的主要内容 有多久没有抬头仰望苍穹? 为什么会有UFO 六年级《忘不了的笑声》中的人物的性格 天上的街市 第一段在运用比喻的同时,充分展开联想,这样写有什么好处 雪地上的脚印 刘墉 1.雪地上的脚印 的含义2.稳重父亲对离家出走的儿子抱怨着怎样的复杂感情3.为什么儿子离家后,父亲会想起电影 缇萦 中的一幕4.谈谈你对文章中加横线的句子的理解你放 以忘不了为话题写作文600字 为何黄昏时分的天空 成 红色?太阳也成红色?为何天不再 蓝 ?太阳不再 白亮?回 jinshitang6红光 是通过 什么方式到达 地面的。为什么波长长就没有被散射 掉?波长短的蓝光的穿透力不是 很 初二鲁迅的《藤野先生》 最后一节“每当夜间.深恶痛疾的的文字,”此句中的“良心发现”“正人君子”怎么理解?证据话的含义是什么? 《忘不了的笑声》 点评 太阳西下天空为什么是红色 为什么世上会有UFO 天游峰的诗句有 用卓加偏旁,组词新词( )追 下( ) 会有外星人吗? 登上天游峰所想到的诗句还有作者的感受 给”散”加一个偏旁组成新词给”散”加上一个偏旁,组成新词!谢谢了~ 求一篇电影《青春派》的观后感,急用求电影《青春派》的观后感 800字以上,观后感要求对成长和时代特征进行发散思考 《阿甘正传》阿甘的英文名叫什么? 拿字加偏旁组新词拿字加2个偏旁组2个新词
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘