@Delphi.Narium
Woher willst du wissen, dass eineVerbindung und myQuery zusammenpassen?
Für den Cast der
Query ist somit nur das Zweite richtig, welches die zugehörige Instanz prüft.
Das "MeinZugriff" ist natürlich die zentrale "CreateQuery"-Funktion.
Ob an das nun nochmal trennt oder zusammenwirft, ist jedem selbst überallassen.
Man kann auch mal schauen, denn so manche Connection-Klasse hat auch eine Create/Get-
Query-Funktion eingebaut.
z.B. könnte man vom
TFDCustomConnection.ExecSQL die Variante mit dem AResultSet benutzen.
Delphi-Quellcode:
function CreateQuery(Connection: TCustomConnection): TDataSet;
// oder ein gemeinsamer TIrgendwasQuery-Vorfahre
begin
if Connection
is TFDCustomConnection
then begin
Result := TFDQuery.Create(
nil);
TFDQuery(Result).Connection := TFDCustomConnection(Connection);
end else if Connection
is TADOConnection
then begin
Result := TADOQuery.Create(
nil);
TADOQuery(Result).Connection := TADOConnection(eineVerbindung);
end else
raise Exception.Create('
unbekannte Connection');
end;
Delphi-Quellcode:
function CreateQuery(Connection: TCustomConnection;
SQL: string='
'
{; Params: TParams}): TDataSet;
// oder ein gemeinsamer TIrgendwasQuery-Vorfahre
begin
Result :=
nil;
try
if Connection
is TFDCustomConnection
then begin
Result := TFDQuery.Create(
nil);
TFDQuery(Result).Connection := TFDCustomConnection(Connection);
if SQL <> '
'
then begin
TFDQuery(myQuery).SQL.Text :=
SQL;
//TFDQuery(myQuery).Params.Assign(Params); // oder irgendwie sowas ... z.B. den Params-Parameter als "array of const" oder "array of Variant"
TFDQuery(myQuery).Open;
end
end else if Connection
is TADOConnection
then begin
Result := TADOQuery.Create(
nil);
TADOQuery(Result).Connection := TADOConnection(eineVerbindung);
if SQL <> '
'
then begin
TADOQuery(myQuery).SQL.Text :=
SQL;
TADOQuery(myQuery).Open;
end;
end else
raise Exception.Create('
unbekannte Connection');
except
Result.Free;
// falls das Open knallte
raise;
end;
end;