![]() |
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.
|
Re: Nicht erkärliche EAccessVoilation
Zitat:
Delphi-Quellcode:
Und auf Insert leitet TStrings dann Add z.B. um, so dass man das nicht in der abgeleiteten Klasse mehr implementieren muss.
procedure Insert(Index: Integer; const S: string); virtual; abstract;
Deshalb gibt es aber eine Exception. Dass die erst bei der Verwendung auftritt, ist richtig. |
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:
Die DataSource kann im Prinzip auch nil sein, allerdings muss vor jeder Zuweisung der DataLink zugewiesen sein.
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;
Delphi-Quellcode:
Hier sollte eigentlich ebenfalls die Zuweisung von nil erlaubt sein:
procedure TCR_DB_Editor.SetDataSource(Value: TDataSource);
begin if Assigned(FDataLink) then FDataLink.DataSource := Value; end;
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 13:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz