Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TADODataSet -> Enthält nur ein Datensatz (https://www.delphipraxis.net/104223-tadodataset-enthaelt-nur-ein-datensatz.html)

Andi1985 29. Nov 2007 14:31


TADODataSet -> Enthält nur ein Datensatz
 
Hallo,

vermutlich ist foglendes Problem total simple, ich komm nur derzeitig nicht drauf.

Ich habe mir eine Klasse geschrieben die eine Verbindung zur Datenbank aufbaut
und eine Memberfunktion schickt ein Query raus und speichert die Daten in einem TADODataSet inerhalb
der Klasse.
Wenn ich nun dieses DataSet per Memberfunktion an mein Hauptprogramm übergebe, erhalte ich immer
nur einen Datensatz... (.Next springt sofort auf EOF).

vieleicht könnt ihr mir ja helfen, ich vermute das Problem hat was mit Zeigern in Delphi zu tun.

Delphi-Quellcode:
type
cMyADOConnection = class(TObject)
private
        ...
        var DataSet: TADODataSet;
        ...
public
        ...
        function get_DataSet(): TADODataSet;
        ...
end;
Delphi-Quellcode:
function cMyADOConnection.get_DataSet(): TADODataSet;
begin
        get_DataSet := DataSet;
end;
Hauptprogramm
Delphi-Quellcode:
myDataSet := connection.get_DataSet();
mfg
Moggy

Andi1985 30. Nov 2007 13:48

Re: TADODataSet -> Enthält nur ein Datensatz
 
Ich konnte das Problem folgendermaßen umgehen, vielen dank, damit kann der Thread geschlossen werden.

Delphi-Quellcode:
DataSet.RecordSet := connection.get_DataSet().RecordSet.Clone(adLockUnspecified);

shmia 30. Nov 2007 15:52

Re: TADODataSet -> Enthält nur ein Datensatz
 
Na ich weiss nicht, ob deine Lösung so toll ist.
Delphi-Quellcode:
cMyADOConnection = class(TObject)
private
        ...
        var DataSet: TADODataSet; // ***
        ...
public
        ...
        function get_DataSet(): TADODataSet;
        ...
end;
Es sollte klar sein, dass mit obigem Code nur ein einziges Dataset möglich ist.
Die Variable (markiert mit ***) muss weg und get_DataSet() sieht im Prinzip so aus:
Delphi-Quellcode:
function cMyADOConnection.get_DataSet(): TADODataSet;
begin
   result := TADODataSet.Create(nil);
   result.Connection := ...
end;
So wird bei jedem Aufruf ein neues Dataset erzeugt.
Aber Vorsicht, der Aufrufen muss das Objekt freigeben, sonst Speicherleck.
Besser wäre:
Delphi-Quellcode:
cMyADOConnection = class(TObject)
private
        ...
public
        ...
        // der Aufrufer muss das Dataset bereitstellen und auch freigeben
        procedure Setup_DataSet(ds:TADODataSet);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:36 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