1.各位:有没有踫到过在客户端(用Access数据库)发送数据表到服务器端(用SQL 2000)处理后返回,表里面的浮点类型的字段显示在DBGridEh中会出现保存到小数点后10位左右?(但是Access里面的相应字段的数据就不会出现这种情况。) 怎样解决???2.另外,有关于继承关键字的问题:inherited 写在子类过程方法里面的开头或结尾,有没有区别?
能否说明理由?!!!
(这是我困惑很久的问题,自己认为应该有区别,不知是否?)谢谢!!!
能否说明理由?!!!
(这是我困惑很久的问题,自己认为应该有区别,不知是否?)谢谢!!!
1 . 我这儿怎么对的 ? 要不 Format() 一下 ?2 . 一般开头,写在结尾也可以,从效果上应该没有区别
刚刚msn你那边掉线了。
还好你看到我的问题。^_^//我这儿怎么对的 ? 要不 Format() 一下 ?
偏偏我这里就出现这个问题。如
Access数据库相应字段的值为 2000.21
但是在DBGridEh里面显示的值为 2000.21997070313
另外,如果是整数值如2000的话就没问题。
字段类型 数字
字段大小 双精度型
小数位数 2
存放在Access数据表里面的浮点数据没错,但是显示到DBGridEh的时候就出现多达11位的小数点。
象在类的Constructor事件中,如果把初始话私有字段的代码放在inherited Create(AOwner);
后面有的书上说是赋默认值,但不知放在其上面是什么意思,如下面的1和2种情况?
Constructor Create(AOwner);
begin
//2.FField:= 'asdf';
inherited Create(AOwner);
//1.FField:= 'asdf';
end;
我是通过查询语句显示在DBGridEh中。而且在数据库表里的值没问题。
begin
//2.FField:= 'asdf'; // 从逻辑上说觉得这就不通,您说呢 ? 觉得还是应该放在下面
inherited Create(AOwner);
//1.FField:= 'asdf';
end;
是个顺序问题。
begin
//2.FField:= 'asdf'; //原以为这样写会给一个提示 ? why ?
inherited Create(AOwner);
//1.FField:= 'asdf';
end;
Constructor Create(AOwner: TComponent);
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DateUtils;type
TMainForm = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; TA = class
protected
procedure IsShow(var bA: Boolean); virtual;
public
procedure Show;
end; TB = class(TA)
protected
procedure IsShow(var bA: Boolean); override;
end;var
MainForm: TMainForm;implementation{$R *.dfm}procedure TMainForm.FormCreate(Sender: TObject);
beginend;{ TA }procedure TA.IsShow(var bA: Boolean);
begin
bA := True;
end;procedure TA.Show;
var
Result: Boolean;
begin
IsShow(Result);
if Result then
ShowMessage('Show')
else
ShowMessage('Not Show');
end;{ TB }procedure TB.IsShow(var bA: Boolean);
begin
inherited; //放前放后当然就不一样了
bA := False;
end;procedure TMainForm.Button1Click(Sender: TObject);
var
b: TB;
begin
b := TB.Create;
b.Show;
b.Free;
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; TMyEdit = Class(TEdit)
Private
s : String ;
Public
Constructor Create(AOwner: TComponent) ; Override ;
function Guage : Boolean ;
End ;var
Form1: TForm1;
MyEdit : TMyEdit ;implementation{$R *.dfm}Constructor TMyEdit.Create(AOwner: TComponent) ;
begin
s := '1234' ;
Inherited ;
// s := '1234' ; //竟然同样 ? 应该有区别的,因为放上面时还没有创建类
end ;Function TMyEdit.Guage : Boolean ;
begin
Result := Length(s) > 10 ;
end ;procedure TForm1.FormCreate(Sender: TObject);
begin
MyEdit := TMyEdit.Create(Self) ;
with MyEdit do
begin
Parent := Self ;
Top := 20 ;
Left := 20 ;
Height := 20 ;
Width := 40 ;
Text := s ;
end ;
if MyEdit.Guage then
Caption := 'ok'
Else
Caption := 'No' ; end;end.
我觉得是已经创建了,我的理解是:创建一个实例时,首先为这个实例分配一个内存空间,然后调用缺省构造函数。
begin
s := '1234' ;
Inherited ;
// s := '1234' ; //竟然同样 ? 应该有区别的,因为放上面时还没有创建类
end ;当然同样,调用到TMyEdit.Create这时其实该类的实例已经分配好了内存,
s是TMyEidt的数据成员,它的初始化
放上放下没有关系
但一般构造函数放前面
析构函数放后面
begin
inherited; //先继承再改进
bA := False;
end;procedure TB.IsShow(var bA: Boolean);
begin
bA := False;
inherited; //重新用父类初始化了子类,因此 bA = True ;
end;
to wjlsmail(计算机质子):能否说具体些?谢谢!!!
//begin
// bA := False;
// inherited; //重新用父类初始化了子类,因此 bA = True ;
//end;inherited应该是调用TA.IsShow,并没有重新初始化子类。
begin
bA := False;
inherited; //重新用父类初始化了子类,因此 bA = True ;
end;
// Same as
procedure TB.IsShow(var bA: Boolean);
begin
bA := False;
bA := True ;
end;
begin
bA := False;
inherited; //重新用父类初始化了子类,因此 bA = True ;
end;
// Same as
procedure TB.IsShow(var bA: Boolean);
begin
bA := False;
bA := True ; // inherited;这里应该没有调用bA := True ;吧!只是调用了父类的方法。
end;
begin
bA := True;
end;procedure TB.IsShow(var bA: Boolean);
begin
bA := False;
inherited; //重新 ... ,因此 bA = True ;
end;// Inherited 相当于调用了 TA.IsShow(Var bA : Boolean) ; 因此 // Same as
procedure TB.IsShow(var bA: Boolean);
begin
bA := False;
bA := True ;
end;