Главная страница
    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.45 MB
Время: 0.034 c
6-1080082331
AleXR
2004-03-24 01:52
2004.05.16
Как установить соединение DialUp


9-1072777586
Denton
2003-12-30 12:46
2004.05.16
помогите с математикой


1-1083140558
GIL
2004-04-28 12:22
2004.05.16
MDI-окна исчезновение управляющих кнопок при развертывании


1-1083153374
bond
2004-04-28 15:56
2004.05.16
Как вызвать метод класса для всех объектов этого класса


14-1082625216
Roof
2004-04-22 13:13
2004.05.16
Delphi 7 подвисает при запуске проекта





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский