有关delphi的查询问题(100分)

  • 主题发起人 主题发起人 kexsong
  • 开始时间 开始时间
K

kexsong

Unregistered / Unconfirmed
GUEST, unregistred user!
[purple][/purple]小弟刚学delphi不久,现在有个问题要求教各路英雄:
在应用程序的开发过程中,查询是少不了的事情,当然,用delphi也不例外。比如:有
一个用户查询界面,上面有四个输入框:学号(StuID)、姓名(Nmae)、性别(Sex)和成绩
(Grade).当四个框全为空的时候,要求把全部学生的情况都显示出来;当四个框不全为空
的时候,要求把符合条件的学生情况显示出来。
本人用一般的if。。。else语句也可以编出来,但是语句很多,况且,语句会与查询
参数成2的数量级递增。
所以小弟想请教大虾们,可以用存储过程或者带参数查询或者别的方法能更简单些吗?
小弟感激不尽!!!!!!
 
strSQL:='select * from youtable';
strTemp:='where ';
strYourSQL:='';
if StuID.Text<>'' then
strYourSQL:='stuID='+''''+StuID.Text+'''';
if Nmae.Text<>'' then
if strYourSQL<>'' then
strYourSQL:=' and '+'name='+''''+name.Text+''''
else
strYourSQL:='name='+''''+name.Text+'''';
if Sex.Text<>'' then
if strYourSQL<>'' then
strYourSQL:=' and '+'Sex='+''''+Sex.Text+''''
else
strYourSQL:='Sex='+''''+Sex.Text+'''';
if Sex.Text<>'' then
if strYourSQL<>'' then
strYourSQL:=' and '+'Sex='+''''+Sex.Text+''''
else
strYourSQL:='Sex='+''''+Sex.Text+'''';
if Grade.Text<>'' then
if strYourSQL<>'' then
strYourSQL:=' and '+'Grade='+''''+Grade.Text+''''
else
strYourSQL:='Grade='+''''+Grade.Text+'''';
if strYourSQL<>'' then
strSQL:=strSQL+strTemp+strYourSQL;
qry.sql.clear;
qry.sql.add(strSQL);
qry.active:=True;
 
我想是不是可以这样:
先定义一个查询字符串变量SQLSTR:STRING;
然后:
IF (EDIT1.TEXT='') AND (EDIT2.TEXT='') AND (EDIT3.TEXT='') AND (EDIT4.TEXT='') THEN
BEGIN
SQLSTR:= 'SELECT * FROM TABLENAME;'
END
ELSE
BEGIN
SQLSTR:='SELECT * FROM TABLENAME WHERE ';
IF EDIT1.TEXT<>'' THEN SQLSTR:=SQLSTR + 'StuID ='+EDIT1.TEXT+' AND ' ;
IF EDIT2.TEXT<>'' THEN SQLSTR:=SQLSTR + 'Name ='+EDIT2.TEXT+' AND ' ;
IF EDIT3.TEXT<>'' THEN SQLSTR:=SQLSTR + 'Sex ='+EDIT3.TEXT+' AND ' ;
IF EDIT4.TEXT<>'' THEN SQLSTR:=SQLSTR + 'Grade ='+EDIT4.TEXT+' AND ' ;
SQLSTR[ LENGTH(SQLSTR - 4) ]:=#0;//CUT THE LAST CHAR ' AND '
END;
现在你可以把SQLSTR加入到TQUERY的SQL属性里面然后EXECSQL !
不知道符不符合你的要求?






 
吾认为刘李子像类似edit1.text的用法有误。应该是这样的:
[^] '''+edit1.text+'''
 
declare @stuid varchar(20)
declare @name varchar(20)
declare @sex varchar(2)
declare @grade float

set @stuid=:stuid
set @name=:name
set @sex=:sex
set @grade=:grade

select * from [score]
where
(stuid=@stuid or @stuid is null) and
(name=@name or @name is null) and
(sex=@sex or @sex is null) and
(grade=@grade or @grade is null)

在外部传递参数时,如果不输就传递NULL参数。
 
可以使用SQL语句中的Like子句来查询。
Exp:

Query1.SQL.add('select * from YourTable '+
'where StuID like '+#39+'%'+edt_StuID.Text+'%'+#39 +
' and Name like '+#39+'%'+edt_Name.Text+'%'+#39 +
' and Sex like '+#39+'%'+edt_Sex.Text+'%'+#39 +
' and Grake = '+det_Grade.text);
Query1.Open;

就这么简单!爽呵!

 
我认为GZCYP的比较简单实用,不错。
 
谢谢各位楼上兄弟!!!!!
 
后退
顶部