Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Prism Verbindung zu Firebird-DB (https://www.delphipraxis.net/43721-verbindung-zu-firebird-db.html)

r_kerber 7. Apr 2005 18:29

Datenbank: Firebird • Version: 1.5 • Zugriff über: BDP.Net

Verbindung zu Firebird-DB
 
Ich habe mit IBExpert eine neue Firebird-Datenbank angelegt und dort dann eine Tabelle erzeugt. Die Einträge in der Registration Info entsprechen denen der mitgelieferten Demo-Datenbank. Nun richte ich die BDP Connection im Database Explorer ein. Auch hier richte ich mich nach den Einträgen der Demo-DB. Beim Verbindungstest erhalte ich dan die folgende Fehlermeldung:
Zitat:

Der Index (basierend auf Null) muß größer als oder gleich Null sein, und geringer als die Größe der Argumentenliste.

Lemmy 8. Apr 2005 05:24

Re: Verbindung zu Firebird-DB
 
Hi,

ohne es selbst getestet zu haben: Der BDP hat den schlechten Ruf sehr fehleranfällig zu sein! Besser auf den Firebird .NET Provider wechseln...

Lemmy

r_kerber 8. Apr 2005 06:03

Re: Verbindung zu Firebird-DB
 
Zitat:

Zitat von Lemmy
ohne es selbst getestet zu haben: Der BDP hat den schlechten Ruf sehr fehleranfällig zu sein! Besser auf den Firebird .NET Provider wechseln...

Mag sein, aber BDP hat LiveDaten zur Designzeit und man benötigt einen Komponentensatz (Connection, DataAdapter, Command) um auf verschiedene DB's zugreifen zu können. Beim normalen .NET-Provider benötigt man für jede Datenbank einen anderen...

r_kerber 18. Apr 2005 12:59

Re: Verbindung zu Firebird-DB
 
Hat wirklich niemand eine Idee, was ich bei Erstellen einer Firebird-DB mit IBExpert beachten muß?

Robert_G 18. Apr 2005 13:35

Re: Verbindung zu Firebird-DB
 
Zitat:

Zitat von r_kerber
Zitat:

Zitat von Lemmy
ohne es selbst getestet zu haben: Der BDP hat den schlechten Ruf sehr fehleranfällig zu sein! Besser auf den Firebird .NET Provider wechseln...

Mag sein, aber BDP hat LiveDaten zur Designzeit und man benötigt einen Komponentensatz (Connection, DataAdapter, Command) um auf verschiedene DB's zugreifen zu können. Beim normalen .NET-Provider benötigt man für jede Datenbank einen anderen...

Sorry, aber das klingt wie ein Zitat von den KDTs. ;) Und es ist eigentlich genauso falsch.
Der DBP bringt dir einen Monsterconnectionstring, in dem Infos angegeben werden müssen, die absolut unnötig sind.
Der BDP bringt dir die gleiche Funktionalität wie es die ADO.Net Interfaces bringen würden. (Wenn man mal diese DAU Funktionen á la AutoUpdate gönnerhaft ignoriert :mrgreen: )

Wenn du in deinen Klassenbibliotheken ganz einfach NUR mit den ADO.Net Interfaces arbeitest, erreichst du das gleiche Ziel OHNE ein Borland.XXX in den Gac hauen zu müssen. Und OHNE stundenlang mit deinem Provider zu diskutieren, ob er dem BDP vertrauen will... (Dazu gab's hier schonmal 'nen Thread ;) )

Du wirfst oben nur noch eine Typreferenz auf eine Sql-/Oracle-/Fb-/whatever- Connection rein.
Und schon kannst du davon eine Instanz anlegen (Du weißt ja, dass der Typ einen parameterlosen Constructor haben MUSS ;) ).

Hier mal ein abstrakter Bleistift:
Code:
    internal class ConnectionDingsBums
    {
        public static IDbConnection GetConnectionInstance(Type connectionType)
        {
            if (typeof (IDbConnection).IsAssignableFrom(connectionType))
            {
                return connectionType.GetConstructor(Type.EmptyTypes).Invoke(null) as IDbConnection;
            } else
            {
                throw new ArgumentException("miep");
            }
        }
    }

    internal class Program
    {
        static void Main()
        {
            using (IDbConnection connection = ConnectionDingsBums.GetConnectionInstance(typeof (FbConnection)))
            {
                connection.ConnectionString = "miep";

                IDbCommand command = connection.CreateCommand();
                command.CommandText = "miep";

                IDataParameter parameter = command.CreateParameter();

                parameter.ParameterName = "miep";
                //DbType wird in der Instanz hinter dem
                //Interface zum richtigen Typen des Providers übersetzt
                // bei FB ist es VarChar...
                parameter.DbType = DbType.AnsiString;
                parameter.Value = "miep";
                command.Parameters.Add(parameter);

                IDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    Console.WriteLine(reader.GetString(0));
                }
            }
        }
    }

