IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Firebird et TIBServerProperties


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 174
    Points : 38
    Points
    38
    Par défaut Firebird et TIBServerProperties
    Bonjour,

    Est-il possible d'utiliser un composant TIBServerProperties avec une base de données Firebird?
    J'en aurait besoin notamment pour rechercher les alias de BD hébergés par le serveur, mais je n'ai pas trouvé l'équivalent dans les composants FireDAC.
    J'ai donc tenté d'utiliser le composant TIBServerProperties mais j'ai systématiquement 'Connection rejected by remote interface'.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Est-il possible d'utiliser un composant TIBxxxxxxxx avec une base de données Firebird?
    Oui, à condition que gds32.dll existe (et que ce soit une copie de fbclient en gds32) mais avec certaines limitations
    J'en aurait besoin notamment pour rechercher les alias de BD hébergés par le serveur
    justement en voilà une. Ma maitrise s'arrête à FB 2.5 malgré mes quelques notions FB 3 et Interbase versions > 6.5 je peux tenter quelques explications

    la liste des alias Interbase (à partire de 7.5) se trouve dans la base de sécurité ce qui n'est pas le cas pour Firebird puisqu'elle se situe dans aliases.conf (ayant une structure de fichier . ini) ou pour la nouvelle version databases.conf (structure plus complexe). A ma connaissance il n'y a pas d'API pour obtenir la liste des alias Firebird (bien qu'une discussion ai eu lieu à ce sujet) du moins pour les versions < 3 sauf peut être via les API de service (fbsvcmgr)
    mais je n'ai pas trouvé l'équivalent dans les composants FireDAC.
    je n'ai pas bien cherché mais à mon avis il n'y a pas et ce même pour Interbase

    J'ai donc tenté d'utiliser le composant TIBServerProperties mais j'ai systématiquement 'Connection rejected by remote interface'.
    Citation Envoyé par FAQ Firedac
    Q10: What does "[FireDAC][Phys][FB]connection rejected by remote interface" mean?
    A: You are probably connecting to a Firebird server with a FB driver using GDS32.DLL.
    cela fait longtemps maintenant que je dit que Firebird et Interbase s'éloignent l'un de l'autre, c'est de plus en plus vrai
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 174
    Points : 38
    Points
    38
    Par défaut
    Ok merci pour ces explications avisées comme à chaque fois.
    Ca ne m'arrange pas.
    Je suis en train de migrer une appli utilisant les composants FIBPlus vers FireDAC et globalement j'ai tout migré sauf quelques routines spécifiques.
    Notamment une routine qui retournait le statut de la base de données :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    class function TAdminDB.GetDatabaseStatus( server, database: string ) : TDatabaseStatus;
    var
    	index            : integer;
    	DatabaseName     : string;
    	DatabaseList     : TStringList;
    	ServerProperties : TpFIBServerProperties;
    begin
    	result := dsReady;
     
    	ServerProperties := TpFIBServerProperties.Create( nil );
    	ServerProperties.LibraryName := DatabaseProxy.ClientPath;
    	try
    		ServerProperties.ServerName  := AnsiString(server);
    		ServerProperties.LoginPrompt := FALSE;
    		ServerProperties.Protocol    := TCP;
    		ServerProperties.Params.Clear();
    		ServerProperties.Params.Add( 'user_name=SYSDBA'   );
    		ServerProperties.Params.Add( 'password=masterkey' );
     
        try
          try
            ServerProperties.Active := TRUE;
          except
            on EFIBInterBaseError do result := dsNotFound;
          end;
     
          if (ServerProperties.Active) then
          try
            ServerProperties.FetchDatabaseInfo();
            DatabaseList := TStringList.Create();
            for index := 0 to Pred( ServerProperties.DatabaseInfo.NoOfDatabases ) do
            begin
              DatabaseList.Add( ServerProperties.DatabaseInfo.DbName[index] );
            end;
          except
            on E:Exception do raise Exception.Create( 'Unable to read local server properties' );
          end;
        finally
          ServerProperties.Active := FALSE;
        end;
     
        DatabaseName := GetDatabasePath( server, database, DatabaseProxy.ClientPath );
        for index := 0 to Pred( ServerProperties.DatabaseInfo.NoOfDatabases ) do
        begin
          if AnsiSameText( DatabaseName, DatabaseList[index] ) then result := dsAttached;
        end;
        FreeAndNil( DatabaseList );
     
      finally
      	ServerProperties.free;
      end;
    end;

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    A mon avis il faut chercher dans les sources du côté de ce qui est Service
    http://docwiki.embarcadero.com/Libra...e.TFDIBService
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 174
    Points : 38
    Points
    38
    Par défaut
    Effectivement dans delphi 10 Berlin on a un truc équivalent avec le composant TFDIBInfo (FireDAC.Phys.IBBase.TFDIBInfo).
    Mais je suis sur la version Seattle qui ne possède pas ce composant.
    Dommage pour moi.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Je viens de regarder vite fait dans Seattle et donc les sources pour ce dernier.
    Je pense qu'il faut faire un tour du côté de Firedac.phys.IBBase , il y a là une classe TFDIBService qui semble prometteuse (avec sa procédure QueryService en particulier)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 174
    Points : 38
    Points
    38
    Par défaut
    Bonjour,

    Je me répond à moi-même.
    En fait on peut depuis Delphi 10.1 Berlin utiliser le composant TFDIBInfo et sa méthode GetUsage pour récupérer le nb de bases chargées par le serveur ainsi que le chemin vers ces bases.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débat] Choisir InterBase/Firebird ou Microsoft SQL-SERVER ?
    Par asenaici dans le forum Décisions SGBD
    Réponses: 90
    Dernier message: 19/03/2009, 20h51
  2. [FIREBIRD]Drivers ODBC
    Par tripper.dim dans le forum Connexion aux bases de données
    Réponses: 10
    Dernier message: 24/04/2007, 11h02
  3. Lien vers Mozilla Firebird : il manque les themes
    Par Nasky dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 20/10/2003, 13h24
  4. [firebird] Connexion impossible en lecture seule
    Par severine dans le forum Administration
    Réponses: 2
    Dernier message: 01/08/2003, 15h35
  5. Refus d'accès à une base Firebird
    Par severine dans le forum Installation
    Réponses: 18
    Dernier message: 04/06/2003, 16h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo