我想查找年龄在两个数之间的项目,该怎么写SQL呢?我这样写怎么没用的?(10分)

R

redwood

Unregistered / Unconfirmed
GUEST, unregistred user!
form2_query1.close;
form2_query1.sql.clear;
form2_query1.sql.Add('SELECT 学号,姓名,年龄,性别,籍贯,出生日期,政治面貌,入学日期,专业,班级 FROM "xueji_main.db" Xueji_main WHERE 年龄>=:age1 and 年龄<=:age2');
form2_query1.parambyname('age1').asinteger := StrToInt(edit25.text);
form2_query1.parambyname('age2').asinteger := StrToInt(edit26.text);
form2_query1.Open;
 
报什么吗?还是结果不符合你的
'SELECT 学号,姓名,年龄,性别,籍贯,出生日期,政治面貌,入学日期,专业,班级 FROM
"xueji_main.db" Xueji_main WHERE 年龄>=:age1 and 年龄<=:age2'
这里还需要'号吗?
 
好象可以写成: where 年龄 betwin StrToInt(edit25.text) and StrToInt(edit26.text);
???我一时又从数据库课的笔记里没有翻到,也不知道是不是可以这样写.
 
form2_query1.close;
form2_query1.sql.clear;
form2_query1.sql.Add('SELECT 学号,姓名,年龄,性别,籍贯,出生日期,政治面貌,入学日期,专业,班级 FROM Xueji_main WHERE 年龄 between '+edit25.text+' and '+edit26.text);
form2_query1.Open;
 
报的是
'''is not a valid integer value'

可是我的年龄是integer的呀

楼上的,这样写也要出错
一楼的,要的,源代码没有提行,这里不提行不行
 
其实我认为没必要用参数我习惯的写法是
with form2_query1 do
beign
close;
sql.clear;
sql.add('SELECT 学号,姓名,年龄,性别,籍贯,出生日期,政治面貌,入学日期,专业,班级 FROM Xueji_main WHERE 年龄 between '+edit25.text+' and '+edit26.text);
//或sql.text:='SELECT 学号,姓名,年龄,性别,籍贯,出生日期,政治面貌,入学日期,专业,班级 FROM Xueji_main WHERE 年龄 between '+edit25.text+' and '+edit26.text';
open;
//showmessage(sql.text);你可以把OPEN屏蔽看看生成的SQL语句
end;
 
顺便说一下日期问题 如果查日期
sql.text:='select * from 你的表 where 出生日期='+''''+输入日期的控件的文本(如edit30.text)+'''';
希望能对你有帮助
 
查询日期字段的格式应该是这样子的:
SELECT …… WHERE 年龄 = 1980/12/14
 
sql.add('SELECT 学号,姓名,年龄,性别,籍贯,出生日期,政治面貌,入学日期,专业,班级 FROM Xueji_main WHERE 年龄 between '+edit25.text+' and '+edit26.text);
不能通过!!
改成
form2_query3.sql.Add('SELECT 学号,姓名,年龄,性别,籍贯,出生日期,政治面貌,入学日期,专业,班级 FROM "xueji_main.db" Xueji_main WHERE 年龄 between '+StrToInt(edit25.text)+' and '+StrToInt(edit26.text));
也不行
又改成
form2_query3.sql.Add('SELECT 学号,姓名,年龄,性别,籍贯,出生日期,政治面貌,入学日期,专业,班级 FROM "xueji_main.db" Xueji_main WHERE 年龄 between StrToInt(edit25.text) and StrToInt(edit26.text)');
通过,却在运行时说什么能力不行
 
如果有肯能你把代码传给我我看看怎么我看着呢么乱呀lyjnew@163.com
 
我写的时候没有加文件名
form2_query3.sql.Add('SELECT 学号,姓名,年龄,性别,籍贯,出生日期,政治面貌,入学日期,专业,班级 FROM "xueji_main.db" Xueji_main WHERE 年龄 between '+edit25.text+' and '+edit26.text);
你那么写或产生SQL语句就是SELECT 学号,姓名,年龄,性别,籍贯,出生日期,政治面貌,入学日期,专业,班级 FROM "xueji_main.db" Xueji_main WHERE 年龄 between StrToInt(edit25.text) and StrToInt(edit26.text)
没有把edit25.text和edit26.text认作变量
 
很简单,先将通过现在的日期和需要的年龄界限,计算出出生日期的界限。比如对于今天:
2002年5月4日,需要查12~20岁的,那么就是生日在1982年5月4日到1990年5月4日之间的
 
腾龙我想他的年龄应该设成的是整型数据
 
輸入年齡段以後,先算出是哪年哪月哪天到哪年哪月哪天
再放到sql語句裡面就不用寫的那麼復雜了

begindate:=now-365*spinedit1.value;
enddate:=now-365*spinedit2.value;
query1.add:='select ****** where BirthD1>:begindate and BirthD1<:enddate';
query1.params.parambyname('begindate').asDatetime:=begindate;
query1.params.parambyname('enddate').asDatetime:=enddate;
 
你建立库的时候年龄是什么类型,如果是CHAR那就不行,将你的库的年龄改为INTEGER
 
年龄先设成整型,然后再对edit.text用trim去掉多余的空格,这样试试:
SELECT 学号,姓名,年龄,性别,籍贯,出生日期,政治面貌,入学日期,专业,班级 FROM "xueji_main.db" Xueji_main WHERE 年龄 between StrToInt(trim(edit25.text)) and StrToInt(trim(edit26.text))

 
注意一下日期型,数字型,字符串之间的类型转换就行了。
各种数据库都提供了这方面的转换函数。
 
我的年龄设置是integer!主要问题是不认age2这个变量,后来发现是不认放在后边的变量,而不管是age1还是age2
 
你的第二个冒号“:”确定是半角的吧,不会输入成中文冒号了吧?
 
我确定符号方面都没有问题
 
顶部