![]() |
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:
Hauptprogramm
function cMyADOConnection.get_DataSet(): TADODataSet;
begin get_DataSet := DataSet; end;
Delphi-Quellcode:
mfg
myDataSet := connection.get_DataSet();
Moggy |
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);
|
Re: TADODataSet -> Enthält nur ein Datensatz
Na ich weiss nicht, ob deine Lösung so toll ist.
Delphi-Quellcode:
Es sollte klar sein, dass mit obigem Code nur ein einziges Dataset möglich ist.
cMyADOConnection = class(TObject)
private ... var DataSet: TADODataSet; // *** ... public ... function get_DataSet(): TADODataSet; ... end; Die Variable (markiert mit ***) muss weg und get_DataSet() sieht im Prinzip so aus:
Delphi-Quellcode:
So wird bei jedem Aufruf ein neues Dataset erzeugt.
function cMyADOConnection.get_DataSet(): TADODataSet;
begin result := TADODataSet.Create(nil); result.Connection := ... end; 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