我是delphi 2007,安装了DevExpress控件包3.33版。数据库是 sql2000数据库的表里有个comedate字段,我用的是varchar型,TcxGrid里对应的列,我设成了 dateedit 型,结果当表格里的这一个cell为空的时候,选中它,不管是下拉选择日期,还是单纯的选中,都会报错:
  Could not convert variant of type (string) into type (date) 
我猜是把‘’转换成日期的时候无法转换。如果把数据库里 comedate 的类型转换成 datetime型就没问题了。但是我程序里所有与日期相关的地方都是用字符来处理,如果要改,变动太大。哪位兄弟知道有没有哪个设置能避免这个错?或者知道在下拉处理数据之前,先触发了哪个事件,我想在事件里加错误处理代码。现在是一点就报错,一跟就直接进了源码,想加错误处理找不到地方。

解决方案 »

  1.   

    select ISNULL(comedate,1899-01-01) from table
      

  2.   

    另外有个麻烦, 我把所有的字段都加了默认值, 因为 null 很讨厌,不小心查询就出错。
      

  3.   

     在   AdoQuery   这个字段的   onSetText  里处理下  
    if text = '' then Sender.value = 1899-01-01 displayText := false;  
      

  4.   

    starluck 兄的办法好像有点意思,我马上试试
      

  5.   

    sql语句里把这个字段convert成datetime看看即 select a,b,c,convert(datetime,d,120) from t
      

  6.   

    1、设置Properties=DateEdit
    2、Properties.ValidateOnEnter:=false 表示不判断
    3、Properties.DateOnError:=deNull  遇到错误直接变成null版本不同,不晓得你那里有没有2,3属性。
      

  7.   


    sqltext:   select convert(datetime,那个日期,120) from t那个col的GetDisplayText事件里写上procedure TForm1.cxGrid1DBTableView1DBColumn1GetDisplayText(
      Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
      var AText: String);
    begin
      if AText = '1900-01-01' then AText:= '';
    end;
      

  8.   

    starluck 兄的办法思路非常好,但是我们这边因为实现方式的原因有点问题,我没有用 AdoQuery ,我用的是 TcmServiceDataset (从TClientDataset继承来的),显示方法是:
       mySql := 'select * from tab  ' ;
       ServiceDS.CommandText := mySql;
       ServiceDS.Open;
       self.Grid.DataController.DataSource.DataSet := ServiceDS;   就直接在 Grid 里显示出数据来。我现在在 Grid 这一列的 OnGetDisplayText 里加了判定,
        if ServiceDS.FieldByName('comeDate').AsString = '' then
        begin
            ServiceDS.Edit ;
            ServiceDS.FieldByName('comeDate').AsString := '1899-01-01';
            ServiceDS.post ;
            AText := '' ;
        end; AText := '' ; 好像没起作用,在外面还是显示出来了 '1899-01-01' 为了客户的界面友好,这个值是不能让它显示出来的。
      

  9.   

    刚才试了一下,iamduo 兄的方法,设置了好像没有用。dinoalex 兄的方法,即
    sql语句里把这个字段convert成datetime看看 ,成功了,谢谢各位兄弟