我是用delphi来编程,其间用到了query控件,在程序中动太向QUERY1添加sql语句:
现在我想做一个按日期来查询的功能,我把原代码给你们看一下,
query1.Close ;
query1.SQL .clear;
query1.SQL .add('SELECT * from t_qyrk');
query1.SQL .add('where t_qyrk.birthday>'1990/01/01')
if query1. Prepared =false
then query1.Prepare ;
query1.Open;大家看到'1990/01/01'这句了吗?我就是想用一个文本控件edit1.text或maskedit.text来取代这个具体时间,这样用户就可以输入任意时间来查询数据了,但这样会碰到以下问题:
1. sql语句不会认delphi 变量,无法接受edit1.text传过来的值,该怎么办?
2. edit1.text的值是字符串型,要不要把它改成日期时间型,怎么改,用什么函数来改?我该怎么处理这两个问题?我只知道用sql函数和存储过程可以传递参数,在这里用sql函数和存储过程显然不是我想要的了,我到底该怎么样解决这个问题呢,望大家能帮帮忙,谢谢了!
现在我想做一个按日期来查询的功能,我把原代码给你们看一下,
query1.Close ;
query1.SQL .clear;
query1.SQL .add('SELECT * from t_qyrk');
query1.SQL .add('where t_qyrk.birthday>'1990/01/01')
if query1. Prepared =false
then query1.Prepare ;
query1.Open;大家看到'1990/01/01'这句了吗?我就是想用一个文本控件edit1.text或maskedit.text来取代这个具体时间,这样用户就可以输入任意时间来查询数据了,但这样会碰到以下问题:
1. sql语句不会认delphi 变量,无法接受edit1.text传过来的值,该怎么办?
2. edit1.text的值是字符串型,要不要把它改成日期时间型,怎么改,用什么函数来改?我该怎么处理这两个问题?我只知道用sql函数和存储过程可以传递参数,在这里用sql函数和存储过程显然不是我想要的了,我到底该怎么样解决这个问题呢,望大家能帮帮忙,谢谢了!
query1.Close ;
query1.SQL .clear;
query1.SQL .add('SELECT * from t_qyrk ');
query1.SQL .add('where t_qyrk.birthday>'''+edit1.text+'''') ; //此处的edit1.text 必须是正确的日期格式
if query1. Prepared =false
then query1.Prepare ;
query1.Open;
strSQL:='SELECT * from t_qyrk where t_qyrk.birthday>''@DATE''';
query1.Close ;
query1.SQL.clear;
query1.sql.text:=stringreplace(strSQL,'@DATE',edit1.text,[]);
query1.open;
query1.SQL .clear;
query1.SQL .add('SELECT * from t_qyrk ');
query1.SQL .add('where t_qyrk.birthday>:d') ;
query1.prambyname('d').asdate:=datetimepick1.date;
//或者把上面最后改成:strtodate(edit1.text);
//如果你输入错误会产生异常,所以换个控件比较好,个人意见!
if query1. Prepared =false
then query1.Prepare ;
query1.Open;
把字段t_qyrk.birthday就改成一般的文本格式比如char(10),好不影响你的使用,然后就可以直接这样使用了 where t_qyrk.birthday> '''+Trim(edit1.text)+'''如果你用的是一个显示日期的那个控件来代替edit的话,那可以这样,假设那个控件取名为date1 where t_qyrk.birthday> '''+datetimetostr(date1.datetime)'''
SQL将'"+trim(edit1.text)+"'转换成tinyint时发生语法错误
我现在是延用别人的数据库,就是说在别人的数据库上开发软件,那数据库里已有很多数据,且这个数据库已经推广出去了,不能随便更改的但我还是有点不明白:where t_qyrk.birthday> '''+Trim(edit1.text)+'''或
where t_qyrk.birthday> '''&edit1.text%'''这两种为何都是提示语法错误,用不了
---------------------------------------------
这句编译能通过么?----------------------------------
if query1. Prepared =false
then query1.Prepare ;典型的初级写法,最起码写成这样啊
if not query1. Prepared then
then query1.Prepare ;其实,根本不用判断,直接prepare就是了再其实,根本不用prepare,直接open就可以了!!代码写成这样,也难为你了至于你的问题么1. sql语句不会认delphi 变量,无法接受edit1.text传过来的值,该怎么办?
-----------
不是它不认,而是你不会让它认2. edit1.text的值是字符串型,要不要把它改成日期时间型,怎么改,用什么函数来改?
-------
strtodatetime
只要测试最后sql是不是正确就可以了!