我是delphi 2007,安装了DevExpress控件包3.33版。数据库是 sql2000数据库的表里有个comedate字段,我用的是varchar型,TcxGrid里对应的列,我设成了 dateedit 型,结果当表格里的这一个cell为空的时候,选中它,不管是下拉选择日期,还是单纯的选中,都会报错:
Could not convert variant of type (string) into type (date)
我猜是把‘’转换成日期的时候无法转换。如果把数据库里 comedate 的类型转换成 datetime型就没问题了。但是我程序里所有与日期相关的地方都是用字符来处理,如果要改,变动太大。哪位兄弟知道有没有哪个设置能避免这个错?或者知道在下拉处理数据之前,先触发了哪个事件,我想在事件里加错误处理代码。现在是一点就报错,一跟就直接进了源码,想加错误处理找不到地方。
Could not convert variant of type (string) into type (date)
我猜是把‘’转换成日期的时候无法转换。如果把数据库里 comedate 的类型转换成 datetime型就没问题了。但是我程序里所有与日期相关的地方都是用字符来处理,如果要改,变动太大。哪位兄弟知道有没有哪个设置能避免这个错?或者知道在下拉处理数据之前,先触发了哪个事件,我想在事件里加错误处理代码。现在是一点就报错,一跟就直接进了源码,想加错误处理找不到地方。
if text = '' then Sender.value = 1899-01-01 displayText := false;
2、Properties.ValidateOnEnter:=false 表示不判断
3、Properties.DateOnError:=deNull 遇到错误直接变成null版本不同,不晓得你那里有没有2,3属性。
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;
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' 为了客户的界面友好,这个值是不能让它显示出来的。
sql语句里把这个字段convert成datetime看看 ,成功了,谢谢各位兄弟