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 :

Comment créer dynamiquement une base de données firebird sur Dephi 10 seattle ?


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2019
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2019
    Messages : 38
    Par défaut Comment créer dynamiquement une base de données firebird sur Dephi 10 seattle ?
    Bonjour à tous,
    je tente de créer une base de données firebird 3 sur delphi 10 seattle mais ça renvoie l'erreur : Unavailable database.
    Voici le code que j'ai tapé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      IBDatabase1.DatabaseName := ChangeFileExt(Application.ExeName, '.fdb');
      IBDatabase1.Params.Add('USER ''SYSDBA''');
      IBDatabase1.Params.Add('PASSWORD ''masterkey''');
      IBDatabase1.Params.Add('PAGE_SIZE 4096');
      IBDatabase1.Params.Add('DEFAULT CHARACTER SET WIN1250');
      IBDatabase1.CreateDatabase;

  2. #2
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 947
    Par défaut
    Le serveur est-il actif ?

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 676
    Billets dans le blog
    65
    Par défaut
    Bonjour et bienvenue,

    Alors plusieurs points à vérifier :
    Que le serveur "tourne" comme l'écrit qi130
    mais aussi que lors de l'installation la gds32.dll a été copiée dans le répertoire système.

    Ensuite je conseillerais plutôt d'utiliser Firedac (FDconnection) avec le driver FB , ce qui éviterai cette histoire de gds32.dll

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2019
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2019
    Messages : 38
    Par défaut
    merci, comment l'activer ?

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 676
    Billets dans le blog
    65
    Par défaut
    Il faut vérifier que le service est actif dans la listes des services windows (services.msc)

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2019
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2019
    Messages : 38
    Par défaut
    oui, j'ai vérifié et le service firebird est en cours d'exécution. Le fichier gds32.dll est bien dans mon dossier windows\system32.

  7. #7
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2019
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2019
    Messages : 38
    Par défaut essai avec firedac
    je viens d'essayer firedac. quand je n'utilise pas la création des tables, la base est créée mais quand j'essaie de créer les tables ni la base ni les tables ne sont créées.
    voici le code :
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    Var
     FDConnection : TFDConnection;
     LaBase, Rep : String;
     
    begin
       DM_DB.FDCon.Close;
        Rep:='C:\Gicl_Pro\BD\';
        LaBase:=Rep+'Bd_Gicl77.fdb';
        Try
         FDConnection := TFDConnection.Create(Self);
            //------------------
            FDConnection.LoginPrompt:=False;
            FDConnection.Params.Clear;
            FDConnection.Params.Values['DriverID'] :='FB';
            //FDConnection.Params.Values['Server'] := 'LocalHost';
            FDConnection.Params.Values['Protocol'] := 'Local';
            FDConnection.Params.Values['Database'] :=LABASE;
            FDConnection.Params.Values['user_name'] :='sysdba';
            FDConnection.Params.Values['password'] :='masterkey';
            FDConnection.Params.Values['CaracterSet'] := 'UTF8';
            //--------------------------
            FDConnection.Open;
             //****************** RENSEIGNEMENTS  **********************
             Dm_Db.Table1:=TFdTable.Create(Self);
             With Dm_Db.Table1 do
              Begin
               Active := False;
               Connection :=Dm_Db.FDCon;
               TableName := 'RENSEIG';
               FieldDefs.Clear;
               FieldDefs.Add('MINISTERE',FtString,225,FALSE);
               FieldDefs.Add('ENSEIGNE',FtString,225,FALSE);
               FieldDefs.Add('DIRECTION',FtString,225,FALSE);
               FieldDefs.Add('BP',FtString,10,FALSE);
               FieldDefs.Add('FAX',FtString,15,FALSE);
               FieldDefs.Add('EMAIL',FtString,50,FALSE);
               FieldDefs.Add('TEL',FtString,50,FALSE);
               FieldDefs.Add('VILLE',FtString,50,FALSE);
               FieldDefs.Add('DEVISE',FtString,50,FALSE);
               FieldDefs.Add('AUTREINFO',FtString,100,FALSE);
               FieldDefs.Add('MSG_RECU',FtString,100,FALSE);
               FieldDefs.Add('PAYS',FtString,50,FALSE);
               FieldDefs.Add('DIRECTEUR',FtString,40,FALSE);
               FieldDefs.Add('COMPTABLE',FtString,40,FALSE);
               FieldDefs.Add('ANNEE',FtString,12,FALSE);
               FieldDefs.Add('LOGO',Ftblob);
               FieldDefs.Add('CACHET',Ftblob);
               FieldDefs.Add('SIGNATURE',Ftblob);
              End;     // with Table1 do
             If Not Dm_Db.table1.Exists Then Dm_Db.table1.createtable;
             Dm_Db.table1.Free;
     
            /////////  Le ENTREE
            Dm_Db.Table1:=TFdTable.Create(Self);
             With Dm_Db.Table1 do
              Begin
               Active := False;
               Connection :=Dm_Db.FDCon;
               TableName := 'ENTREE';
               FieldDefs.Clear;
               FieldDefs.Add('NUMENT',ftString,15);
               FieldDefs.Add('LIBELLE',ftString,50);
               FieldDefs.Add('PRESTATION',ftString,30);
               FieldDefs.Add('CATEGPREST',ftString,30);
               FieldDefs.Add('MT',FtFloat);
               FieldDefs.Add('MTV',FtFloat);
     
               FieldDefs.Add('DATE1',FtDate);
               FieldDefs.Add('DATEV',FtDate);
               FieldDefs.Add('HEURE',FtTime);
               FieldDefs.Add('MOIS',FtString,15);
               FieldDefs.Add('ANNEE',FtString,10);
               FieldDefs.Add('AGENCE',FtString,30);
               FieldDefs.Add('OPERATEUR',FtString,30);
               FieldDefs.Add('RECETTE',FtString,3);
               FieldDefs.Add('ORDRE',ftInteger);
              End;     // with IBTable do
             If Not Dm_Db.table1.Exists Then Dm_Db.table1.createtable;
             Dm_Db.Table1.Free;
     
            ///////////////////////////////////////////
             Dm_Db.Table1:=TFdTable.Create(Self);
             With Dm_Db.Table1 do
              Begin
               Active := False;
               Connection  := Dm_Db.FDCon;
               TableName := 'PRODCHRG';
               FieldDefs.Clear;
               FieldDefs.Add('LIBELLE',FtString,30);
               FieldDefs.Add('MOIS1',FTFLOAT);
               FieldDefs.Add('MOIS2',FTFLOAT);
               FieldDefs.Add('MOIS3',FTFLOAT);
               FieldDefs.Add('MOIS4',FTFLOAT);
               FieldDefs.Add('MOIS5',FTFLOAT);
               FieldDefs.Add('MOIS6',FTFLOAT);
               FieldDefs.Add('MOIS7',FTFLOAT);
               FieldDefs.Add('MOIS8',FTFLOAT);
               FieldDefs.Add('MOIS9',FTFLOAT);
               FieldDefs.Add('MOIS10',FTFLOAT);
               FieldDefs.Add('MOIS11',FTFLOAT);
               FieldDefs.Add('MOIS12',FTFLOAT);
               FieldDefs.Add('TOTAL',FTFLOAT);
               FieldDefs.Add('TAUX',FTFLOAT);
               FieldDefs.Add('NATURE',FtString,7);
               If Not Dm_Db.table1.Exists Then
                Begin
                 createtable;
                 //Bool:=True;
                End; // If Not table1.Exists Then
              End;     // with Dm_Db.Table1 do
             Dm_Db.table1.Free;
     
            FDConnection.Close;

  8. #8
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 676
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par delphiketou Voir le message
    Le fichier gds32.dll est bien dans mon dossier windows\system32.
    Oui mais est-elle de la bonne version c'est-à-dire une copie de fbclient.dll (32 ou 64 bits dépendant de votre installation) et, s'il s'agit de la 64bits il doit aussi y avoir une copie de fbclient (32 bits) nommée gds32.dll dans windows\syswow64. En fait lors de l'installation tout se joue sur le dernier écran
    Nom : InstallScreen-3.0.png
