Entwickler-Ecke
Datenbanken - Umstieg von TDBF auf Firebird - Code umstellen
jf_stgt - Fr 10.07.09 14:51
Titel: Umstieg von TDBF auf Firebird - Code umstellen
Hallo zusammen,
es gibt hier ja jede Menge Beiträge, die gute Datenbanken beschreiben.
Ich habe hier und sonst im Netz viel gelesen und für eine Projektumstellung mich auf eine Firebird Datenbank eingeschossen.
Ist noch nicht 100%ig sicher, aber die Vorteile (SQL Syntax, Embedded und als Server möglich, Transaktionsfähig, ...) liegen auf der Hand.
Bisher setze ich bei dem Projekt eine TDBF Komponente für den Zugriff auf eine DBase(4) Datenbank ein.
Da TDBF in letzter Zeit (imho) nicht mehr weiterentwickelt (und supported) wurde und meine Datenbanken bei den Kunden immer größer werden und öfters Indexprobleme haben, kann ich mir eine Umstellung auf Firebird vorstellen.
Beim Update würde die neue Datenbank angelegt und die Daten automatisch kopiert. Soweit - sogut.
Die Schwierigkeit besteht darin, dass ich bisher so auf meine DB zugreife:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| // Datenbank öffnen TDbf1->TableName = "abc.dbf"; TDbf1->IndexName = "inx1"; TDbf1->Open();
// Auslesen TDbf1->SetRange(1, 1000); if (TDbf1->FindFirst()) { do { // Auslesen idtmp = TDbf1->FieldByName("id")->AsInteger; } while (TDbf1->FindNext()); }
// Datenbank schliessen TDbf1->Close(); |
Die Datenbank wird also außer de TDBF Komponente nicht durch weitere Komponenten angesprochen.
So oder so ähnlich sieht es hunderte Mal in meinem Code aus.
Der Code ist ein Relikt aus Zeiten vor 2000 - heute würde ich es nicht mehr so machen, aber es ist nun mal so.
Welche Komponenten würdet ihr benutzen, um am Code so wenig wie möglich ändern zu müssen?
Es gibt viele Komponeten wie IBObject aber bei denen kann ich so direkt doch nicht auf die DB zugreifen, oder?
Viele Grüße
jf_stgt
mkinzler - Fr 10.07.09 15:53
Die Komponenetn sind ja alle ähnlich ( wenn auf die VCL aufsetzend)
// Datenbank öffnen
DS.SQL.Text = "select first 1000 from abc;";
DS->Open();
// Auslesen
if (!DS->EOF())
{
do
{
// Auslesen
idtmp = DS->FieldByName("id")->AsInteger;
}
while (!DS->EOF);
}
// Datenbank schliessen
DS->Close();
jf_stgt - Fr 10.07.09 16:37
Moderiert von
Narses: Komplett-Zitat des letzten Beitrags entfernt.
Danke für den schnellen Tipp.
Was ist DS für eine Komponente?
Teil von IBObject oder gibt es auch eine freie Komponente die das super so erfüllt?
mkinzler - Fr 10.07.09 16:44
DS ist irgendein DataSet ( IBX, ZEOS, IBDAC, FIBPlus, ...)
klaus.demetz-schittek - Fr 10.07.09 17:16
Versuch doch mal Zeoslib. Hat auch TTable-fähige Komponenten. Ist gerade bei Firebird nicht schlecht. Und es ist vor allem DB-unabhängig.
mkinzler - Fr 10.07.09 17:23
Zitat: |
Hat auch TTable-fähige Komponenten |
Diese sind eigentlich überall vorhanden. Sollte man aber bei einem richtigen DBMS nicht verwenden.
jf_stgt - Fr 10.07.09 17:43
mkinzler hat folgendes geschrieben : |
Zitat: | Hat auch TTable-fähige Komponenten | Diese sind eigentlich überall vorhanden. Sollte man aber bei einem richtigen DBMS nicht verwenden. |
Aha, warum sollte man diese nicht verwenden?
mkinzler - Fr 10.07.09 18:30
Weil eine Table ein Query mit select * from <Tabelle>; ist. Es werden also alle Felder von allen Datensätzen angefordert. es ist besser die Abfrage auf benötigte Feldern der benötigten datensätze zu beschränken.
jf_stgt - Mo 13.07.09 08:44
mkinzler hat folgendes geschrieben : |
Weil eine Table ein Query mit select * from <Tabelle>; ist. Es werden also alle Felder von allen Datensätzen angefordert. es ist besser die Abfrage auf benötigte Feldern der benötigten datensätze zu beschränken. |
Aha! Danke für die Antwort. Du scheintst dich auszukennen :-)
Das ist bei der TDbf Komponente (imho) nicht so.
Dann sollte man nach dem Umstieg eher so ein DataSet verwenden und keinesfalls direkt eine TTable, oder?.
---
Moderiert von
Narses: Beiträge zusammengefasst---
Dann verwende ich ein DataSet und keine direkten Table Komponenten, oder?
Ich denke daran, FIBPlus zu verwenden. Das ist doch eine gute Wahl, oder?
Die Umstellung von TDBF auf Firebird scheint mir aber dann sehr aufwendig zu sein, oder?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!