1.各位:有没有踫到过在客户端(用Access数据库)发送数据表到服务器端(用SQL 2000)处理后返回,表里面的浮点类型的字段显示在DBGridEh中会出现保存到小数点后10位左右?(但是Access里面的相应字段的数据就不会出现这种情况。) 怎样解决???2.另外,有关于继承关键字的问题:inherited 写在子类过程方法里面的开头或结尾,有没有区别?
能否说明理由?!!!
(这是我困惑很久的问题,自己认为应该有区别,不知是否?)谢谢!!!

解决方案 »

  1.   


    1 . 我这儿怎么对的 ?  要不 Format() 一下 ?2 . 一般开头,写在结尾也可以,从效果上应该没有区别
      

  2.   

    应该有些不一样, 假若在override窗体的Destray中 先inherited , 再释放自己组件中声明的对象,会不会就出问题了
      

  3.   

    to wjlsmail(计算机质子)
      刚刚msn你那边掉线了。
     
      还好你看到我的问题。^_^//我这儿怎么对的 ?  要不 Format() 一下 ?
    偏偏我这里就出现这个问题。如
    Access数据库相应字段的值为  2000.21
    但是在DBGridEh里面显示的值为 2000.21997070313
    另外,如果是整数值如2000的话就没问题。
      

  4.   

    2、当然有区别啦,关系到代码执行的顺序,inherited就代表父类中的代码,放在子类的后面就表示父类中的代码在子类的代码之后执行。
      

  5.   

    我Access数据库里面
    字段类型   数字
    字段大小 双精度型
    小数位数 2
      

  6.   

    to flyingkiller(大飞虫):我试过在处理消息的时候那个位置好像没区别?
      

  7.   

    我的第一个问题简单一点说就是:
    存放在Access数据表里面的浮点数据没错,但是显示到DBGridEh的时候就出现多达11位的小数点。
      

  8.   

    flyingkiller(大飞虫)  :我是说效果上没有区别  当然了,您说的对:)
      

  9.   

    inherited 就是 父类  ,可以这样说么 ? :)
      

  10.   

    to wjlsmail(计算机质子):
    象在类的Constructor事件中,如果把初始话私有字段的代码放在inherited Create(AOwner);
    后面有的书上说是赋默认值,但不知放在其上面是什么意思,如下面的1和2种情况?
    Constructor Create(AOwner);
    begin
      //2.FField:= 'asdf';
      inherited Create(AOwner);
      //1.FField:= 'asdf';
    end;
      

  11.   

    你在SQL中用的是Float数据类型吗?你在写SQL语句的时候就Round(float,number)才行.主要原因是在SQL上.
      

  12.   

    to jacker79(天街小雨)
    我是通过查询语句显示在DBGridEh中。而且在数据库表里的值没问题。
      

  13.   

    Constructor Create(AOwner);
    begin
      //2.FField:= 'asdf';  // 从逻辑上说觉得这就不通,您说呢 ? 觉得还是应该放在下面
      inherited Create(AOwner);
      //1.FField:= 'asdf';
    end;
      

  14.   

    Inherited 写在前面是说明先执行父类的程序在执行当前的程序,后面的话则相反。
    是个顺序问题。
      

  15.   

    Constructor Create(AOwner);
    begin
      //2.FField:= 'asdf';  //原以为这样写会给一个提示 ? why ?
      inherited Create(AOwner);
      //1.FField:= 'asdf';
    end;
      

  16.   

    抱歉,上面原先的写少了AOwner的类型。
    Constructor Create(AOwner: TComponent);
      

  17.   

    有区别
    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.
      

  18.   

    但这个就是没有区别 ,why ?-----------------------------------------------unit Unit1;interfaceuses
      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.
      

  19.   

    明白了:) ,在概念上应该都没错,Inherited 就是初始化子类为父类(对Inherited 的方法或者函数也同样含义),然后在继承的基础上改进 ,是么 ?谢谢 xzgyb(老达摩) 老师:)
     
      

  20.   

    to wjlsmail(计算机质子) :
    我觉得是已经创建了,我的理解是:创建一个实例时,首先为这个实例分配一个内存空间,然后调用缺省构造函数。
      

  21.   

    Constructor TMyEdit.Create(AOwner: TComponent) ;
    begin
      s := '1234' ;
      Inherited ;
      //  s := '1234' ;    //竟然同样 ? 应该有区别的,因为放上面时还没有创建类
    end ;当然同样,调用到TMyEdit.Create这时其实该类的实例已经分配好了内存,
    s是TMyEidt的数据成员,它的初始化
    放上放下没有关系
    但一般构造函数放前面
    析构函数放后面
      

  22.   

    procedure TB.IsShow(var bA: Boolean);
    begin
      inherited;              //先继承再改进
      bA := False; 
    end;procedure TB.IsShow(var bA: Boolean);
    begin
      bA := False; 
      inherited;              //重新用父类初始化了子类,因此 bA = True ;
    end;
      

  23.   


    to wjlsmail(计算机质子):能否说具体些?谢谢!!!
      

  24.   

    //procedure TB.IsShow(var bA: Boolean);
    //begin
    //  bA := False; 
    //  inherited;              //重新用父类初始化了子类,因此 bA = True ;
    //end;inherited应该是调用TA.IsShow,并没有重新初始化子类。
      

  25.   

    sysu(死树) : 您说的对:)xzgyb(老达摩) : i see :) ,一般用的时候还是放前面多些,只是在截获消息时放在后面 ,对吗 ?
      

  26.   

    sysu(死树) : 我的表达有误:), 不适合本例但更适合更多的情况:),因为更多的调用Inherited是用来初始化子类(甚至包括取得祖先类消息句柄),对吗 ?procedure TB.IsShow(var bA: Boolean);
    begin
      bA := False; 
      inherited;              //重新用父类初始化了子类,因此 bA = True ;
    end;
    // Same as
    procedure TB.IsShow(var bA: Boolean);
    begin
      bA := False; 
      bA := True ;
    end;
      

  27.   

    to wjlsmail(计算机质子)procedure TB.IsShow(var bA: Boolean);
    begin
      bA := False; 
      inherited;              //重新用父类初始化了子类,因此 bA = True ;
    end;
    // Same as
    procedure TB.IsShow(var bA: Boolean);
    begin
      bA := False; 
      bA := True ;   // inherited;这里应该没有调用bA := True ;吧!只是调用了父类的方法。
    end;
      

  28.   

    wjlsmail(计算机质子):呵呵,应该是的 :)
      

  29.   

    procedure TA.IsShow(var bA: Boolean);
    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;
      

  30.   

    哦!!!忘记参数前有个 var