问题是这样的。打开窗口,然后点击“查询” 查询的语句是:
 with ADOQuery_cx do
  begin
  close;
  sql.Clear ;
  sql.add('select * from cxinfo  where riqi = #'+FormatDatetime('yyyy-mm-dd',DateTimePicker1.Date)+'# ');
  Open ;
 end;
这样在DBGrid 里显示我想要的数据,然后点击“添加”, 数据是添加了,但是DBGrid没有更新。如果我再点击“查询”的话,程序报错:could not convert variant of type(null) into type (double)。 如果我关闭这个窗口,然后再打开这个窗口,点击“查询”, DBGrid 里就显示了添加后的数据。
奇怪的是每回如果打开窗口第一次点击“查询”什么问题都没有,就是不点击“添加”如果第二次点击“查询”,也会是同样的报错。
晕啊,不能每回都要关闭窗口,再打开吧。
还有,请指教怎样吧日期“11/29/08” 转换成“2008-11-29”
请大家指点。谢谢了。

解决方案 »

  1.   

    你添加是用什么方法添加的,如果是用insert into添加的必须要刷新数据集,才能显示数据,
    如果用query。append添加的不显示数据,那是因为你的过滤条件过滤调了could not convert variant of type(null) into type (double错误一搬是数据库中值为null造成的,“11/29/08” 转换成“2008-11-29”在sql中用convert,在delphi中就用FormatDatetime即可
      

  2.   

    我是用的query.append添加的,不过我没有设置任何过滤条件啊。如果说是默认设置的,怎样取消。“11/29/08” 转换成“2008-11-29”在sql中用convert,在delphi中就用FormatDatetime即可
    能给个实例吗?我试过,没有成功。
    谢谢
      

  3.   

    sql里面用:SELECT CONVERT(DATETIME,'11/29/2008',120)
    append不显示估计你的日期不在
    'select * from cxinfo  where riqi = #'+FormatDatetime('yyyy-mm-dd',DateTimePicker1.Date)+'# '); 
    范围内
      

  4.   

    保证DBGrid的datasource的dataset和插入的dataset是同一个即可解决。
      

  5.   

    或者使用UpdateSQL控件,设置相对应的操作
      

  6.   

    不行啊。我现在发现如果我,打开窗口,然后点击“查询” 查询的语句是:
    with ADOQuery_cx do
      begin
      close;
      sql.Clear ;
      sql.add('select * from cxinfo  where riqi = #'+FormatDatetime('yyyy-mm-dd',DateTimePicker1.Date)+'# ');
      Open ;
    end;
    如果我再点击“查询”的话,程序报错:could not convert variant of type(null) into type (double)。 如果我关闭这个窗口,然后再打开这个窗口,点击“查询”, DBGrid 里就显示了数据。
    奇怪的是每回如果打开窗口第一次点击“查询”什么问题都没有,就是不点击“添加”如果第二次点击“查询”,也会是同样的报错。
    晕啊,不能每回都要关闭窗口,再打开吧。请大家指点。谢谢了。 
      

  7.   

    看看你的riqi 字段值是不是为null
      

  8.   

    添加完后,要进行刷新dbgrid才能显示,你出现的错误应该是数据库中的数据有不合标准的。
      

  9.   

    设置断点跟踪看看,你第一次和第二次点击有什么不同?
    可以使用showmessage等方法把sql语句show出来,放到access中看看!能否正确执行?
    有问题要找到结点,总会有办法的。
    尝试使用ctrl+f5 :查看变量的内容
     ctrl+f7获取变量的值