Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Nicht erkärliche EAccessVoilation (https://www.delphipraxis.net/129779-nicht-erkaerliche-eaccessvoilation.html)

Namenloser 26. Feb 2009 18:12

Re: Nicht erkärliche EAccessVoilation
 
Eigentlich sollte TStrings auch funktionieren, soweit ich weiß bietet die TStringlist nur etwas mehr Funktionen wie Sortierung etc. Es kann aber sein, dass es als abstract deklarierte Methoden gibt. Erst wenn auf diese zugegriffen würde, dürfte es aber die Exception geben.

jaenicke 26. Feb 2009 18:24

Re: Nicht erkärliche EAccessVoilation
 
Zitat:

Zitat von NamenLozer
Eigentlich sollte TStrings auch funktionieren, soweit ich weiß bietet die TStringlist nur etwas mehr Funktionen wie Sortierung etc. Es kann aber sein, dass es als abstract deklarierte Methoden gibt. Erst wenn auf diese zugegriffen würde, dürfte es aber die Exception geben.

TStrings hat selbst nicht die Funktionalität, erst die abgeleiteten Klassen implementieren die. Beispiel:
Delphi-Quellcode:
    procedure Insert(Index: Integer; const S: string); virtual; abstract;
Und auf Insert leitet TStrings dann Add z.B. um, so dass man das nicht in der abgeleiteten Klasse mehr implementieren muss.
Deshalb gibt es aber eine Exception. Dass die erst bei der Verwendung auftritt, ist richtig.

Blup 27. Feb 2009 15:52

Re: Nicht erkärliche EAccessVoilation
 
Das meiste wurde bereits gesagt:

Nur weil der Name der Klasse mit 'dbctrl' beginnt, kann man nicht einfach annehmen das es sich um ein TMYDBCtrlGrid handelt. Nur wenn es tatsächlich ein TMYDBCtrlGrid ist, darf auf das Property Panel zugegriffen werden. Der Parent könnte auch nil sein.
Delphi-Quellcode:
function TCR_DB_Editor.GetRealParent : TWinControl;
begin
  Result := Parent;
  while Assigned(Result) do
  begin
    if Result is TMYDBCtrlGrid then
    begin
      Result := TMYDBCtrlGrid(Result).Panel;
      Exit;
    end;
    Result := Result.Parent;
  end;
end;
Die DataSource kann im Prinzip auch nil sein, allerdings muss vor jeder Zuweisung der DataLink zugewiesen sein.
Delphi-Quellcode:
procedure TCR_DB_Editor.SetDataSource(Value: TDataSource);
begin
  if Assigned(FDataLink) then
    FDataLink.DataSource := Value;
end;
Hier sollte eigentlich ebenfalls die Zuweisung von nil erlaubt sein:
Delphi-Quellcode:
procedure TDBInputMask.SetDataSource(ADataSource: TDataSource);
var
  idx: Integer;
  obj: TObject;
{...} 
begin
  if FDataSource <> ADataSource then
  begin
    {An dieser Stelle sollten erst einmal alle für die bisherige DataSource
     erzeugten Steuerelemente freigegeben werden.}
    FEdits.Clear;
   
    FDataSource := ADataSource;
    if Assigned(FDataSource) then
    begin
      FDataSource.DataSet.GetFieldNames(FEdits);
      for idx := 0 to FEdits.Count - 1 do
      begin
        SetLabels(idx, TDBText.Create(self));
        //SetInputs(idx, TDBEdit.Create(self));
        if idx < FInputs.Count then
          obj := FInputs[idx]
        else
          obj := nil;
       
        if obj is TDBInputLine then
        begin
          TDBInputLine(FInputs[idx]).DataSource := FDataSource;
          TDBInputLine(FInputs[idx]).DataField := FEdits[idx];
        end;
        if obj is TDBCheckBox then
        begin
          TDBCheckBox(FInputs[idx]).DataSource := FDataSource;
          TDBCheckBox(FInputs[idx]).DataField := FEdits[idx];
        end;
{...}


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:58 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz