|
发表于 2020-7-22 12:15:01
|
显示全部楼层
呵呵,看来这个问题的难度是不小,综合看来,有多种解决方案,当然问题主要出在Borland身上
1、修改ADODB.pas的源代码,也就是修改从Recordset转换成DataSet的字段定义部分,这个问题很多人讨论过,强行修改decimal的对应关系
2、修改DB.pas的源代码,也就是如果ADO调用的时候直接从Recordset中取数据
3、建立一个新的自定义字段类,譬如TDoubleField,然后自行定义,当然这个时候也得修改ADODB.pas及DB.pas的源代码
以上三种方法是一劳永逸的方法,最好是第3种方法
第4种方法,这种情况适用于此类字段比较少的情况,就是修改字段的GetText和SetText方法,譬如
procedure TForm1.ADOQuery1DecFieldSetText(Sender: TField; const Text: String);
begin
ADOQuery1.Recordset.AbsolutePosition:=ADOQuery1.RecNo;
ADOQuery1.Recordset.Fields[1].Value:=Text;
end;
procedure TForm1.ADOQuery1DecFieldGetText(Sender: TField; var Text: String; DisplayText: Boolean);
begin
ADOQuery1.Recordset.AbsolutePosition:=ADOQuery1.RecNo;
Text:=VarToStr(ADOQuery1.Recordset.Fields[1].Value);
end;
当然,由于Borland的先天不足,实际代码可能还要多一些,要加入很多判断,其实基本原理和前面的方法差不多,就是绕开Borland的字段定义,直接向Recordset中写数据
5、这种方法一般太罗索,就是直接绕开数据感应控件去操作,这样可以随心所欲了。
综合看来,第3种方法最好
|
|