Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MsSql Daten in ClientDataSet schreiben (https://www.delphipraxis.net/29845-mssql-daten-clientdataset-schreiben.html)

schlock 15. Sep 2004 13:13


MsSql Daten in ClientDataSet schreiben
 
Hallo,
ich versuche hier schon seit Stunden die Daten einer MsSql - Tabelle in ein
ClientDataSet zu schreiben. Einiges hab ich auch schon geschafft
Delphi-Quellcode:
 
var
  query : TADOQuery;
begin
  query := TADOQuery.Create(NIL);
  query.Connection:= TADOConnection.Create(NIL);

  query.Connection.ConnectionString:= ' ... '; // Der war mir zu lange zum kopieren

  query.SQL.Add('SELECT * FROM ANTRAG');
  query.Open;
end;
Dieser Code läuft ohne Exceptions durch und die Verbindung steht auch da
Delphi-Quellcode:
query.connection.GetTableNames(tableNames)
die richtigen Tabellen zurückliefert.

Aber wie komm ich jetzt an die Ergebnisse der Abfrage um sie ins ClientDataSet zu schreiben ??
Oder gibt es da vielleicht schon Methoden von TClientDataSet die das auf einen Schlag können??

Bin für jede Hilfe Dankbar.

Hilflos
schlock

mikhal 15. Sep 2004 17:48

Re: MsSql Daten in ClientDataSet schreiben
 
Welche Abfrage? Du hast doch deinem Query noch gar kein SQL-Statement mitgegeben, sondern fragst lediglich über die Methode GetTableNames die Tabellennamen deiner Datenbank ab.

Füge mal ein SELECT-Statement wie etwa
Code:
SELECT * FROM <Owner>.<Tabellenname>
wobei <Owner> meistens "dbo" ist, in der Eigenschaft SQL deiner Query ein und führe die Query mit
Code:
Query.Open
aus.

Damit du das Ergebnis deiner Abfrage dann ausgeben kannst benötigst du dann noch eine DataSource, die mit deiner Query verbunden ist und z.B. ein DBGrid, das mit der DataSource verbunden wird.

Grüße
Mikhal

woki 15. Sep 2004 18:48

Re: MsSql Daten in ClientDataSet schreiben
 
Hi,

ja, Clientdatasets können daten aus einem Dataset, sowohl innerhalb eines Prozesses, als auch über Prozeß- und Rechnergrenzen hinweg, oder sogar über das Internet saugen und updaten.
- Füge einfach noch einen TDatasetprovider hinzu
- Wähle die Adoquery als Dataset aus (Beachte meine sonstigen Warnnungen Hier im Forum suchenTBetteradodataset)
- Wähle den Datasetprovider im Clientdataset aus
- Setze im Clientdataset Active auf true, und schon sind die Daten im Clientdataset

Grüsse
Woki

Bernhard Geyer 16. Sep 2004 07:32

Re: MsSql Daten in ClientDataSet schreiben
 
Bei ADO wäre dieser Umweg über ClientDataset nicht nötig. Das ADO-Recordset kann auch als disconnected Dataset über Rechnergrenzen (auch z.B. über HTTP übers Internet). Beispiel im Entwickler-Forum

woki 16. Sep 2004 07:47

Re: MsSql Daten in ClientDataSet schreiben
 
Zitat:

Zitat von Bernhard Geyer
Bei ADO wäre dieser Umweg über ClientDataset nicht nötig. Das ADO-Recordset kann auch als disconnected Dataset über Rechnergrenzen (auch z.B. über HTTP übers Internet). Beispiel im Entwickler-Forum

Das ist natürlich richtig, daß MS hier schon vor geraumer Zeit nachgezogen hat.
Nur der Hinweis, daß es trotzdem Gründe gibt, dem Clientdataset den Vorzug zu geben.

Grüsse
Woki

schlock 16. Sep 2004 09:32

Re: MsSql Daten in ClientDataSet schreiben
 
Phantastisch,
klappt wunderbar.
Vielen Dank Woki. :hello:

Hier, für diejenigen die das auch mal machen müssen, noch der fehlende Quellcode:
Delphi-Quellcode:
var
  dataSetProvider: TDataSetProvider;
  ClientDataSet : TClientDataSet;
begin
  dataSetProvider:= TDataSetProvider.Create(NIL);
  dataSetProvider.DataSet:= query;               // query kommt von obigem Beispiel
  ClientDataSet.SetProvider( dataSetProvider );
  ClientDataSet.Active:= TRUE;
end;
Ich benutze übrigens das Clientdataset als Abstraktionsschicht zwischen Datenbankstrukturen
und den Strukturen die mein Programm zur Darstellung benutzt, da ich gedenke später noch weitere
Datenbanken anzubinden.


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