Autor Beitrag
Nico80
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

WIN XP
DELPHI 2006
BeitragVerfasst: Do 06.11.08 12:55 
Hallo,

ich beschreibe mal kurz mein Problem.

Ich habe im Verlauf meiner Entwicklung verschiedene Datenbank-Versionen. D.h. es kommen immer neue Felder hinzu.
Für Daten in die Datenbnak zuschreiben benutze ich die FIBPlus-Dataset-Komponente.
Abstraktes Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
Dataset.SelectSQL := 'Select * from TABLE';
DataSet.UpdateSQL := 'Insert INTO TABLE test1, test2 VALUES (test1, test2);
....
Dataset.FieldValues['
test1'] := test1;
Dataset.FieldValues['
test2'] := test2;


Jetzt enthält meine Datenbank aber nur Feld "test1". Kann ich irgendwie die Komponente dazubringen nur "test1" zu füllen und nicht "test2".
Logisch ist wenn Feld "test2" in der Datenbank vorhanden ist auch wieder das Feld in der Datenbank zu schreiben.

Hoffe ich habe mein Problem verständlich erklärt und danke bereits jetzt für Tipps.
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Do 06.11.08 13:26 
Soweit ich weiß, kann man schon irgendwie abfragen, welche Tabellen es alles gibt - halte ich aber für sehr aufwändig, da du dies dann vor jeder Abfrage prüfen müsstest. Somit hättest du jede Abfrage doppelt und dreifach.. mal mit der einen Tabelle, mal mit der anderen, dann wieder mit beiden, usw.

Ich selber handhabe das so: Ich hab in jeder Datenbank eine Tabelle DB_VERSION, wo eine Versionsnummer drinsteht. Meine Programme, die darauf zugreifen, prüfen nach dem Verbinden, ob es sich um die aktuellste Version handelt, und führen bei Bedarf einige Update-Scripte aus.
Damit kann ich recht sicher sein, dass die Datenbank immer auf dem Stand ist, wie ich sie erwarte.

_________________
PROGRAMMER: A device for converting coffee into software.
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Do 06.11.08 13:41 
versuchs mal mit
ausblenden Delphi-Quelltext
1:
2:
if not (dataset.findfield('test2') = nil) then
 Dataset.FieldValues['test2'] := test2;

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
Nico80 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

WIN XP
DELPHI 2006
BeitragVerfasst: Do 06.11.08 14:30 
user profile iconzuma hat folgendes geschrieben Zum zitierten Posting springen:
versuchs mal mit
ausblenden Delphi-Quelltext
1:
2:
if not (dataset.findfield('test2') = nil) then
 Dataset.FieldValues['test2'] := test2;


Es gibt auch "Dataset.FieldExist". Das klappt auch wunderbar.
Aber sobald das SQL-Statement abgefeuert wird, gibt es eine Fehelrmeldung das die Spalte nicht existiert.
Es müsste eigenltich noch eine Methode geben, die das SQL-Statement bearbeitet.
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Do 06.11.08 15:05 
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
...soweit ich weiß, kann man schon irgendwie abfragen, welche Tabellen es alles gibt - halte ich aber für sehr aufwändig..


Die Tabellen ?

ausblenden Delphi-Quelltext
1:
2:
3:
  DbDS.Close;
  DbDS.SelectSQL.Text := 'select RDB$RELATION_NAME from rdb$relations order by RDB$RELATION_NAME';
  DbDS.Open;


Felder geht ähnlich. Aber ehrlich gesagt, so was hat man schnell mal kurz mit IBExpert nachgeguckt. 8) Ich brauche den RDB$ Kram lediglich, um leere Tabellen auf einen Schlag rauszufinden. Oben ist das Delphi-Beispiel. Auch da wäre es einfacher das select-Statement in IBExpert ablaufen zu lassen, anstatt selber Programm dafür zu schreiben.

_________________
Gruß
Hansa