我是用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函数和存储过程显然不是我想要的了,我到底该怎么样解决这个问题呢,望大家能帮帮忙,谢谢了!

解决方案 »

  1.   


     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;
      

  2.   

    另一种方法:
    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;
      

  3.   

    我试用为你老兄的那种方法了,但提示SQL SERVER从字符串转换成datetime时发生错误,我该怎么转换成datetime型啊?
      

  4.   

    query1.Close ;
     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;
      

  5.   

    哥哥教你这样
    把字段t_qyrk.birthday就改成一般的文本格式比如char(10),好不影响你的使用,然后就可以直接这样使用了 where t_qyrk.birthday> '''+Trim(edit1.text)+'''如果你用的是一个显示日期的那个控件来代替edit的话,那可以这样,假设那个控件取名为date1 where t_qyrk.birthday> '''+datetimetostr(date1.datetime)'''
      

  6.   

    空前老兄的那种方法可以用,但loveend兄的方法却不行,系统提示:
    SQL将'"+trim(edit1.text)+"'转换成tinyint时发生语法错误
    我现在是延用别人的数据库,就是说在别人的数据库上开发软件,那数据库里已有很多数据,且这个数据库已经推广出去了,不能随便更改的但我还是有点不明白:where t_qyrk.birthday> '''+Trim(edit1.text)+'''或
    where t_qyrk.birthday> '''&edit1.text%'''这两种为何都是提示语法错误,用不了
      

  7.   

    query1.SQL .add('where t_qyrk.birthday>'1990/01/01')
    ---------------------------------------------
    这句编译能通过么?----------------------------------
     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
      

  8.   

    如果在SQL里面要加引号的(如字符串)那你在程序中就加进去,如果不用加引号的那你在程序中就直接用+连接字符串就可以了。
      

  9.   

    sql语句本来就是一串字符串,只要你写的格式正确就可以了,没有必要关心变量是什么类型的!
    只要测试最后sql是不是正确就可以了!
      

  10.   

    一个人老兄,从你的名字来看就知道你孤芳自赏,只认自己的程序,不认可别人的劳动,自己编的程序喜欢打包成DLL文件,不给他人看的了。我是一个刚刚从学校毕业的计算机专业的毕业生,不过已改行政府不再做编程的工作了,现在是因为领导要求做一套报表,所以不得不重操旧业,因此有很多地方不懂,才来问大家,只希望能把问题解决了。我承认我水平很低,但我诚心向大家请教问题有何不对?一个人老兄,你说我这句代码query1.SQL .add('where t_qyrk.birthday>'1990/01/01')通不过?那你试编译一下看看行不行?我知道'1990/01/01'是应该写成1990-01-01的,但这句也能编译通过的。同时请一个人老兄查看一下自己的代码,好像也不对吧,不论从德行,还是水平,都不像个程序员哦!