Discussion:
Tabelle ohne entsprechende Datenbank zur Laufzeit (TDataSet und TDBGrid ind Delphi 5)
(zu alt für eine Antwort)
Stefan M. Huber
2008-03-17 12:13:26 UTC
Permalink
Grüße!

Ich bin auf der Suche nach einem generischen Ansatz, wie wir gewisse
Daten für unser Programm in der Datenbank bei Kunden austauschen können.
Wir wollen keine SQL-Scripts ausliefern, da die Daten manchmal
vorverarbeitet werden müssen, je nach Kunde. Daher habe ich einmal an
Textfiles gedacht, wo die auszutauschenden Daten beschrieben sind.

Dazu habe ich eine Klassenhierarchie unterhalb der selbst gebastelten
TDBUpdater gebaut, die sich für bestimmte Dateinamen selbst ausführen.

Der Austauschmechanismus funktioniert schon ganz gut. Damit wir das ganze
aber möglichst einfach auch verwalten können, und wir in der Syntax selbst
keine Fehler machen, wollte ich einen Editor für die Dateien schreiben.

Da die Daten alle unterschiedliche Struktur haben, dachte ich an folgendes:
Ich ziehe mir ein TDataSet hoch. Jede Klasse kann in ihrem Konstruktor die
Feldbeschreibungen an dieses Dataset anhängen (AddFieldDef), die sie
unterstützt. Zum Editieren der neuen Daten müsste ich dann nur ein
Formular erstellen, in dem ein DBGrid via DataSource an dieses DataSet
greift.

Habe ich irgendeine Chance, das ganze ohne einer Connection zu verwenden?
Also als reines TDataSet (von mir aus TADODataSet), das in einem DBGrid
editiert werden kann. Danach hätte ich das ganze einfach per SaveToFile
gespeichert (das ändert natürlich das Abarbeiten auch, ist aber jetzt mal
wurscht). Oder gibt's dafür bessere Ansätze?

Folgender Beispielcode ist das, wo ich momentan stehe. Funktioniert
natürlich nicht ("Fehlende Connection oder ConnectionString").
Voraussetzung: Globale Variable ds und ein DBGrid und eine DataSource am
Formular:

if Assigned(ds) then FreeAndNil(ds);
ds := TADODataSet.Create(nil);
ds.CursorLocation := clUseClient;
ds.CommandType := cmdFile; // auch andere probiert
with ds.FieldDefs do
begin
with AddFieldDef do
begin
Name := 'Spalte 1';
DataType := ftString;
Required := true;
end;
end;

DataSource.DataSet := ds;
DBGrid.DataSource := DataSource;
DataSource.enabled := true;
// DBGrid ist leer.

// ds.Open; // Eigenschaft CommandText fehlt
ds.SaveToFile('C:\temp\ado.txt', pfXML);
// Operation bei geschlossener Datenmenge nicht durchführbar
// ds.Close;


Stefan
Michael Justin
2008-03-17 13:25:33 UTC
Permalink
Post by Stefan M. Huber
Habe ich irgendeine Chance, das ganze ohne einer Connection zu
verwenden? Also als reines TDataSet (von mir aus TADODataSet), das in
einem DBGrid editiert werden kann. Danach hätte ich das ganze einfach
per SaveToFile gespeichert (das ändert natürlich das Abarbeiten auch,
ist aber jetzt mal wurscht). Oder gibt's dafür bessere Ansätze?
Hallo Stefan,

TClientDataSet kann das (inklusive Speicherung in eine Datei)
standardmäßig: Felder im Designmodus festlegen (das geht aber auch zur
Laufzeit), und mit den normalen Operationen Datenästze anhängen und mit
visuellen Komponenten darstellen. (Ich verwende es, um aus XML/DOM
Dokumenten die Daten für einen Reportgenerator bereitzustellen.)

Hope this helps(tm)

Michael Justin
--
betasoft - Software for Delphi™ and for the Java™ platform
http://www.mikejustin.com/
http://www.betabeans.de/
Stefan M. Huber
2008-03-17 13:47:30 UTC
Permalink
On Mon, 17 Mar 2008 14:25:33 +0100, Michael Justin
Post by Michael Justin
Post by Stefan M. Huber
Habe ich irgendeine Chance, das ganze ohne einer Connection zu
verwenden? Also als reines TDataSet (von mir aus TADODataSet), das in
einem DBGrid editiert werden kann. Danach hätte ich das ganze einfach
per SaveToFile gespeichert (das ändert natürlich das Abarbeiten auch,
ist aber jetzt mal wurscht). Oder gibt's dafür bessere Ansätze?
Hallo Stefan,
TClientDataSet kann das (inklusive Speicherung in eine Datei)
Bah, so einfach! Danke.

Stefan
Stefan M. Huber
2008-03-17 14:02:11 UTC
Permalink
On Mon, 17 Mar 2008 14:25:33 +0100, Michael Justin
Post by Michael Justin
Post by Stefan M. Huber
Habe ich irgendeine Chance, das ganze ohne einer Connection zu
verwenden? Also als reines TDataSet (von mir aus TADODataSet), das in
einem DBGrid editiert werden kann. Danach hätte ich das ganze einfach
per SaveToFile gespeichert (das ändert natürlich das Abarbeiten auch,
ist aber jetzt mal wurscht). Oder gibt's dafür bessere Ansätze?
Hallo Stefan,
TClientDataSet kann das (inklusive Speicherung in eine Datei)
standardmäßig: Felder im Designmodus festlegen (das geht aber auch zur
Laufzeit), und mit den normalen Operationen Datenästze anhängen und mit
visuellen Komponenten darstellen. (Ich verwende es, um aus XML/DOM
Dokumenten die Daten für einen Reportgenerator bereitzustellen.)
Hope this helps(tm)
Nachtrag: Und .CreateDataSet hatte ich auch nicht aufgerufen.

Stefan

Loading...