Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: CL | DM;

Вниз

Очень нужна помощь. Создание компоненты.!!!   Найти похожие ветки 

 
siriusP   (2004-04-29 12:33) [0]

Есть базовый класс:

type
 TBase = class(TComponent)
 protected
   FDataSet: TClientDataSet;
 public
   constructor Create(AOwner:TComponent);virtual;
   destructor Destroy; override;
 public
   function GetValue(aName: Ansistring): Ansistring; virtual;abstract;
   procedure ClearDataSet(); virtual;
 public
   property DataSet: TClientDataSet read FDataSet write FDataSet;
 end;

implementation

 uses DB, SysUtils;

constructor TBase.Create(AOwner:TComponent);
begin
 inherited Create(AOwner);
 FDataSet:= TClientDataSet.Create;
 FDataSet.FieldDefs.Add("Name", ftString, 150, true);
 FDataSet.FieldDefs.Add("Value", ftString, 8000, false);
 FDataSet.Open;
 if assigned(FDataSet) then TEServerQuery(FDataSet).CreateDataSet;
end;

destructor TBase.Destroy;
begin
 if assigned(FDataSet) then FreeAndNil(FDataSet);
 inherited Destroy;
end;

procedure TBase.ClearCash();
begin
 while not FDataSet.Eof do begin
   FDataSet.Edit;
   FDataSet.Delete;
 end;
end;

И есть наследник:
type
 TClient = class(TBase)
 public
   constructor Create(AOwner:TComponent); override;
   destructor Destroy; override;
   function GetValгу(aName: Ansistring): Ansistring;override;
 end;

procedure Register;

constructor TClient.Create(AOwner:TComponent);
begin
 inherited Create(AOwner);
end;

destructor TEClientVariable.Destroy;
begin
 inherited Destroy;
end;

function TClient.GetValue(aName: Ansistring): Ansistring;
 var tmpSql: Ansistring;
     tmpVar: Variant;
begin
 tmpVar:= FDataSet.Lookup("Name", aName, "Value"); // Вот здесь Access violation, т.к. FDataSet:= nil не знаю почему
 if not VarIsNull(tmpVar) then begin
   result:= VarToStr(tmpVar);
   exit;
 end;
 ...
 
end;

procedure Register;
begin
...(..., [TClient]);
end;


 
Ega23 ©   (2004-04-29 12:44) [1]

Ну и????


 
Григорьев Антон   (2004-04-29 12:47) [2]

А компилятор что, никаких предупреждений не выдаёт? О том, что конструктор Create перекрывает созданный в базовом классе Create? Надо заменить в его объявлении virtual на override, а то получается, что компилятор не воспринимает ваш конструктор как замену имеющемуся и вызывает старый, в котором DataSet не создаётся.


 
Skier ©   (2004-04-29 12:54) [3]

type
TBase = class(TComponent)
protected
  FDataSet: TClientDataSet;
public
  constructor Create(AOwner:TComponent);override;
  destructor Destroy; override;
public
  function GetValue(aName: String): String; virtual;abstract;
  procedure ClearDataSet; virtual;
public
  property DataSet: TClientDataSet read FDataSet write FDataSet;
end;


 
siriusP   (2004-04-29 13:06) [4]

Благодарю. Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2004.05.16;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.078 c
1-1083321302
Relaxxx
2004-04-30 14:35
2004.05.16
Нужно чтобы сумма преобразовывалась в определенную форму


1-1083261874
Nous Mellon
2004-04-29 22:04
2004.05.16
Нестандартный ЛистВью


14-1082953057
AGAMEMNUM
2004-04-26 08:17
2004.05.16
photoshop


8-1067533002
arcsin
2003-10-30 19:56
2004.05.16
OpenGL


6-1079886834
LAndreyL
2004-03-21 19:33
2004.05.16
Кодировка для отправки почты?