Autor Beitrag
jf_stgt
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 88



BeitragVerfasst: Fr 10.07.09 14:51 
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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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();

_________________
Markus Kinzler.
jf_stgt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 88



BeitragVerfasst: Fr 10.07.09 16:37 
Moderiert von user profile iconNarses: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 10.07.09 16:44 
DS ist irgendein DataSet ( IBX, ZEOS, IBDAC, FIBPlus, ...)

_________________
Markus Kinzler.
klaus.demetz-schittek
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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.

_________________
Markus Kinzler.
jf_stgt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 88



BeitragVerfasst: Fr 10.07.09 17:43 
user profile iconmkinzler hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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.

_________________
Markus Kinzler.
jf_stgt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 88



BeitragVerfasst: Mo 13.07.09 08:44 
user profile iconmkinzler hat folgendes geschrieben Zum zitierten Posting springen:
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 user profile iconNarses: 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?