Delphi用参数处理Data有问题,建议直接用字符串进行操作
即sql.add('where arr_dt=' + DateTimeToStr(rzdatatimepicker1.date));
还有,在用parambyname前,最好加上
unprepare;实际上,从实际应用中,常把日期类型采用字符串类型代替
即 2000-12-10 -> '20001210'
这样有利于数据库的转换,在程序处理中也不会产生处理上的奇异。

解决方案 »

  1.   

    已经prepare了,当然要unprepare,但你也可以不用。
      

  2.   

    steps,使用您教的方法后,报如下错误:type mismatch in expression
    procedure Tfindoutm.RzButton3Click(Sender: TObject);
    begin
    with query1 do
    begin
    close;
    sql.clear;
    sql.add('select * from account');
    sql.add('where Arr_dt=' + DateToStr(rzdatetimepicker1.date));
    //sql.add('where arr_dt=:adt');
    sql.add('order by acct_num');
    //parambyname('adt').asDate:=rzdatetimepicker1.date;
    prepare;
    open;
    end;
    end;
      

  3.   

    我是这样写的,没问题,我用的是Access数据库
          with sqlSourceTemp do
          begin
            Close;
            with SQL do
            begin
              Clear;
              Add('INSERT INTO SourceTemp (stEmpNo,stDate,stTime,stClockID)');
              Add('VALUES(:a_EmpNo,:a_Date,:a_Time,:a_cID)');
            end;
            Unprepare;
            ParamByName('a_EmpNo').Value := Number;
            ParamByName('a_Date').Value := dtDate;  //日期类型
            ParamByName('a_Time').Value := dtTime;  //日期类型
            ParamByName('a_cID').Value := bClockID;
            Prepare;
            ExecSQL;
            Close;
          end;
      

  4.   

    类型不匹配嘛
    Arr_dt=' + DateToStr(rzdatetimepicker1.date);
    Arr_dt是日期类型
    DateToStr(rzdatetimepicker1.date)是字符串
    其实你第一次的sql语句不错,是参数传输错误。
    rzdatetimepicker1.date是从哪里来的?类型对不对?
    你可以在
    parambyname('adt').asDate:=rzdatetimepicker1.date;
    这句后加showmessage(parambyname('adt').asstring);
    看看负之后的结果,也可以显示你的sql语句看看对不对
      

  5.   

    procedure Tfindoutm.RzButton3Click(Sender: TObject);
    begin
    with query1 do
    begin
    close;
    sql.clear;
    unprepare;
    sql.add('select * from account');
    sql.add(' where Arr_dt=:adt');//空一格
    sql.add(' order by acct_num');//空一格
    parambyname('adt').asDate:=rzdatetimepicker1.date;
    prepare;
    open;
    end;
    end
    空格问题。
      

  6.   

    sql.add('select * from account where arr_dt=:adt');
    parambyname('adt').asdatetime:=rzdatetimepicker1.datatime;
    open;
    //try again
    //order by 去之.
      

  7.   

    试以,他说:query1:parameter 'adt' not found
      

  8.   

    with query1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select * from MyTable where My_DateField>=:date1 and MyDateField<=:Date2');
      ParamByName('date1').AsDatetime:=date1.datetime;
      ParamByName('date2').AsDatetime:=date2.datetime;
      Open;
    end;