Главная страница
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.026 c
3-1082171384
Урмат
2004-04-17 07:09
2004.05.16
MasterSource


3-1082093164
Серг
2004-04-16 09:26
2004.05.16
номер строки в Dbgride


3-1082538530
Volodya_
2004-04-21 13:08
2004.05.16
Редактирование записи


4-1080636512
Jul
2004-03-30 12:48
2004.05.16
Хороший help file или справочник по Win Api


9-1072360931
AlexCo
2003-12-25 17:02
2004.05.16
Спрайты!!!