Entwickler-Ecke

Datenbanken - DataSource als Rückgabewert


tacl - Sa 03.07.10 15:35
Titel: DataSource als Rückgabewert
Hi Leute,

ich steh seit gestern Abend ein wenig auf dem Schlauch und bräuchte Eure Hilfe:

Ich habe in meinem Projekt eine Form mit DBGrid, dem ich zur Laufzeit eine dynamisch erzeugte DataSource zuweisen möchte, die auf einem DataModule liegt. Nun rufe ich von der Form eine, im DataModule liegende Function auf:

Delphi-Quelltext
1:
2:
3:
4:
5:
function ebsExecuteSQL(intStatement: integer; parent_id: string): tDataSource;
begin
  //...
  result := tempDataSource.Create(DataModule1);
end;

Die aufrufende Procedure sieht so aus:

Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form1.DBGrid1.DataSource := ebsExecuteSQL(1'0');
end;

Ich habe auch schon versucht (ursprünglicher Ansatz) mit Pointern über die Operatoren ^ und @ zu arbeiten, aber hiermit auch keine Lösung gefunden. Das Problem ist, dass mir die Zeile der Procedure eine Adressierungs-Exception rauswirft, mit der man natürlich nix anfangen kann.

Die eigentliche Idee dahinter: Ich möchte mir einen Vorrat an SQL-Statements anlagen, diese im Datamodule in eigens zur Laufzeit erzeugten Querys ausführen lassen und eine ebenfalls zur Laufzeit erzeugte DataSource über die Function zurückliefern.
Gibt es eventuell fertige Lösungen für diese Aufgabe?

Danke für Eure Hilfe
Patrick

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.


tacl - So 04.07.10 19:20

Leute ich verzweifel bald. Hat wirklich niemand eine Lösung hierfür?
Kann doch nicht sein, dass man keinen Zeiger auf eine Komponente übergeben kann.
Hab heute den ganzen Tag daran herumgeschraubt und finde einfach keine Lösung...

Ich bin wirklich für jeglichen Gedankengang dankbar.

Gruß
Patrick


Critter - Mo 05.07.10 11:31

Hallo,

versuche mal anstelle von:


Delphi-Quelltext
1:
result := tempDataSource.Create(DataModule1);                    


ein


Delphi-Quelltext
1:
result := tDataSource.Create(DataModule1);                    


critter