电脑桌面
添加盘古文库-分享文档发现价值到电脑桌面
安装后可以在桌面快捷访问

查询应用范文

来源:莲生三十二作者:开心麻花2026-01-071

查询应用范文(精选11篇)

查询应用 第1篇

SELECT语句作为SOL语言的核心,可以通过使用WHERE子句实现灵活而复杂的查询操作。其中,可通过使用WHERE EX-ISTS子查询实现复杂的查询操作。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。例如WHERE EXISTS嵌套查询:

SELECT*FROM TABLE1 WHERE EXISTS外层查询或父查询

(SELECT*FROM TABLE2 WHERE条件)内层查询或子查询

WHERE EXISTS语法:EXISTS代表存在量词∃’,由EXISTS引出的子查询,目标列表达式通常都用*,该类子查询只返回真值或者假值,不返回任何数据。在执行查询时,首先取外层查询TABLE1中的第一个元组,如果对应内层查询非空(TABLE2中存在满足内层WHERE条件的元组),则外层查询的WHERE后面条件为真,则取出外层TABLE1中的第一个元组;否则若对应内层查询为空(TABLE2中不存在满足内层WHERE条件的元组),外层查询条件为假,则不取出该外层元组。然后再取TABLE1表中的下一个元组;重复这一过程,直到外层TABLE1表中所有行全部检查完为止。

2 WHERE EXISTS子句初步应用

WHERE EXISTS子查询作为查询操作理解的难点,现以“数据库系统概论”教材中SPJ数据库为例,通过相应查询操作,理解WHERE EXISTS子查询的执行过程及其特点。

SPJ数据库中有四张表:S,P,J,SPJ分别代表供应商表、零件表、工程表、供应情况表,四张表结构及各字段的含义如下:

S(SNO,SNAME,STATUS,CITY)供应商编号,供应商姓名,供应商状态,所在城市

P(PNO,PNAME,COLOR,WEIGHT)零件编号,零件名称,零件颜色,零件重量

J(JNO,JNAME,CITY)工程编号,工程名称,工程所在城市

SPJ(SNO,PNO,JNO,QTY)供应商编号,零件编号,工程编号,使用数量

下划线表示该字段为主键,其中SPJ表中SNO、PNO、JNO为外键,分别参照S.SNO、P.PNO和J.JNO。表中数据如图1。

解析:查询工程的名称(涉及表J),该工程满足条件:存在该工程使用了P1零件(涉及表SPJ)。SOL语句实现:

执行过程:取出J表中的第一个记录,根据Jno值,得出J1使用了P1零件,结果非空,WHERE条件为真,则将对应的Jname值“三建”取出;然后依次取出J表的下一个记录,重复这一过程,直至外层J表中所有记录均检查完为止。

执行结果:

查询特点:该类子查询中查询条件依赖于父查询中的某个值,因此需反复求值,所以这类子查询又称相关子查询。

3 WHERE EXISTS子句实现复杂的查询操作

一层嵌套查询能够实现简单的查询操作,要实现复杂的查询,需要创建多层嵌套子查询。

查询2:查询使用了零件表中全部零件的工程名称

解析:找工程名称(涉及J表),该工程满足条件:对所有的零件,若该零件是零件表中的零件,则该工程使用了该零件(涉及表P SPJ)。

利用离散数学的知识,将该条件看作一个命题。根据句意,将该查询转化为谓词表达:找工程Jx的名称,该工程满足条件:对于所有零件Py,若Py是P表中的零件,则Jx使用了该零件Py,用M(Py)表示谓词“零件Py是P表中的零件”,用P(Jx,Py)表示谓词“工程Jx使用了零件Py”则该查询可以表示为:(∀Py)(M(Py)P(Jx,Py))

SOL中虽没有全称量词和逻辑蕴涵的表示,但他们都可以转换为等价的存在量词谓词表示。利用相关数理逻辑和谓词逻辑公式进行转换,推导如下:

语义:查询工程名称,满足条件:不存在这样的零件Py,Py属于零件表P,且不存在工程JX使用了该零件Py。SOL语句实现:

执行过程:该查询是一个三层查询,外层循环依次扫描J表中的每个元组,中层循环依次扫描P表中的每个元组,内层循环依次扫描SPJ表中的每个元组。对于J中的每一个元组,若有一种零件没有使用,则最内层查询为空,得出中层选择条件为真,进而得出中层查询不为空,从而外层的选择条件为假,该工程元组不会被选出来。所以,只有某个工程使用了P表中的所有零件,最内层查询每次都不为空,中层选择条件每次都为假,得出中层查询结果为空,进而得出外层选择条件为真,该工程记录就被选择出来。

执行结果:

通过查询实例分析,要实现复杂的查询操作可通过以下三步完成:(l)将复杂查询进行语义分析形成命题,利用谓词表达命题(2)将命题等价为存在量词的表示(3)根据存在量词谓词书写SOL语句。我们通过查询3进一步理解该步骤。

查询3:查找供应商姓名,该供应商供应给了与供应商S1所供应的工程完全不同的工程项目

(l)解析:查找供应商Sx姓名,该供应商满足条件:对于所有工程Jy,若S1和Jy有供应关系,则Sx与Jy没有供应关系(涉及表SPJ)

谓词公式表示:

谓词P(SX,Jy)表示:供应商Sx供应了工程Jy

谓词Q(S1,Jy)表示:供应商S1供应了工程Jy

则命题的谓词表示:(∀Jy)(P(S1,Jy)┐Q(Sx,Jy))

(2)等价表示:

语义:查找这样的供应商Sx,满足条件:不存在这样的工程Jy,S1供应Jy,且Sx也供应Jy

(3)SQL语句:

执行结果:

4 结束语

在WHERE EXISTS子查询中,首先扫描外层表,针对外层表的每一个元组,扫描内层表,再根据内层查询结果是否为空,判断外层查询条件是否成立,来决定是否取出外层元组。可依据离散数学中的数理逻辑和谓词逻辑知识,帮助我们直观的理解并掌握WHERE EXISTS子句的执行过程,从而可以自然的书写复杂的多层嵌套子查询语句,以实现复杂的查询操作。

摘要:SELECT语句作为SOL语言的核心,可以通过使用WHERE子句实现灵活而复杂的查询操作。其中,与谓词EXISTS所形成的嵌套查询是理解的难点,该文将通过分析查询实例,探讨如何使用WHERE EXISTS子查询实现复杂的查询操作。

关键词:数据库,SOL,EXISTS,子查询

参考文献

[1]王珊,萨师煊.数据库系统概论[M].4版.北京:高等教育出版社,2007.

[2]赵一鸣.离散数学[M].北京:人民邮电出版社,2011.

[3]刘亭利,伍搏.详析SQL语言的WHERE子句与HAVING子句[J].怀化学院学报,2008,27(8).

[4]杨振宇.巧用SQL的查询技术[J].软件,2011,32(4).

[5]李红日,宋俊兰.用SQL语句实现关系代数运算探讨[J].科技信息:学术研究,2008(8).

查询应用 第2篇

城市环境信息综合查询分析系统开发与应用实践