Affichages : 855
Taille : 37,7 Ko
    les deux dernières cases, intitulé contenant "legacy", doivent être cochées si vous voulez utiliser les IBxxxxxxx, DBExpress ou même le BDE

    Pour ce qui est de la création de la base
    vous avez un exemple utilisant les scripts ici http://docwiki.embarcadero.com/RADSt..._SQL_(FireDAC)
    mais il y a plus simple mettre ajouter un paramètre pour la connexion : FDConnection.Params.Add('OpenMode=OpenOrCreate');À ce sujet une remarque : évitez d'utiliser SYSDBA comme propriétaire de la Base de Données


    Pour la création des tables, là, je dois avouer ma surprise Dm_Db.table1.Exists c'est la première fois que j'utilise cette instruction et j'ai des doutes sur sa validité dans ce cas !
    J'ai toujours utilisé une requête pour vérifier l'existence d'une table dans une base de données Firebird.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select count(*)
    from RDB$RELATIONS
    where RDB$RELATION_NAME = 'MATABLE';

    pour résumer
    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
    54
    var AQuery : TFDQuery;
        existe : Boolean; 
        fdConnection2 : TFDConnection;
        fdTable2 : TFDTable;
    begin
     
     FDConnection2 := TFDConnection.Create(Self);
     try
      FDConnection2.LoginPrompt:=False;
      FDConnection2.Params.Clear;
      FDConnection2.Params.Values['DriverID'] :='FB';
      //FDConnection2.Params.Values['Server'] := 'LocalHost';
      FDConnection2.Params.Values['Protocol'] := 'Local';
      FDConnection2.Params.Values['Database'] :='D:\analyse\totoDB.fdb';
      FDConnection2.Params.Values['user_name'] :='sysdba';
      FDConnection2.Params.Values['password'] :='masterkey';
      FDConnection2.Params.Values['CaracterSet'] := 'UTF8';
      FDConnection2.Params.Add('OpenMode=OpenOrCreate');
      FDConnection2.Connected:=True;
     
      if FDConnection2.Connected then
      begin
        AQuery:=TFDQuery.Create(self);
        try
          AQuery.Connection:=FDConnection2;
          AQuery.SQL.Text:='select count(*) from RDB$RELATIONS where RDB$RELATION_NAME = :Table';
          Aquery.ParamByName('Table').asString:='TOTO';
          AQuery.Active:=True;
          existe := AQuery.Fields[0].asInteger=1;
          AQuery.Active:=False;
        finally
          AQuery.Free;
        end;
     
      fdTable2:=TFDTable.Create(Self);
      try  
       FdTable2.TableName:='TOTO';
       fdTable2.Connection:=fdConnection2;
     
       if not Existe then begin
              fdTable2.FieldDefs.Clear;
              fdTable2.FieldDefs.Add('LIBELLE',FtString,30);
              ...
              fdtable2.CreateTable();
           end;
       finally
         fdTable2.Free;
       end;
     
      end;
    finally
      fdConnection2.Free;
    end;
    end;
    maintenant, j'émettrai beaucoup de réserve sur la création de table en utilisant FieldDefs et CreateTable je recommanderai plutôt de passer par scripts (TFDScript)
    Pourquoi ?
    • Pour une déclaration de champs plus "Firebird" le type ftFloat est certainement moins précis que NUMERIC ou DECIMAL
    • La possibilité de création de colonnes "calculées" (COMPUTED BY)
    • La création des contraintes (que ce soit index mais aussi références et contrôles de colonnes)
    • L'ajout de triggers
    • ...


    Attention aux quelques spécificités pour les scripts avec Firebird
    ISQL de Firebird fonctionne lorsque le mode Validation automatique est désactivé. Par défaut, le mode Validation automatique pour TFDScript/TFDConnection est activé. Pour améliorer la compatibilité, définissez FDConnection.TxOptions.AutoCommit sur False avant l'exécution du script. Ou exécutez la commande de script SET AUTOCOMMIT OFF.

Discussions similaires

  1. Réponses: 20
    Dernier message: 29/08/2013, 18h38
  2. Réponses: 0
    Dernier message: 14/04/2010, 15h40
  3. Comment on connecte un programme Java avec une base de données FireBird?
    Par Gomez dans le forum Connexion aux bases de données
    Réponses: 1
    Dernier message: 16/02/2007, 10h21

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