Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
ВнизОчень нужна помощь. Создание компоненты.!!! Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.034 c