Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1083138138
Романов Р.В.
2004-04-28 11:42
2004.05.16
Помогите оптимизировать код


3-1082465871
stud
2004-04-20 16:57
2004.05.16
использование параметра для LIKE


1-1083512222
novill
2004-05-02 19:37
2004.05.16
Уважаемые мастаки, подскажите как внутри функции узнать ее имя?


14-1082821801
Maxim Vetera
2004-04-24 19:50
2004.05.16
Самая заветная мечта!


1-1083014147
hiperLogun
2004-04-27 01:15
2004.05.16
Низкоуровневый доступ к файлам





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский