Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   ADOQuery und AdoStoredProc kapseln (https://www.delphipraxis.net/184224-adoquery-und-adostoredproc-kapseln.html)

Sploing 10. Mär 2015 10:22

ADOQuery und AdoStoredProc kapseln
 
Moin liebe Experten,

ich hänge gerade an einem Problem fest, bei dem ich nicht sicher bin ob es eine Lösung gibt Vielleicht kennt ihr da den entscheidenden Tip?
Es geht um MS-SQL Datenbankzugriffe über ADO.
Entweder enthalte ich das Ergebnis aus einer ADOQuery:
Delphi-Quellcode:
ADOQuery.First
ADOQuery.Fields.Fields[0].AsString;
oder als Ergebnis des Aufrufs einer Stored Procedure:
Delphi-Quellcode:
StoredProc := TADOStoredProc.Create(self);
...ausführen...
StoredProc.First;
StoredProc.Fields.Fields[0].AsString;
Soweit ich sehen kann wird mit genau den selben Befehlen auf diese unterschiedlichen Recordsets zugegriffen. Nun schreibe ich gerade an verschiedenen Funktionen, die mal Daten von einer Stored Procedure und mal Ergebnisdaten von einem ADOQuery bekommen sollen und würde diese Ergebnisse gerne abkapseln.

Ungefähr so:
Delphi-Quellcode:
function TfrmSQL.DBResult(is_adoquery_not_sprecordset: Boolean): Variant;
begin
  if is_adoquery_not_sprecordset then
    result := ADOQuery AS AdoStoredProc;
  else
    result := StoredProc;
end;
Variant geht natürlich nicht... Ungültive Typen 'variant' und 'TADOStoredProc'

Aufrufen würde ich das ganze dann gerne ungefähr so:
Delphi-Quellcode:
DBResult(True).First;
DBResult(True)..Fields.Fields[0].AsString;
Hoffe das war halbwegs verständlich ausgedrückt. Denke ich da jetzt gerade völlig falsch? Bin heute noch nicht so wach :roll:
Wäre über Tips dankbar :)

DeddyH 10. Mär 2015 10:26

AW: ADOQuery und AdoStoredProc kapseln
 
So ganz habe ich es noch nicht verstanden, aber beide Klassen stammen von TCustomADODataset ab, da böte sich dieser Typ als Rückgabewert an, oder?

Sploing 10. Mär 2015 11:09

AW: ADOQuery und AdoStoredProc kapseln
 
Zitat:

Zitat von DeddyH (Beitrag 1292912)
So ganz habe ich es noch nicht verstanden, aber beide Klassen stammen von TCustomADODataset ab, da böte sich dieser Typ als Rückgabewert an, oder?

Jaaaa, das ist es, funktioniert! Vielen Dank :)
... da hätte ich auch mal selber nachschauen können:
Delphi-Quellcode:
TADOStoredProc = class(TCustomADODataSet)
TADOQuery = class(TCustomADODataSet)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 Uhr.

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