主要介绍了城市环境信息综合查询分析系统的建设目标、体系结构、数据组织、系统模块的功能、关键技术等.应用实践表明,开放的`体系结构、通用的GIS平台,一体编码的数据库管理技术,规范标准的信息维护与评价体系等可为开发其它城市的环境信息系统提供借鉴.

作 者:刘明华 唐桂刚 孙保和 毛剑英 王文杰  作者单位:刘明华,孙保和(秦皇岛市环境监测站,河北,秦皇岛,066001)

唐桂刚,毛剑英,王文杰(中国环境监测总站,北京,100029)

刊 名:中国环境监测  ISTIC PKU英文刊名:ENVIRONMENTAL MONITORING IN CHINA 年,卷(期): 21(3) 分类号:X321 关键词:环境信息   地理信息系统   模型   城市  

多维分析应用中的模糊查询算法研究 第3篇

关键词:多维数据库;模糊查询;Edit Distance算法

中图分类号:TP311.131文献标识码:A文章编号:1007-9599 (2010) 14-0000-02

The Fuzzy Query Algorithm Study on Multi-dimensional Analysis Application

Jing Rui

(Local Taxation Bureau of Jilin,Changchun130000,China)

Abstract:An improved Edit Distance algorithm has completed in C# in this paper,and embed into multidimensional reports application on SQLServer ReportingServices.Achieved the fuzzy query function for multidimensional database applications.Number of actual operation application shows that the combination of fuzzy query algorithm with multidimensional dabases is one of the effective ways to improves the practical and the user experience.

Keywords:Cube;fuzzy query;Edit Distance algorithm

在多维数据库中,维度是多维数据集的基本组件。多维数据集逻辑上就是维度成员在空间上构成的超立方体,数据的度量值就存储在这些维度成员的交叉点上。由于数据的度量值事先按着维度的交叉关系聚集,与传统的关系数据库系统相比,多维数据库在查询数度、并发响应能力方面有明显的优势,人们可以通过多维视图来观察、分析和展现数据。

在现有的多维数据库系统中,维度成员及其层次结构是建立在离散化的、完全划分的基础之上的,维度成员彼此分立,并且按着成员属性构建了结构稳定的层次结构。目前成熟的多维数据查询技术只能支持精确维度成员选择。而实际应用,经常会遇到模糊的、不完全的查询条件问题。例如,在基于多维数据库的税收分析系统中,由于业务的特殊性,“一户式分析”是系统被广泛使用功能。而纳税人的基本信息具有非常大的不规则性,并且数量巨大,通过“模糊查询”的方式筛选关注对象,成为基本的用户体验需求。针对这一实际问题,本文利用成熟的Edit Distance算法与ReportingService服务,提出一个多维数据模糊查询机制,并给出实现方法。

一、Edit Distance算法思想

字符串模糊搜索(fuzzy string searching)(通常也成为字符串近似匹配approximate string matching)是一种在一个字符串中查找近似的匹配模板的技术。

1965年俄国科学家Vladimir Levenshtein首先提出了一种算法用于计算计算从原串(s)转换到目标串(t)所需要的最少的插入,删除和替换的数目,这种数据被称为编辑距离(Edit Distance)也叫Levenshtein distance(LD)。基于Edit Distance开发的模糊搜索算法,在计算机技术领域得到广泛应用,除了直接用于数据库查询应用以外,还可应用于自然语言理解、拼写检查、欺诈检测,乃至核苷酸的序列匹配等。

算法的核心思想是利用从源字符串转换成目标字符串所必须的基本操作次数了测量使用字符串的接近程度。通常的基本操作为:

插入:tst→test

删除:test→tst

替换:tent→test

增加一个NULL(这里使用λ)字符后,这三种操作被转换成一种通用的替换模式:

插入:tsλt→test

删除:tλst→tst

替换:tent→test

从上面的介绍中我们可以看到,字符串模糊查找的问题可以转化成两个字符串编辑距离的计算。

两个字符串x和y之间的距离d(x,y)就是从x转换成y所进行的一系列操作的代价。这一系列操作的代价等于每个操作代价之和。所谓的操作是一个δ(z,w)=t变换的有限集,这里z,w是不同的字符串,t是一个正整数。一旦操作已经将一个字字符串z转换成w,就不需要在w上做其他操作。

对于上述的三种常用操作,操作集合可以限定为:

插入:δ(ε,a),即插入字符a

删除:δ(a,ε),即删除字符a

替换:δ(a,b),即对于a≠b,用b替换a。

为了简单起见,可以将每种操作所花费的操作代价定位1。那么,两个字符串之间的编辑距离就可以理解为:“使两个字符串相等所需要的插入、删除和替换操作的最小次数”。

二、算法描述

设:

n,m分别为字符串s和t的长度;

si(i )为字符串s中的第i个字符记;

ti(i )为字符串t中的第i个字符记;

d[n,m]为一个正整数二维矩阵。

则,计算s,t之间编辑距离的函数d(s,t)的算法如下:

Step 1:

如果n=0,返回m,并结束

如果m=0,返回n,并结束

构建n+1*m+1的二维矩阵d[n,m]

Step 2:

将d[n,m]的第一行分别赋值为0……n

将d[n,m]的第一列分别赋值为0……m

Step 3:

检测s中的每个字符(1≥i≤n)

Step 4:

检测t中的每个字符(1≥j≤m)

Step 5:

如果si=tj,则cost=0

如果si≠tj,则cost=1

Step 6:

将距离矩阵的d[I,j]单元格赋值为下面三个数值中的最小值:

(1)该单元格上方的单元格的数值加1:d[i-1,j]+1

(2)该单元格左边的单元格的数值加1:d[i,j-1]+1

(3)该单元格左上方的单元格的数值加cost:d[i-1,j-1]+cost

Step 7:

完成3,4,5,6步骤后,返回d[n,m],得到d(s,t)距离值。

三、算法实现及其改进

在实际应用场合,除了插入、删除和替换三种基本操作以外,相邻字符的交换也是经常遇到的一种基本操作。如下例所示:

交换:tsett→test。

下面是采用C#重写的,改进的Levenshtein distance算法:

public static int LevenshteinDistance(string src,string dest)

{

int[,]d=newint[src.Length+1,dest.Length+1];

inti,j,cost;

char[]str1=src.ToCharArray();

char[]str2=dest.ToCharArray();

for(i=0;i<=str1.Length;i++){d[i,0]=i;}

for(j=0;j<=str2.Length;j++){d[0,j]=j;}

for(i=1;i<=str1.Length;i++){

for(j=1;j<=str2.Length;j++){

if(str1[i-1]==str2[j-1])

cost=0;

else

cost=1;

d[i,j]=

Math.Min(

d[i-1,j]+1,//Deletion

Math.Min(

d[i,j-1]+1,//Insertion

d[i-1,j-1]+cost));//Substitution

if((i>1)(j>1)(str1[i-1]==str2[j-2])(str1[i-2]==str2[j-1]))

{d[i,j]=Math.Min(d[i,j],d[i-2,j-2]+cost);}

}

}

return d[str1.Length,str2.Length];

}

四、ReportingService报表参数的模糊查询

SQL Server 2005/2008的Reporting Services是一个基于服务器的报表平台,可以从关系数据源、多维数据源和基于XML的数据源检索数据、发布可通过多种格式查看的报表。由于报表服务没有内置的模糊条件查询控件,所以在开发报表门户应用时,实现多维数据集的模糊条件查询,成为实现的难点。

笔者在开发税收分析系统多维报表展现平台过程中,利用Reporting Services自行开发了支持模糊查询功能的报表展示门户,成功地利用Levenshtein Distance算法实现了维度成员的模糊查询功能,满足用户对模糊查询的需求,改善了系统的整体客户体检。

关键的实现环节报告如下:

(1)根据报表参数中已有的参数值,获取报表参数区中特定维度的维度成员

private ReportParameter GetParameters()

{

ReportParameter[]rpOUT;

RSPS=new List();

parameterLength=ParameterCollection.Length;

ParameterValue[]pavsIN=new ParameterValue[parameterLength];

int i=0;

foreach(RSParameter rspa in ParameterCollection)

{

pavsIN[i].Label=rspa.ParameterTitle;

pavsIN[i].Name=rspa.ParameterName;

pavsIN[i].Value=rspa.parameterValue;

}

rpOUT=rs2006.GetReportParameters(rsReporURL,null,pavsIN,null);

return(rpOUT);

}

(2)Levenshtein Distance算法对参数区中的维度成员进行模糊过滤

public ListFuzzySearch(string word,ListwordList,double fuzzyness)

{

ListfoundWords=new List();

foreach(string s in wordList)

{

int levenshteinDistance=LevenshteinDistance(word,s);

int length=Math.Max(word.Length,s.Length);

double score=1.0-(double)levenshteinDistance/length;

if(score>fuzzyness)

foundWords.Add(s);

}

return foundWords;

}

将FuzzySearch返回的成员集合转换成报表参数对应的维度成员集后,回传作为报表参数,即完成了多维数据的模糊查询。

五、结论

本文介绍的思路和具体实现方法已在多个系统中的实际运用,使用结果证明Levenshtein distance算法简洁有效,与多维数据库应用结合,极大提高了系统的是实用性,改进了用户体验。

模糊查询算法在多维数据分析中的应用场合还会有许多,如:通过多维数据前端工具,将模糊查询算法与MDX结合,动态生成支持模糊查询的MDX脚本;开发支持模糊查询的报表参数控件,以便最终用户无需变成直接实现多维报表参数的模糊查询等等。

参考文献:

[1]B.J.Oommen and R.K.S.Loke,Pattern recognition of strings with substitutions,insertions,deletions and generalized transpositions

[2]Roy Lowrance,Robert A.Wagner.An Extension of the String-to-String Correction Problem,JACM,1975

[3]Gonzalo Navarro.A guided tour to approximate string matching.ACM Computing Surveys(CSUR)archive,2001,33,1:31-88

[4]刘青宝,金燕.模糊维结构及模糊多维数据模型.FUZZY SYSTEMS AND MATHEMATICS,2008,22,1

SQL多表查询应用探讨 第4篇

查询是数据库中最基本、最常用的操作,包括简单查询、联接查询、嵌套查询。简单查询普遍应用,此处暂不多讲;多表联接查询是查询中应用较广、较为复杂的操作,其运算规则是将所联接的多个表中所有的元组进行笛卡儿积,即表中元组个数相乘,再从中找出符合条件的,这样就大大地增加了运算的负担,往往要耗费大量的CPU时间和内存,为了提高查询速度、提高数据库应用系统的执行效率,我们在编写查询语句时应尽量避免联接查询,如果必须要使用联接查询时也要尽量使用较少的联接表。

1 SQL查询的原则

先给定三个关系模式:(以下实例均以此为例)

学生表(学号,姓名…)→Student(sno,sname…)

课程表(课程号,课程名称,教师姓名)→Course(cno,cname,tname)

成绩表(学号,课程号,成绩)→Score(sno,cno,score)

1.1 尽量使用单表查询

例1、查询李丽老师所教的课程号、课程名称。

分析:在此查询中涉及到的课程号、课程名称、教师姓名三个字段虽然可以在Course和Score表中找到,但在Course表中就可以全部找到,按照尽量使用单表操作原则,SQL语句应为:

SELECT cno,cname FROM Course WHERE tname='李丽'

1.2 必须多表查询时要做到以下几个原则:

1.2.1 联接表时联少不联多

在做多表联接查询时,联接的表的个数尽量少,这样就可以减少查询中参与加工的数据量,从而达到优化时间和空间的目的。

例2、查询选修了“SQL数据库应用”课程的学生的学号和成绩。

分析:此查询中涉及到的学号、成绩和课程名称三个字段,虽然可以在Student、Course和Score表中找到,但在Course和Score中就可以全部找到,按照“联少不联多”的原则,可以只用Score和Course表。SQL语句改为:

SELECT sno,score FROM Score,Course WHERE(Score.cno=Course.cno)AND(cname='SQL数据库应用')

1.2.2 联接表时在“联少不联多”的基础上要能实现联接

在做多表联接查询时,使联接的表的个数尽量少,但是不能一味地追求表的个数,如果表的使用不能达到我们要查询的数据,或者不能实现联接,那也是不成功的。

例3:查询选修了“SQL数据库应用”课程的学生的学号、姓名。

分析:此查询中涉及到学号、姓名和课程名称三个字段,分别在Student和Course表中,但是Student和Course表没有公共属性,不能实现联接,所以必须借助Score表,此查询就变成了Student、Course和Score三表的联接。SQL语句应为:

SELECT sno,sname FROM Student,Course,Score WHERE(Student.sno=Score.sno)and(Score.cno=Course.cno)and(cname=‘SQL数据库应用’)

1.2.3 先筛选后联接

当查询多个数据表时,要先过滤后联接。例4:查询所有成绩大于70分的学生的信息

分析:此查询要做Student,Score两表联接,并筛选出符合条件的记录。SQL语句可为:

此查询语句首先将两个数据表按照学号进行联接,然后再将符合条件的记录筛选。若SQL语句改为:

则首先筛选出符合条件的记录,减少了进行联接的记录个数,然后再执行联接查询,大大提高了查询效率。

1.3 选择合适、高效的查询语句

1.3.1 WHERE条件联接查询

在WHERE子句中使用多个联接条件的查询称为条件联接查询,这种方法容易想到,但查询速度要慢些,上述实例均用此方法。

1.3.2 JOIN…ON…联接查询

常用的是内部联接,联接的结果是从两个或两个以上的表的组合中挑选出符合联接条件的数据,如果数据无法满足联接条件则将其丢弃,与用在WHERE子句中指定联接条件相比,使用INNER JOIN的查询速度要快些,推荐使用后者(其它联接方法此处暂不讲)。

例5:上述例3改为INNER JOIN内联接查询。

SQL语句应为:

1.3.3 嵌套查询

在一个SELECT语句的WHERE子句或HAVING子句中嵌套另一个SELECT语句的查询称为嵌套查询,又称子查询,SQL SERVER执行时,先执行子查询部分,求出子查询部分的值,然后再执行父查询,执行效率高,因此推荐采用子查询。

2 结束语

在数据库的开发和维护过程中,多表查询的优化设计可以大大地提高系统性能,对于数据量大的数据库系统尤为重要。因此编写SQL查询语句时要认真思考、反复切磋,抓住问题的关键,编写出既正确又简练的语句,尽可能提高查询执行的效率,达到事半功倍的效果!

参考文献

[1]顾兵主编.SQL Server数据库技术与应用.北京:清华大学出版社,2010.2.

[2]何文华主编.SQL Server数据库案例教程.北京:电子工业出版社.2008.10.

查询应用 第5篇

在实际应用中,可以将查询结果用表单的列表框控件显示出来。例如,显示职工的编号,姓名及工资的信息

步骤:

1.新建表单,添加三个标签,caption属性分别设为“编号”,“姓名”,“工资”.再添加一个列表框控件list1,

2.将列表框控件list1的rowsourcetype属性设为3(即可用Sql语句选择数据项),再将其rowsource属性设为“select 编号,姓名,工资 from 职工档案”.另外,将list1的columncount属性设为3

3.保存并运行表单。

二。 视图:前面介绍的查询可以很方便的从表中检索出所需的数据,但不能修改所查出的数据。如果既要查询又要修改数据,可以使用视图。视图是数据库的一部分,与数据库表有很多相似的地方。视图是一个虚表,其中存放的是数据库表的定义。在大多数场合下,视图的作用等同于表,数据库表的特性,比如给字段设置标题等, 同样适用于视图。在VFP中,有两种类型的视图:本地视图和远程视图。本地视图能够更新存放在本地计算机上的表,远程视图能够更新存放在远程服务器上的表。

三。创建本地视图:

1.使用命令方式:可以用下列命令直接创建视图:

格式:create sql view 视图名 as select_sql语句

例如,创建视图zgda,选择“职工档案”表的全部信息,命令如下:

create sql zgda as select * from 职工档案

也可以使用已有的select_sql语句来创建视图,只要把select_sql语句存入一个变量,然后用宏替换在create sql view命令中调用即可

例如,上面创建视图的命令,可以改成下列的格式:

x=“select * from 职工档案”

create sql view zgda as &x

2.使用“视图设计器”创建视图的步骤如下

(1)启动“视图设计器”

(2)添加表或视图

(3)建立表间的关联

(4)选择字段

(5)筛选记录

(6)排序记录

(7)设置更新条件,

“视图设计器”的窗口与“查询设计器”窗口相类似,这里不再介绍。

四。使用“视图设计器”创建视图:

1.启动“视图设计器”:

(1)在项目管理器中选择“全部”或“数据”选项卡,选择“本地视图”,单击“新建”按钮,单出“新建本地视图”对话框,如图62

(2)在“新建本地视图”对话框中单击“新建视图”按钮,进入“视图设计器”窗口,与“查询设计器”窗口相比较,除了多了个“更新条件”选项卡之外,其他都是相同的。

2.添加表:步骤如下

(1)打开“视图设计器”窗口后,弹出“添加表或视图”对话框

(2)在该对话框中,选中要添加的表,单周“添加”

3.其余操作同查询

4.设置更新条件:在“更新条件”选项卡中,选中“发送SQL更新”复选框,并设置更新字段,即可使用视图更新基表中的数据

五。视图的使用:

1.视图的打开:

视图不作为单独的文件存在,是数据库的一部分。要打开视图,必须先打开数据库,格式如下:

open database 数据库名

use 视图名

browse

2.显示视图的结构:

如只需要打开视图并显示其结构,而不必下载数据时,可使用带nodata子句的use命令。对于远程视图,这个选项更有用。格式如下:

use 视图名 nodata

browse

3.关闭视图:公关闭视图,用下列命令:

select 视图名

use

关闭数据库中所有表和视图,用下列命令:

close tables

关闭数据库,则库中的表和视图也一起关闭:

查询应用 第6篇

关键词:实现 动态查询 PowerBuilder

中图分类号:TP311.132 文献标识码:A

0 引言

PowerBuilder是现今最为流行的数据库前端开发工具。掌握PowerBuilder开发工具固然重要,但运用开发工具开发一个有效的、易维护的、易升级的、功能强大的管理系统尤为重要。本文利用PowerBuilder开发工具应用在汽配管理系统为例,探讨了汽配管理系统的制作方法,着重研究了动态查询在汽配管理系统中的实现方式,延伸了Powerbuilder开发工具实用性。

1 汽配管理系统的系统分析

本系统是面向汽车配件销售管理的管理信息系统。该系统能对汽车配件行业进行进货、销售、存储的有效管理,且能集中管理汽车配件的应收应付帐,并能实现查询分析统计等功能,及时响应企业汽车配件进销的快速查询和分析,使企业经营运作物流清晰,经营状况一目了然。汽配管理系统数据表结构及表间关系详见图1。

2 动态查询的实现

在PowerBuilder中,动态查询的实现归根结底就是在应用程序中完成一个Datawindow的制作,而可通过SQL语句的转换得来[1]。因此,如何生成SQL语句就成了问题的关键。

分析SQL的SELECT语句:

Select’数据表’.’字段名’from’数据表’

……………第一部分

Where’表间关联条件’and’查询条件’

………………第二部分

从上述分析可以看出:SQL语句是有数据表及其字段、Where子句与表间关联等几部分组成的。寻找和利用其特点,就有可能实现动态查询。

2.1 数据表及字段的选择 数据表及字段的选择是指选择数据库中具体的数据表及所需查询的表字段,完成SQL语句的第一部分制作。在汽配管理系统中,供用户查询的数据表有8个,其中每个数据表拥有多个字段。为方便用户的选择,采用列表选择的方法,分别用两个列表显示数据表及其字段。当用户通过第一个列表选择数据表时,在第二个列表中显示出第一个列表所选择的数据表的所有字段。在第二个列表中,双击所需的字段名。这样的操作就选定了数据表及字段。实现上述选择的关键是:在汽配管理系统中的动态查询模块里,定义了两个字符型实例变量:LS-database[ ]及LS-field,分别容纳所选定的数据表名及字段名字符串[2]。在字段列表框双击事件中,又定义了两个字符型局部变量:Se-database及Se-field分别容纳双击后选定的数据表名和字段名。其实现流程图详见图2。

从图2可知,数组LS-database[ ]及LS-field中存储的内容,便是选定的数据表和字段名。

2.2 WHERE子句的生成 SQL语句的第二部分是Where子句。该子句是SQL语句的一个关键部分,用户正是通过它来满足检索的要求。Where子句是有逻辑关系符、检索字段名、检索操作符及检索值组成。其中逻辑关系符是指在Where子句间的“或者”和“并且”的关系。检索字段名是指用户提出检索要求的字段名。检索值是指对检索字段提出的要求。检索操作符是指检索字段与检索值之间的关系。Where子句的四个组成部分分别由三个下拉列表和一个单行编辑构成,其中检索字段下拉列表项由数据表及字段选择中选择出来的字段名组成。Where子句实现思路:通过循环算法,把多个Where子句的四个组成部分组合起来,形成条件查询子句。

2.3 数据表间的关联 在前两节的基础上即可顺利地选择出与字段,并生成Where子句及SQL语句。这时,制作并未完成。因为数据表间关联这个关键部分还没有解决。在Datawindow的人机交互制作过程中,表间关联可自动生成。但在应用程序里,生成Datawindow的过程必须通过应用程序设计编制才能实现[3]。表间关联的基本思路是:在PowerBuilder的数据库中,表间的关联是固定的,表与表之间的关联情况可以看成为一个二维表的关系。因此,在系统中设计了关系表查询方案,以解决数据表间的关联问题。所谓关系表,是指一个能反映任意两个表相联关系的二维表格。若两个表相关联,则在二维表格交叉栏内填入关联字段。若两个表不关联,则在二维表格交叉栏内填入空格。建立好关系表后,根据在数据表与表字段选择中所选择的数据表名(存储在数组LS-database[ ]中),在关系表中,两两查询关系。若两表关联,根据交叉项中所得的关系在Where子句中填入相应的语句即可完成。

2.4 Datawindow的生成 在表间关联子句生成后,SQL语句的制作便完成了。但如何将SQL语句转换成Datawindow呢?这里需要引进两个函数:SyntaxfromSQL()和Create():

函数SyntaxfromSQL()用于产生一个Datawindow,它拥有三个参数:第一个参数是用于传递SQL语句(即在2.2中所生成的SQL语句);第二个参数用来表示Datawindow的风格;第三个参数是在Datawindow生成过程中出错时保存错误信息。

函数Create(),使用从函数SyntaxfromSQL()中返回的属性信息,在运行状态下建立一个Datawindow。它有两个参数:第一个参数即是从SyntaxfromSQL()函数中返回的字符串变量。第二个参数用在出错时存储出错信息。

在系统中的具体实现代码如下:

String sq1-statement,present,error,answer

SQL-statement=……

//SQL-statement中存储着SQL描述语句

Present =”Style(type=grid)”

// Present 中存储着Datawindow风格等属性

answer=sqlca. SyntaxfromSQL()(SQL- statement, present,error)//产生Datawindow

Dw-1. Create(answer, error)//建立Datawindow

至此完成了动态查询的全部制作,实现了在PowerBuilder中动态查询。

3 结束语

通过以上建立的对数据表及字段的选择,把多个Where子句的四个组成部分组合起来表与表之间的关联看成了一个二维表的关系,运用函数SyntaxfromSQL()和函数Create()生成Datawindow,实现了在PowerBuilder中动态查询。

参考文献:

[1]崔巍.PowerBuilder8.0数据库应用系统开发教程[M].北京:清华大学出版社.2003.1:105-109.

[2]何军.PowerScript语言·事件·函数[M].北京:电子工业出版社.2003.6:255-258.

基于模糊理论的数据查询应用 第7篇

SELECT<字段列表>FROM<表列表>WHERE<条件子句>

通过在条件子句部分增加比较运算符(Between,Like,In等)条件,或与逻辑运算符(Not,And,Or等)叠加来构造更为复杂的查询条件。然而,由于人们主要是使用自然语言,这种传统的方法仍然不能直接处理模糊不确定的信息。比如:在职工管理数据库中,要查询“有点年轻,工资很高”的数据,就不能直接实现。

为达到这种目的,获取模糊查询的结果,通常有两种基本方法:一种是建立模糊数据库模型,通过添加包含模糊属性字段,修改其数据库结构;第二种方法是基于模糊逻辑,依然建立精确的关系数据库,通过构造隶属函数或对SQL语句进行模糊化扩展,将查询条件通过模糊计算,转化为一个模糊范围,再进行精确的SQL查询。该文采用第二种方法,对职工管理数据库含有模糊性的元素进行定义,并通过Visual Foxpro 6.0将模糊查询转化成等价的SQL查询语句,实现模糊查询实例。

1 数据库模糊查询处理流程

“增删改”是数据库的基本操作,为完成这些操作,需要在数据库中查询相应记录,并快速定位。当前的关系数据库基本查询,对于诸如“性别”这类精确字段(性别只能为“男”或“女”),是非常容易实现的。若要查询“年轻、工资高”这类信息,由于具有模糊性,是不能正确定位的。该文以模糊数学和模糊集为理论基础,依据合理自定义隶属函数的方法,提出一种在结合模糊理论的SQL查询方法,并在Microsoft Visual Foxpro6.0平台实现查询实例,处理流程如图1所示。

1.1 模糊语言和模糊集

模糊语言L是包含4个参数的元组,可表示为:L={U,T,E,N},其中,令U是一个论域,T是模糊单词、模糊术语的集合,E表示术语的字母和符号等联结构成的集合。N是T定义在U上的模糊关系,即:E[0,1],且TU。

性别(“男”,“女”)是精确词语,但年龄(年轻,中年,老年)或工资(低,中,高)都属于模糊词语。在所提供的数据库中,字段(年龄,工资)具有模糊性。将这两个模糊集定义如下:

定义1:

年龄:Ua∈[0~100],Ta是模糊集,因此有:Ta={年轻,中年,老年}

定义2:

工资:Us∈[1000~10000],Ts是模糊集,因此有:Ts={低,中,高}

1.2 模糊隶属函数

隶属函数是模糊数学中的基本概念,模糊集合完全由其隶属函数决定,应用模糊数学解决实际问题时,隶属函数的确定非常重要,是应用模糊数学解决实际问题的第一步。

考虑到实体的模糊性,用二值的特征函数{0,1}来表示肯定是不正确的。为了更准确地表达这些属性,使其取值在[0,1]之间,意味着值可以无限。该文以梯形函数构造“年龄”和“工资”的隶属函数。以年龄为例,可将其隶属函数定义如图2所示:

根据图2可得出年龄隶属函数如下:

同样的方法可以定义“工资”的隶属函数:

通过定义的隶属函数,可以解决许多复杂的查询,但为了从职工数据库中查询到更多有价值的信息,比如要查询年龄“相当年轻”,工资“很高”,在属性词前增加了这些词语,称为语气算子。本系统中定义的语气算子有“相当”,“很”,“比较”等。

1.3 语气算子

令Hλ是表示语气的算子,Hλμ(x)=[μ(x)]λ。

假设λ>1,Hλ称为集中化算子;

假设λ<1,Hλ称为散漫化算子,

此处令:H4表示“相当”,H2表示“很”,H1/2表示“比较”。该文中,提供了一种简单

有效的方法:变量young表示模糊集“年轻”的隶属函数;定义变量Z用来作为语气算子的调整值,Z的值是根据用户在查询操作中的选择而变化,在先前的查询中SQL-SELECT查询语句可以作调整。

假设在选择中增加了“相当”,则令Z=0.4,

假设语气词是“很”,则令Z=0.2,

假设语气词是“比较”,则令Z=-0.2

例如:要查询年龄(相当年轻)的记录,可以先通过查询“年轻”隶属度为0.5的记录,然后再通过增加修正值Z的方式,查询附带语气算子的记录,调整后的SQL语句为:SELECT<>FROM<>WHERE young>=0.5+Z,此时因为查询条件中含有“相当”,则Z的值自动会对应成0.4,实际上就将查询“相当年轻”的记录转化成查询“年轻”隶属度>=0.9的所有记录。

1.4 模糊算子

查询中,还有一些词语能表示模糊概念,象“大约”、“大概”等,这类词称为模糊算子,一般的使用形式如下:

μFA(x)=μEA(x)=∨y⊆U(μE(x,y)∧TA(y)).其中A是表示精确的词语,F是模糊算子,E是:

例如:查询“工资”(大约1500)的记录,隶属函数:

这里令δ=50,和隶属度一样,δ主要起到调整模糊范围的作用,“大约1500”则表示工资在1500分别向左右偏移50,1450~1500之间。

2 构建查询实例

在职工管理数据库中,“年龄”和“工资”属于具有模糊性的字段,当数据导入后,可以编写程序根据模糊隶属函数将其转化成各自对应的值并存入表中;查询模糊性数据时,转换成对隶属度的查询,再根据隶属度对条件的满足情况排序生成。

2.1 属性和模糊词语的定义

在职工管理数据库中(该文实例保存为项目文件:职工管理.pjx),文件“人事信息.dbf”用来保存职工个人基本信息,包括:职工号,姓名,出生年月,性别,部门等字段。为实现模糊查询,可以先通过VF编写程序将相应模糊字段的隶属度计算出来后,再分别导出生成新的表,考虑到节约存储空间,该表只存放隶属度及最基本的个人信息:职工号,姓名。比如:存放“年龄”各隶属度的表文件:年龄隶属.DBF,如图5所示,仅包含四个字段:(职工号,年轻,中年,老年),除了职工号,其它三个字段分别存放人事信息表中各条记录对应的年龄隶属值。在导入过程中,操作也并不复杂,因为两个表中通过“职工号”字段关联,则其它的三个字段数据,可以自动准确地被导入,以同样的方法,可以将其它的有模糊性的字段相应的隶属度计算出来存入各自的隶属表中。

2.2 构造SQL查询

模糊SQL查询格式可以表示为:

SELECT<属性>FROM<表>WHERE<模糊条件>

例如:要查询“非常年轻”且“工资很高”的记录,表面意思是:

SELECT*FROM人事信息.dbf WHERE年龄=“非常年轻”AND工资=“很高”

很明显,直接这样书写SQL语句,肯定是不能实现查询的,在这里我们通过以上所介绍的方法,将条件转化成等价的模糊隶属值形式:

SELECT职工号,姓名,部门,年龄,工资FROM人事信息,年龄隶属,工资隶属WHERE;

人事信息.职工号=年龄隶属.职工号AND人事信息.职工号=工资隶属.职工号;

AND年轻>=0.5+z AND高>=0.5+z ORDER BY人事信息.职工号DESC INTO TABLE DBF2

本系统在Microsoft Visual Foxpro 6.0下实现,“模糊查询”模块界面如图6和图7所示:

3 结论

随着智能数据库的发展,模糊查询和模糊化数据的处理及在计算机中的应用必将会有更良好的推广和发展空间。该文主要通过模糊理论和Microsoft Visual Foxpro6.0,结合SQL查询语句实现了人员数据库中模糊查询的功能,提出一种基于关系数据库的模糊查询方法,有一定的借鉴作用。但文中所涉及的隶属函数,是自己设定的,有一定的主观性,在适当的情况下,可以根据实际需要设置调整和适当的扩展。

参考文献

[1]Zadeh L A.Fuzzy logic=computing with words[J].IEEE Trans.Fuzzy Systems,1996(4):103-111.

[2]Dongmei Wei,Liangzhong Yi,Zheng Pei.Application of Fuzzy Query Based on Relation Database[M].ISKE,2007:978-982.

[3]李洪兴.模糊数学[M].北京:国防工业出版社,1994:1-63.

[4]郭富强,鱼滨.基于模糊数据库的数据查询研究[J].微电子学与计算机,2005,22:123-126.

查询应用 第8篇

LINQ是Language Integreated Query的简称, 即语言集成查询, 它是一组语言特性和API, 使得开发人员可以使用统一的方式来编写各种数据查询[1]。从Visual Stu- dio 2010开始, LINQ已经被自动集成到开发环境中。 LINQ可以使用统一的方式编写数据查询。针对不同的查询数据源, LINQ分为LINQ to SQL、LINQ to XML、 LINQ to DataSets、LINQ to Entities、LINQ to Objects。 LINQ连接了数据和编程语言两个领域, 能够配合任何类型的对象或数据源使用, 并提供统一的编程模型[2]。

1基于LINQ to Entities的数据库查询方法

LINQ to Entities提供了查询关系数据库中的实体模型的方式。实体模型可以把数据库中的表、视图和存储过程等数据库对象同步到实体模型中, 使用LINQ to Enti- ties可以直接对这些实体模型进行查询, 开发人员只需着眼于对象模型的开发, 而不需要考虑它们与数据库如何进行交互[3]。 本文以最常见的图书管理系统为例, 探讨LINQ to Entities对数据库进行查询排序的不同方法。图书管理系统中, 图书信息表的数据库设计如图1所示。在进行查询之前, 我们先要从数据库中同步表、视图和存储过程等实体, 在Visual Studio 2010中, 添加实体数据库模型, 如图2所示。

1.1 Lambda表达式

使用Lambda表达式直接对表的结果集进行查询, 对List泛型集合使用Where (o=>o.字段ID==查询字段参数) 可以直接查询到需要的结果集, 下段代码展示了通过图书类型ID、图书名称、作者和出版社等字段对图书信息表进行查询。

排序时使用OrderBy (o= >o.FieldID) 或Or- derByDescending (o= >o.FieldID) 方法对某字段进行排序, 使用ThenBy (o=>o.FieldID) 或Then- ByDescending (o=>o.FieldID) 方法进行其它字段的排序, 在GetBookInfoList方法中的最后一行代码, 通过return result.OrderBy (o = >o.Publisher) .ThenBy (o = >o.Author) .ToList () 可以将查询到的图书信息列表先按照出版社排序, 再按照作者进行排序。

1.2查询表达式

在Visual Studio 2010中, 可以在代码中直接使用强类型化的查询表达式, 最后返回整个表。表1给出了主要查询表达式的关键字及使用方法[4]。在图书管理系统数据库中, 使用下面的一行代码可以直接查询到BoookInfo表的所有数据。

除了直接查询整个表之外, 还可使用where关键字和distinct等关键字进行数据的筛选查询。下面的代码中, 使用where关键字, 通过p.BookName.StartWith (“计算机”) 可以查询到BookInfo表中图书名称以“计算机”开头的所有记录, 通过p.Status=1可以返回BookInfo表中图书状态为1的所有记录。

1.3 CreateQuery () 方法

使用DataContext对象完成一个简单任务, 使用Cre- ateQuery () 方法提取表中的所有数据。通过判断查询条件是否为空, 将查询参数拼接到查询语句中, 对相应字段进行查询。这里的查询语言为Entity SQL, 它和T- SQL语法很相似, 但仍有一定区别, T-SQL对表的查询直接使用select*from [Table_Name], 而Entity SQL的查询语句为select value A Form [Table_Name]AS A[5]。

1.4使用存储过程

在更新实体模型时, 添加存储过程对象, 将存储过程直接映射成带有返回结果集的函数, 并将其作为函数进行调用。在执行查询时, 存储过程可以一次完成对数据库的复杂查询, 减少程序与数据库的频繁交互, 当数据库的数据量十分庞大时, 使用存储过程会大大降低查询数据所需时间, 相应地会缩短响应时间。下面一段脚本给出了完成图书信息表查询功能的一个简单的存储过程, 将图书名称、作者和出版社作为存储过程的参数执行查询。

在实体模型中导入存储过程后, 会自动生成导入函数, 存储过程的参数直接对应着函数的参数, 便于程序调用。但由存储过程生成的函数返回类型默认为字符串类型, 需要将其更换成实体类BookInfo, 如图3所示。如果存储过程返回的不是某张表或视图的信息, 而是一张表或几张表中的几个字段, 可以在图3中点击“获取列信息”按钮, 再点击“创建新的复杂类型”, 便可自动生成包含这几个字段的类, 并作为存储过程导入函数的返回类型[5]。在代码中直接调用该导入函数, 将查询参数传入存储过程的导入函数即可。

2四种方法应用比较

第一种方法:主要基于数据库实体使用Lambda表达式完成查询和排序, 操作简单, 易于调试, 但执行复杂查询时不便于操作, 尤其是进行级联查询时, 通过Entities频繁对数据库进行访问会在很大程度上降低数据查询效率。

第二种方法:使用查询表达式的方法, 可以通过from、where等关键字完成对数据库实体对象的查询, 此方法语法简单, 易于调试, 可以在调试窗口中直接输入表达式判断返回结果是否正确。使用Join、Group等关键字还可以完成复杂的级联查询, 如果返回的不是表或视图对象, 需要手工创建对象类来承载返回的结果集。

第三种方法:用CreateQuery () 方法通过拼接查询脚本执行查询, 和传统的ADO.NET查询数据库的方式比较类似, 但不需要创建SqlConnection和SqlData- Adapter等对象。使用查询脚本的方式进行查询不便于调试, 一旦查询脚本内出现语法错误, 将无法获取正确的查询结果。

第四种方法:在实体模型中可以把存储过程直接映射成带有返回结果集的函数, 存储过程的参数直接对应着函数的参数, 易于调用, 但存储过程需要额外测试和调试 (Visual Studio 2010开始支持对存储过程的调试) 。此方法适用于对字段较多的表进行复杂的多表级联查询, 在执行查询时, 可以一次完成对数据库的复杂查询, 减少程序与数据库的频繁交互, 大大降低查询数据所需时间, 相应也会缩短响应时间, 带来良好的用户体验。当数据量十分庞大时, 这种效率的优势会更加明显。同时, 使用存储过程可以有效地防止SQL注入等安全威胁, 从而大大提升程序的安全性。

3结语

从数据库更新实体模型后, 可以使用不同方法实现对表的查询及排序, 用于程序界面的数据绑定。这几种方法会用到查询表达式, 但不同方法查询表达式的语法会略有区别, 需要开发者特别注意, 以免对开发调试造成干扰。 四种方法的开发难度、访问效率各不相同, 针对不同数据量级别的数据库, 开发者可以选用不同的方法进行有针对性的开发。

参考文献

[1]李明彧.LINQ技术在软件开发中的应用[J].数字技术与应用, 2010 (11) .

[2]胡文君..NET平台下给予LINQ的多层构架的研究[J].电脑知识与技术, 2012 (11) :2512-2514.

[3]韦军, 帅勇.运用LINQ to Entity快速构建信息系统结构[J].科技世界, 2012 (24) :42-43.

[4]CHRISTIAN NAGEL.C#高级编程第七版[M].李铭译.北京:清华大学出版社, 2010.

查询应用 第9篇

1 Access查询的分类

在Access软件中, 其查询功能按照日常使用的功能不同, 可以分为5类:选择查询、参数查询、交叉表查询、操作查询和SQL查询[1]。

(1) 选择查询。从单个或者很多个表中进行数据检索, 有时候还能修改相对应表中存在的相应数据。应用选择查询能对数据库里的记录进行很多操作比如:求和等类型的计算。

(2) 参数查询。参数查询是一类和普通选择查询不一样的选择查询, 它是将条件改变成一种带着设置参数的“通用条件”。参数查询便于作为窗体和报表的基础。

(3) 交叉表查询。交叉表查询可以用来计算, 也可以重新组织信息的结构, 从而让我们更清晰地观察并分析。

(4) 操作查询。通过操作查询我们可以从源头数据里抽取需要的记录, 还可以修改记录。操作查询可以分为:1) 删除查询。从单个或多个的表里删除符合预设条件的相应记录。2) 更新查询。对单个或多个表里的符合预设条件的相应记录进行修改一个字段的数值。3) 追加查询。将单个或多个表里的符合预设条件的相应记录增添到另外的一个表的最后。4) 生成表查询。将我们查询到的结果转存成一个新表。

(5) SQL查询。SQL查询是操作数据库的一种标准语言, 用户使用这种语言就能对任何的数据库进行想要的操作。大多数的查询功能都能通过使用SQL语言得到实现。

2 Access查询实现关键步骤

在Access中, 我们实现查询的关键步骤一般是通过查询向导和使用设计视图。

2.1 使用查询向导建立查询

使用“查询向导”操作起来比较简单易懂, 我们能够在向导的提示下进行一系列的操作。

【例】要求用户建立每一名学生的选课成绩查询, 并在查询里显示出“学号”、“姓名”、“课程名称”、“成绩”等字段。

(1) 在“数据库”的窗口中, 点击“查询”, 之后双击“使用向导创建查询”, 这个时候屏幕上会显示“简单查询向导”的窗口。 (2) 在这个窗口中, 点击“表/查询”右侧的下拉选项, 之后在列表中点击“学生”表。这个时候“可用字段”的选项框中就包括了“学生”表里所有的字段。然后分别选择“学号”、“姓名”的字段, 将所要求的字段增添进“选定的字段”的选项框中。 (3) 点击“表/查询”框右边的下拉按钮, 并且选择“选修”表, 之后选择“课号”、“成绩”的字段, 将这些字段增添到“选定的字段”的选项框中。如下图1中所示。

(4) 点击“下一步”选项, 此时会提示“简单查询向导”的第二个窗口, 在这个窗口中, 用户将要选择采用的是“汇总”查询还是“明细”查询。如果选择的是“汇总”查询, 就会对某一组或全部的记录进行不同的统计, 比如统计出学生的总成绩;如果选择的是“明细”查询, 就会查看到详细信息。我们在这里选择“明细”查询, 结果如图2所示。

(5) 之后点击“下一步”, 显示的结果请看图3。 (6) 在“请为查询指定标题”的文本框里输入“学生成绩查询”, 之后点击“打开查询查看信息”。 (7) 点击“完成”的按钮, 此时Access的查询结果会显示到屏幕中, 如图4所示。

本次查询不但显示了学生的学号、姓名和所选课程的名称, 还显示出了选课的成绩, 它涉及到了“学生”、“选修”这两个表。

2.2 使用设计器创建查询

使用设计器创建查询, 不但能够建立不同种类的查询, 还能够快捷地对查询进行想要的修改。查询的设计器是由两部分来构成:设计视图上端显示的是新建的查询所用表的对象, 下端表示的是设计器里的表格。

开启设计视图方法有两种, 一是建立新的查询, 二是打开已经存在的查询。【例2】查询学校全体教师的工号、姓名、院系名称以及基本工资。

操作步骤: (1) 打开查询设计视图; (2) 选择相对应的源数据; (3) 设置字段、表、排序等选项; (4) 双击表的关系的连线来编辑不同表之间的关联, 包括:联接的字段和联接的类型等。 (5) 点击工具栏上的“运行”, 就能够看到查询结果。

3 Access查询中常出现的问题以及解决方法

(1) 在进行多个表查询的时候, 弹出提示“有表孤立于查询”。这说明有的表之间还没有建立起连接, 解决办法就是重新建立他们的连接。 (2) 在查询中修改数据后, 源表中的数据也改变了。这是因为查询与表的默认相关联的。解决办法就是在设计图里选择“查询属性”, 将“记录集类型”改成“快照”。 (3) 不要再在单个的查询的表达式中的条件两端加引号, 因为系统会自动的添加上。

4 Access查询优化方法

(1) 创建查询时不能添加多余的字段, 只需要添加自己需要的就可以。 (2) 如果不经常更改数据, 可以使用生成表进行查询, 然后通过查询结果来建立表。 (3) 在建立交叉表查询的时候最好使用固定题目。

5 结语

Access信息的处理有着无比快捷方便的优势, 这里由于篇幅有限, 只是对一些方法进行了粗略的概述。使用者若想更熟练的掌握Access, 应该在日常工作中加强练习, 争取早日掌握Access的各种操作与应用, 这样才会使平时的工作事半功倍。

摘要:Access软件主要是进行数据检索并对数据进行分析、计算、更新及其它加工处理的数据库, 并最终提供一个相关数据项的统一视图。本文研究将逐条阐述Access中查询的分类, 给出对不同查询实现关键步骤, 介绍在日常应用中常见问题的解决方案及查询的优化方法。通过Access软件的查询功能, 我们可以快捷地对各种信息进行汇总、平均等统计学分析。

关键词:Access,查询,查询分类,应用

参考文献

[1]商广伟.Access查询及其应用技巧[J].计算机与现代化, 2008 (5) :125.

查询应用 第10篇

●无法做到百分之百杜绝病毒入侵, 仍旧存在被病毒攻击的可能;

●需要一笔不小的投入。

我们日常需要对硬盘播出系统数据中节目单、上载素材目录及播后数据信息进行大量处理, 主要有查询、备份及归档等工作, 这些数据经常要发送到办公网中供各个部门接收, 因此, 办公网与播出系统联网很有必要, 由于办公网与公网互联, 病毒十分活跃, 如采用现有防火墙技术进行联网, 必然存在风险, 也需要一笔不小的投入, 因此我们自主研发了播出数据安全发布查询系统软件, 项目核心技术为采用串口连接播出系统网与办公网的数据服务器, 实现播出网与办公网之间的数据交换、信息发布、查询及数据备份, 让用户通过IE浏览器就可在任何互联接入端根据权限查询和下载数据。

一软件研发的背景

网络化的硬盘播出系统启用后, 为确保系统的绝对安全, 播出网与外界严格隔离, 断绝与外网的连接, 封闭所有USB等通用数据接口, 严禁任何U盘、软盘、光盘等移动存储设备在网络中使用。如总编室、监审组及广告部等相关部门需要获取节目单及播后数据, 必须由播出部的技术人员从硬盘播出系统数据库中检索出数据后, 抄录给相关部门, 这样的方式费时费力, 容易出错, 如果发生误操作, 将会影响播出系统的正常运行。为此, 我们认真研究, 找到安全隔离病毒方法, 使硬盘播出网与办公网安全互联, 实现高效自动的播出数据在办公网乃至公用互联网上发布查询。

二软件的主要功能

播出数据安全发布查询软件是我们自主研发的一套为解决播出网与办公网安全互联, 安全读取硬盘播出系统中的数据进行发布, 提供播出数据网络化处理的软件, 主要有以下功能:

●实现办公网可安全读取播出网的数据, 安全可靠的隔断外网病毒入侵播出网, 向外提供数据的同时不降低系统原有安全性;

●用户通过办公网任何终端的IE浏览器即可查询播后数据;

●用户通过任何可以接入互联网的移动终端如手机、PDA、笔记本电脑等可查询播出数据;

●实现播出系统数据自动安全备份到系统外设备;

●实现对用户查阅数据的权限进行分级管理。

三系统框图及原理概述

1. 系统组成框图

如图1所示。

2. 实现连网的基本原理

硬盘播出系统内网与信息发布、查询的外网之间由RS232串行线作为桥梁, 分别连接两台数据服务器, 并由我们自行开发的控制软件进行数据转码及收发控制, 实现两个网数据交换功能, 最后由办公网服务器将把来自播出系统的数据先进行转存到自己的数据库中, 再处理发布, 供办公网各部门网络终端查阅, 其中串行口起到病毒隔离作用。

3. 串口隔离病毒的原理

串行端口属于本地短距离小范围点对点数据传送端口, 不是标准网络接口, 不直接用于计算机网络联接, 事实证明, 病毒攻击对象只能为一些已知并广泛使用的程序, 并通过普遍使用的连网接口, 以TCP/IP为主要协议进行传播, 通过对病毒传播原理分析可知, 串行口对病毒传播来讲, 病毒是不会通过串行口进行传播的, 我们正是利用这一点并采用, 加上自行开发的C-S (客户端-服务端) 结构传输过滤程序对串口所传输的数据进行转换过、过滤及精确校验, 实现对病毒的完全隔离。图2为从硬盘播出系统输出数据到办公网络的流程。

四系统构成及软硬件概述

系统构成分为硬件及软件两大部分:

●硬件部分由大洋硬盘播系统的备数据服务器DELL-2850及办公网高性能数据服务器为主要设备, 两服务器由一根RS232连接各自串口, 这样就形成了以数据服务器为中心, 串行端口为桥梁的数据传输纽带, 实现两个子网连网, 进行特定数据传输;

●软件部分由三大块组成, 分别是SQL数据库软件、底层数据交换控制系统软件、办公网用户数据查询系统组成。其底层数据交换控制系统软件、办公网用户数据查询系统由我们自行编写。

软件开发环境为Microsoft VC++6.0及Macromedia Dreamweaver MX2004。

五系统的一些关键技术和功能简述

1. 底层数据交换控制软件系统

底层数据交换控制软件系统由数据库检索、串口收发控制及数据结构转换组成, 程序采用C-S架构即:服务端-客户端, 服务端安装于硬盘播出系统数据服务器上, 客户端安装在办公网数据库服务器上。服务端软件用于控制硬盘播出系统数据服务器通过串口向办公网数据服务器发送数据, 客户端软件用于从串口接收来自硬盘播出系数据服务器发来的数据, 其中包括串行口及数据库控制命令处理、数据校验及病毒过滤。软件操作设置由系统管理员完成, 一般用户无需参与。

播出数据库服务器端流程见图3。

播出数据库服务器端界面见图4。

办公网数据库服务器端流程见图5。

底层数据交换控制软件办公网服务器端操作界面见图6。

(1) 数据库检索输出数据库检索功能

为根据检索条件, 从播出系统数据服务器读取数据, 得到一个记录集, 记录集中保存着符合检索条件的数据集合。在我们的程序中检索条件为“播出频道”、“节目名称”、“起始日期”以及“终止日期”共四种条件。通过对这四个条件组合使用, 满足我们对播出数据筛选需要。

(2) 自定义数据结构及防病毒处理

为了高效有序的组织数据、提高数据传输效率、有效隔离检验病毒, 我们把从数据库中取出的元数据进行结构化处理, 即将一条记录的相关信息, 按特定结构打包成一个492字节的数据块进行发送, 在接收数据时, 只接收及处理符合我们自定义结构的数据, 遇到其他数据将视为病毒不予接收, 有效的防止病毒传入到硬盘播出系统。下面定义了一个用于装载从硬盘系统读出数据的结构体变量, 该数据结构包涵了我们所需要的一条素材的所有数据信息。

(3) 数据库SQL语句过滤

为使用播出系统更加安全的工作, 在层数据交换系统设置有SQL语句命令字符串过滤功能, 管理员可以设置如删除、插入、更新、创建等敏感命令限制, 同时提供自定义命令字符串过滤, 使播出数库的数据安全得到有效的保障。

(4) 串口收发控制

由于我们的硬盘播出系统数据服务器与办公网数据服务器相距较远, 使用了长度为10米的串行线作为数据传输, 为保证数据传输稳定我们设定串行传输速率为9600bps, 采用2进制传输方式, 为保证数据接收完整准确, 采用定长 (492字节) 触发方式进行数据接收。

初始化串口代码:

(5) 数据转存机制

为保证系统安全可靠运行, 我们不采用让用户直接从硬盘播出系统数据服务器中获取查寻数据方法, 而是先将硬盘播出系统的数据进行转存到办公网数据服务器中, 再向用户提供检索服务, 这种运作机制可以避免一些不可预知因素影响硬盘播出系统安全运作。

2. 数据备份

在实现将硬盘播出系统数据服务器中的数据安全转存到办公网数据服务器的过程即为数据备份, 同时各部门 (检索终端) 可用任何一种符合PC规范的存储媒体, 将所需数据检索拷贝出来进行保存, 实现客户数据备份。数据备份模型如图7所示。

3. 数据发布数据发布系统及用户查询系统

数据发布系统主要功能是将硬盘播出系统的数据经办公网数据服务器向办公网及Internet互联网进行发布, 供各终端查询浏览。我们使用Microsoft IIS 6.0作为数据信息发布平台, 向办公网及Internet发布数据。任何可接入互联网的用户终端采用IE浏览器即可通过网络访问办公网数据服务器, 实现对硬盘播出系统数据的查询取阅。

网页形式的终端界面向用户提供了友好的人机交互窗口, 所有连网的计算可通过窗口界面实现以日期时间、节目名称、频道等多条件组合进行数据检索, 操作简便直观。终端用户查询操作界面如图8所示。

六应用效果

播出数据安全发布查询系统完成投入使用后, 播出系统整个数据信息结构体系由原来封闭转向开放共享, 解决了以往从播出系统取数据时, 必须到服务器机房, 对数据服务器进行直接检索操作而带来的操作安全问题, 省去了原来的手工查找抄录既繁琐又不安全的工作, 不同用户可根据权限级别进行查询浏览操作, 播出数据可在Internet任何终端 (包括手机终端) 上查询, 播出数据管理和工作效率实现了质的飞跃。

参考文献

[1]Visual C++/Turbo C串口通信编程实践 (第2版) 龚建伟熊光明电子工业出版社

浅析网管轮询机制的应用和查询 第11篇

网络管理是保证通信网络充分有效地利用各种资源和保持网络可靠运行的重要手段。近年来随着各种通信网络的出现,网络管理的技术发展迅速,本文就网络管理的目标、实现、范围,以及在电信管理网(TMN)框架下的网络管理和新的动向等作一简要的探讨。

网络管理(主要是指电信网络管理)的目标是最大限度地利用网络资源,提高网络的运行质量和效率,向用户提供优质的通信服务。它的实现由管理者、代理、管理信息库,网络管理协议和被管理对象等组成的系统完成。从软件体系结构的角度来看,实现网络管理目标的网络管理系统可主要分为管理者与代理两部分,它们之间遵循客户机/服务器(C/S)结构。管理者是客户机,代理是服务器,也就是通常所说的管理者/代理(M/A)结构。

最早的网络管理是通过电信网直接访问被管理的设备或者使用简单的互联网控制信息协议(ICMP)来实现的。随后出现了北欧广泛采用的TL 1(Transaction Language 1),基于ASCII的网络管理协议。该协议主要用于大型电信设备的管理,所有管理信息都采用纯ASCII文本表示,其特点是简单、易读、易开发和使用,但智能化程度较差。随着TCP/IP协议及其网络的快速发展,出现了简单网络管理协议(SNMP)。它是一种基于轮询的通信协议,由于该协议在代理侧的开销很小,因此功能有限,但其简单易用的特点却得到了许多网络设备厂商的支持,已成为计算机网络管理流行的行业标准。ITU制定的通用管理信息协议(CMIP)主要应用在电信网络管理中,实现了管理者与代理的互联和互操作。CMIP提供了一种“紧耦合”的管理控制,具有许多管理功能。其特点是全面、复杂、开发难度较大,但能完成复杂的网络管理任务。以通用目标请求代理体系结构(CORBA)为标志的分布对象技术为网络管理开辟了一条新途径。CORBA是一种与平台无关的、分布式系统结构。CORBA比SNMP功能强大,也没有CMIP那么复杂。由于其特别适合于分布式处理,已开始在许多领域(如通信、金融、医疗、制造等)里得到应用,并展现了美好的前景。网络管理技术正从无标准到有标准,从低级协议到高级协议,从简单功能到高级功能,从低级无序到高级有序演进。

2 网管轮询

轮询调度模块主要用来接收来自前台、业务模块的轮询申请,然后按照一定的调度算法调度各个业务进行相应的业务轮询。信息的轮询是一个比较耗时、耗资源的操作。如果没有一个同一的调度模块统一调度处理各个模块的轮询,就会很容易出现在同一个时间有大量的轮询任务在对设备进行轮询。这种情况下,网管服务器、主机设备的资源很容易被耗尽,从而不能及时处理其他的用户请求,并且还可能导致网管系统甚至主机系统瘫痪。轮询调度模块就是为了解决这个问题而设计的。

此外,为了保证用户数据尽可能与主机一致,轮询模块还需要完成在设定的时间内进行全网的自动同步。轮询按照申请者的不同主要分为以下几种:手动轮询、同步网元、资源增加轮询、自动轮询等。不同的轮询方式只是其申请者和结束时返回的消息不一样,但是对于轮询调度来说,大体上管理的方式还是一样,这里重点说一下同步网元和自动轮询。

(1)同步网元:当用户向轮询调度申请同步网元时,轮询调度首先判断当前这个任务是否已经存在,如果已经存在则直接返回错误信息,如果不存在,则通知各个业务模块来向轮询调度申请同步网元方式的轮询,轮询调度然后将各个模块申请的轮询任务插入到要执行轮询的任务队列中来,各个轮询任务排队执行,每当一个轮询任务要执行时,轮询调度就会通知相关业务模块进行轮询,同时轮询调度会将该任务插入到正在执行的队列中来并将等待队列中该任务删除,等到该业务模块轮询成功时,业务模块再向轮询调度模块回应一个轮询结束的消息,轮询调度将该轮询任务删除,调度执行下一个任务;如果业务模块可能由于某种原因一直没有回应,轮询调度会根据用户设置超时时间将该任务给删除。当本次申请同步网元的各个业务模块全都调度一遍时,同步网元完成,通知客户端打印同步网元成功的消息。

(2)自动轮询:又叫定时轮询,它与同步网元的处理不同点在于,定时轮询的轮询申请者是定时器,轮询任务结束时处理的方式也有点不同。首先当网管服务器的时间到达某个时间点时,定时器定时帮各个设备触发申请定时轮询,轮询处理过程和同步网元的处理一模一样,不同之处在于,每个轮询任务结束时,轮询调度会帮该任务下一次执行的时间计算好并指定下来,以便定时器的触发执行,但是当网管服务器的时间到达结束时间时,轮询调度会将调度执行队列和等待队列中的轮询任务删除掉,自动轮询结束。

轮询调度的时间问题:必须声明一点,轮询快慢跟轮询调度的关系不大,轮询调度只是用来管理各个轮询任务按照一定规则来调度执行一个算法,而不是轮询任务的主干体,真正到设备去轮询各种资源的执行者是各个业务模块,也即是轮询任务的申请者。所以说各个业务模块轮询快慢才是影响整个同步时间的作用者,那么每个业务模块轮询时间当然也是跟设备的资源多少是息息相关的。要真正说轮询一台是设备要多少时间,我是不知道,这里有很多因素,比如:服务器的硬件设施、当时的服务器的工作情况(cpu内存的使用情况)以及主机等等。不过要想知道当时、当地的哪个环境的大概同步时间,你可以直接同步一下网元,看一下他能同步多久,那么自动轮询时,轮询该台设备要需的时间和它差不多。

补充说明:轮询调度只是一个调度机制,而不是真正意义的轮询,真正去设备上轮询是各个业务模块自己干的事情,轮询调度只是用来管理这些轮询任务的。

(1)对于一个设备要轮询那些模块,自动轮询和同步网元一样,一般都是要轮询35个模块,即既所有的业务模块,也就是所有的模块每个模块都会向设备重新取自己需要的信息;

(2)下次轮询某个设备的起始时间在上面已经说过,当该任务轮询结束时,轮询调度会根据轮询间隔重新指定定时器来触发执行,调度方式同上。

(3)如何查看同步信息,看看是否已经同步完成,如果有些网元信息没有同步上来或者没有完成,如何判断;这些东西都可以通过日志信息来查看。

摘要:网络管理是保证通信网络充分有效地利用各种资源和保持网络可靠运行的重要手段。近年来随着各种通信网络的出现,网络管理的技术发展迅速,本文就网络管理的目标、实现、范围,以及在电信管理网(TMN)框架下的网络管理和新的动向等作一简要的探讨。

查询应用范文

查询应用范文(精选11篇)查询应用 第1篇SELECT语句作为SOL语言的核心,可以通过使用WHERE子句实现灵活而复杂的查询操作。其中,可通过使用W...
点击下载文档文档内容为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部