代码如下,程序报错:找不到“实际归还日期” 
我的数据库里的借阅信息表中, “实际归还日期”的初始值为NULL
是不是由于数据库里的信息更新不及时,导致我要使用“实际归还日期”时,其值仍然为NULL? 请教各位大虾。。with data1.ADOjyxx do
         begin
         close;
         sql.Clear;
         sql.Add('update 借阅信息表 set 实际归还日期=:sjghrq where 姓名=:xm and ISBN=:isbn');
         parameters.ParamByName('sjghrq').Value:=datetostr(date());
         parameters.ParamByName('xm').Value:=f;
         parameters.ParamByName('isbn').Value:=e;
         execsql
         end;
    with data1.ADOyhxx do
       begin
       close;
       sql.Clear;
       sql.Add('select 实际归还日期,应还日期 from 借阅信息表 where 姓名=:xm and ISBN=:isbn');
       parameters.ParamByName('xm').Value:=f;
       parameters.ParamByName('isbn').Value:=e;
       execsql
       end;
    if data1.ADOyhxx.FieldByName('实际归还日期').Value>data1.ADOyhxx.FieldByName('应还日期').Value then
      application.MessageBox('此刻,您已超出应还日期','提示',64)
      else
    application.MessageBox('操作成功','提示',64);
    close;

解决方案 »

  1.   

    可能是 with 的问题, 不用with看看,即加上控件名
      

  2.   

    with data1.ADOjyxx do
      begin
      close;
      sql.Clear;
      sql.Add('update 借阅信息表 set 实际归还日期=:sjghrq where 姓名=:xm and ISBN=:isbn');
      parameters.ParamByName('sjghrq').Value:=datetostr(date());
      parameters.ParamByName('xm').Value:=f;
      parameters.ParamByName('isbn').Value:=e;
      execsql
      end;
      with data1.ADOyhxx do
      begin
      close;
      sql.Clear;
      sql.Add('select 实际归还日期,应还日期 from 借阅信息表 where 姓名=:xm and ISBN=:isbn');
      parameters.ParamByName('xm').Value:=f;
      parameters.ParamByName('isbn').Value:=e;
      execsql  //应该是 open
      end;
      if data1.ADOyhxx.FieldByName('实际归还日期').Value>data1.ADOyhxx.FieldByName(' 应还日期').Value then
      application.MessageBox('此刻,您已超出应还日期','提示',64)
      else
      application.MessageBox('操作成功','提示',64);
      close;
      

  3.   


    with data1.ADOjyxx do
      begin
      close;
      sql.Clear;
      sql.Add('update 借阅信息表 set 实际归还日期=:sjghrq where 姓名=:xm and ISBN=:isbn');
      parameters.ParamByName('sjghrq').Value:=datetostr(date());
      parameters.ParamByName('xm').Value:=f;
      parameters.ParamByName('isbn').Value:=e;
      execsql
      end;
      with data1.ADOyhxx do
      begin
      close;
      sql.Clear;
      sql.Add('select 实际归还日期,应还日期 from 借阅信息表 where 姓名=:xm and ISBN=:isbn');
      parameters.ParamByName('xm').Value:=f;
      parameters.ParamByName('isbn').Value:=e;
      execsql;    //应该是 open
      end;
      if data1.ADOyhxx.FieldByName('实际归还日期').Value>data1.ADOyhxx.FieldByName(' 应还日期').Value then
      application.MessageBox('此刻,您已超出应还日期','提示',64)
      else
      application.MessageBox('操作成功','提示',64);
      close;
      

  4.   

     parameters.ParamByName('xm').Value:=f;
      parameters.ParamByName('isbn').Value:=e;
      execsql();
      

  5.   

     execsql---没有返回值 比如update
    open----返回数据 比如使用select
      

  6.   

    select 后面还接EXEC?  OPEN!
      

  7.   

    正解
    还有利用
      if data1.ADOyhxx.FieldByName('实际归还日期').Value>data1.ADOyhxx.FieldByName(' 应还日期').Value
    .value  有可能返回 null 如果是返回 null比较会出错的。。改成这样好点 
      if data1.ADOyhxx.FieldByName('实际归还日期').AsDatetime>data1.ADOyhxx.FieldByName(' 应还日期').AsDatetime