BTW: Was bringen dir Live Daten? :gruebel: Die Beispieldatensätze, die du bei den normalen Providern bekommst reichen doch eigentlich auch nzw. Ich habe gar keine Connection auf dem Form sondern binde höchstens IBindingList Implementierungen an irgendwelche Controls. :zwinker:

Ums es kurz zu fassen, ich persönlich finde einen Whatever-Provider 100-mal besser als so einen BDP mit einem 10MB Connectionstring. :mrgreen:
Wenn man das System hinter ADO.Net verstanden hat, ist man auch nicht auf fixe Klassennamen angewiesen.

r_kerber 18. Apr 2005 13:56

Re: Verbindung zu Firebird-DB
 
@Robert: Dann bin ich wohl ein DAU, weil ich genau auch diese AutoUpdate-Funktion verwenden möchte. Das war aber leider nicht die Antwort auf meine Frage!

UweR 18. Apr 2005 14:48

Re: Verbindung zu Firebird-DB
 
Zitat:

Hat wirklich niemand eine Idee, was ich bei Erstellen einer Firebird-DB mit IBExpert beachten muß?
Die Antwort auf deine Frage ist: Normalerweise absolut gar nichts.

Wenn du die Datenbank mit IBExpert wieder aufkriegst und deine Tabelle siehst ist alles OK und das Problem liegt eindeutig nicht bei IBExpert.

Möglich als Fehlerquelle wäre einmal die BDP an sich die ich auch keinem empfehlen kann.

Als zweites bei einer Mischinstallation von Interbase und Firebird der Versuch mit einem Interbase-Treiber auf Firebird zuzugreifen. Das geht zwar normalerweise gut, kann aber bei den Fehlermeldungen schon mal zu Mißverständnissen führen.

r_kerber 18. Apr 2005 17:39

Re: Verbindung zu Firebird-DB
 
Merkwürdig ist aber, daß ich mit dem BDP-Provider auf die von Firebird mitgelieferte DB (C:\Programme\Firebird\Firebird_1_5\examples\EMPLO YEE.FDB) ohne Probleme zugreifen kann. :gruebel:

Robert_G 19. Apr 2005 19:00

Re: Verbindung zu Firebird-DB
 
Zitat:

Zitat von r_kerber
Merkwürdig ist aber, daß ich mit dem BDP-Provider auf die von Firebird mitgelieferte DB (C:\Programme\Firebird\Firebird_1_5\examples\EMPLO YEE.FDB) ohne Probleme zugreifen kann. :gruebel:

Willst du in dem Projekt nur Firebird benutzen, oder kann es sein, dass du später auf den MS SQL Server wechselst?
In ersten Fall wäre der FbProvider doch megakomfortabel. Er unterstützt eigentlich alles was FB kann, zum Beispiel auch das Eventing system. :)
Für den 2. Weg würde ich dir die Interfaces empfehlen. (Das würde dir auch häufig wiederverwendbare Klassen geben ;) )

r_kerber 19. Apr 2005 20:09

Re: Verbindung zu Firebird-DB
 
Moin Robert,

mein Wunsch ist es nun mal das AutoUpdate des BDP zu nutzen. Die Idee eines Client-Dataset finde recht gut. Inzwischen gelingt mir der Zugriff auf eine FB-DB auch. Habe die DB noch einmal komplett neu erstellt. Allerdings habe ich jetzt dieses Problem: Re: Firebird .NET Provider und Delphi 2005. Du hast darauf ja auch schon geantwortet. Das dort geschilderte Problem scheint aber nicht nur beim BDP- sondern auch beim "normalen" ADO.Net-Provider aufzutreten. Mein Ziel ist es die (ausgewählten) Daten einer Tabelle in einem Grid darzustellen, dort zu editieren und dann die geänderten Daten in die Tabelle zurückzuschreiben. Auf eine DB habe ich mich noch nicht festgelegt. In Erwägung ziehe ich MySQL, FB und schlimmstenfalls Access. Das wären mögliche DB's, die ich bei meinem Provider (kostenlos) nutzen könnte.


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