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 :

probléme firebird embeded


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut probléme firebird embeded
    bonjour
    j'ai un programme qui utilise la BD FB embeded 2.5 sous win 7 avec composant IBX, je craie une base au démarrage, et je l'a supprime à la fin, je la remplis selon des données depuis des fichier texte, simplement pour facilité les traitement, et l'impression des état
    -première exécution ne ce connecte pas, mais après sa marche!!! même si j’exécute en mode administrateur, et selon faq17, j'ai modifier "IpcName = FIREBIRD" (enlever simplement le # )
    merci

  2. #2
    Membre éclairé
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Par défaut
    Vérifies si la base n'est pas connectée en design time car l'embedded ne tolère qu'une seule connexion à une base.

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 617
    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 617
    Billets dans le blog
    65
    Par défaut
    Je crois qu'il y a plusieurs points différents
    1- La création de la base au démarrage
    Comment ?
    2- La Faq17
    Mais pourquoi diable avoir fait ça ? la faq a certainement été mal lue
    3-même si j’exécute en mode administrateur
    Le mode administrateur de windows je présume ? mais si le répertoire de le BDD n'est pas un répertoire protégé et si aucun registre n'est touché cela n'a pas lieu

    4- BD FB embeded 2.5 sous win 7 avec composant IBX
    IBX de quelle version de Delphi ? je crois avoir lu que celle de XE n'était pas exempte de problèmes

  4. #4
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    merci de votre réponses
    pour akli_agha: sûr une seul connection car la base est crée à 0 à chaque démarrage de programme (ou dll)

    pour SergioMaster: ibx de delphi 2010, et sa marche très bien, surtout je fais que les insertion, et impression, pas de modification, ou des jointure compliqué;
    1- La création de la base au démarrage
    Comment ?
    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
    Function CreateBase(Nom: string):boolean;
    begin
       Result:=False;
       with TIBDatabase.Create(nil) do
        Try
            Params.Clear;
            DatabaseName := Nom;
            Params.Add('USER ''SYSDBA''');
            Params.Add('PASSWORD ''masterkey''');
            Params.Add('PAGE_SIZE 16384');
            Params.Add('DEFAULT CHARACTER SET ISO8859_1');
            CreateDatabase;
            Result:=True;
        Finally
          Free;
        End;
    end;
    sa marche avec fb embeded ou non

    2- La Faq17
    Mais pourquoi diable avoir fait ça ? la faq a certainement été mal lue
    peut être , je sais pas

    3-même si j’exécute en mode administrateur
    Le mode administrateur de windows je présume ? mais si le répertoire de le BDD n'est pas un répertoire protégé et si aucun registre n'est touché cela n'a pas lieu
    comme j'ai dis au premier poste, avec l'exe sa passe bien avec FB embedded, mais si j'utilise une dll sa passe pas, seulement avec fb C/S

    bien sûr il reste le problème de la première exécution, il ne peut crée la base, mais à partir de la 2éme execution sa marche bien,
    j'écrie rien sur la base de registre, jutilise un lecteur différent du system, j'ai mis tout les droits pour tout le monde,....
    peut être que j'ai oublier quelque chose
    merci

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 617
    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 617
    Billets dans le blog
    65
    Par défaut
    Au vu de ton code : tu détruis (free) le TIBDataBase

    Est-il recrée quelque part pour les connexions ?
    Y-a t'il un FileExist('nomdelabase') quelque-part pour vérifier avant création ?
    Comment se passe la 'destruction' de la BDD ?
    as-tu essayé avec un Try Except pour obtenir l'erreur de création de la première exécution ?

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Citation Envoyé par edam Voir le message
    merci de votre réponses
    pour akli_agha: sûr une seul connection car la base est crée à 0 à chaque démarrage de programme (ou dll)
    Citation Envoyé par edam Voir le message
    j'ai un programme qui utilise la BD FB embeded 2.5 sous win 7 avec composant IBX, je crée une base au démarrage, et je l'a supprime à la fin,
    pourquoi recréer à chaque fois ?
    tu peux très bien laisser la DB, juste faire des TRUNCATE au démarrage suivant
    Surtout si tu lance un EXE et la DLL en même, temps, tu ne peux pas supprimer une DB encours d'utilisation

    Est-ce que FB Embedded supporte des connexions multiples et
    concurrentielles ?
    Citation Envoyé par akli_agha Voir le message
    Vérifies si la base n'est pas connectée en design time car l'embedded ne tolère qu'une seule connexion à une base.
    Semble que nous avons la réponse !
    Tu ne peux donc pas connecter EXE et DLL en même temps, on en revient à ma proposition dans un autre sujet d'utiliser une DLL qui gère la DB, l'EXE et l'autre DLL utilisant cette DLL DB, l'Exe utilise LoadLibrary pour charger la DLL DB, l'autre DLL utilise GetModuleHandle pour utiliser la DLL DB déjà chargée



    Citation Envoyé par edam Voir le message
    je la remplis selon des données depuis des fichier texte, simplement pour facilité les traitement, et l'impression des état
    Citation Envoyé par edam Voir le message
    surtout je fais que les insertion, et impression, pas de modification, ou des jointure compliqué
    le "pas" s'applique-t-il à modification ET jointure
    Si tu fais des jointures, OK, le SQL offre des facilités !
    Si tu ne fais pas de jointure, FB me semble bien lourd,
    un simple TClientDataSet peut faire l'intermédiaire avec un outil de reporting utilisant le TDataSource\TDataSet comme QuickReport

    Perso, pour la création de DB, comme je déployais manuellement, j'utilisais IBExpert
    Ton code semble proche de la Doc en ligne du TIBDatabase.CreateDatabase
    Pourquoi ne pas conserver ce TIBDatabase après le CreateDatabase ?

    comme ceci

    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
    Function OpenBase(Nom: string): TIBDatabase;
    begin
       Result := TIBDatabase.Create(Application);
       with Result do
       begin
         DatabaseName := Nom;
         Open(); // vérifier si il faut gérer les Exceptions
     
         if not Connected then
         begin
     
            Params.Clear;
            Params.Add('USER ''SYSDBA''');
            Params.Add('PASSWORD ''masterkey''');
            Params.Add('PAGE_SIZE 16384');
            Params.Add('DEFAULT CHARACTER SET ISO8859_1');
            CreateDatabase;
     
            if not Connected then
              Open(); // vérifier si il faut gérer les Exceptions
         end;
       end;
     
       if not Result.Connected then
         FreeAndNil(Result);
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Au vu de ton code : tu détruis (free) le TIBDataBase

    Est-il recrée quelque part pour les connexions ?
    Y-a t'il un FileExist('nomdelabase') quelque-part pour vérifier avant création ?
    Comment se passe la 'destruction' de la BDD ?
    as-tu essayé avec un Try Except pour obtenir l'erreur de création de la première exécution ?
    1-oui, le code de création, je l'ai copier des example de delphi, , puis je fais la connection si la création passe
    2-bine sûr et plus, je fais une fonction qui récupére un nom introuvable
    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
    Function  GetNomLibre:string;
    const
       ext='.FDB';
    var
       i:integer;
       Ini: TIniFile;
       nomBD:string;
    begin
        with TIniFile.Create( VG_INI_RPRINTER_INI ) do
          try
              DirectoryBD :=ReadString( 'SYSTEM', 'DIRECTORY_DB',VG_INI_LOCAL);
          finally
            Free;
          end;
         DirectoryBD:=AnsiUpperCase(DirectoryBD);
         if DirectoryBD[length(DirectoryBD)]<>'\' then DirectoryBD:=DirectoryBD+'\';
         nomBD:='BaseTempo';
     
         if not DirectoryExists(DirectoryBD) then
            ForceDirectories(DirectoryBD);
         i:=0;
         while FileExists(DirectoryBD+nomBD+FormatFloat('00',i)+ext) do
             inc(i);
         Result:=DirectoryBD+nomBD+FormatFloat('00',i)+ext;
    end;
    3-j'ai déjà un try except, mais j'ai oublier de mettre un message dans l'except, , dans tout les cas, le programme ne plante pas en mode exe, passe, sans avoir de données, je vais essayer plus tard

    Citation Envoyé par ShaiLeTroll Voir le message
    pourquoi recréer à chaque fois ?
    tu peux très bien laisser la DB, juste faire des TRUNCATE au démarrage suivant
    Surtout si tu lance un EXE et la DLL en même, temps, tu ne peux pas supprimer une DB encours d'utilisation

    Est-ce que FB Embedded supporte des connexions multiples et
    concurrentielles ?

    Semble que nous avons la réponse !
    Tu ne peux donc pas connecter EXE et DLL en même temps, on en revient à ma proposition dans un autre sujet d'utiliser une DLL qui gère la DB, l'EXE et l'autre DLL utilisant cette DLL DB, l'Exe utilise LoadLibrary pour charger la DLL DB, l'autre DLL utilise GetModuleHandle pour utiliser la DLL DB déjà chargée
    le "pas" s'applique-t-il à modification ET jointure
    Si tu fais des jointures, OK, le SQL offre des facilités !
    Si tu ne fais pas de jointure, FB me semble bien lourd,
    un simple TClientDataSet peut faire l'intermédiaire avec un outil de reporting utilisant le TDataSource\TDataSet comme QuickReport

    Perso, pour la création de DB, comme je déployais manuellement, j'utilisais IBExpert
    Ton code semble proche de la Doc en ligne du TIBDatabase.CreateDatabase
    Pourquoi ne pas conserver ce TIBDatabase après le CreateDatabase ?

    comme ceci

    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
    Function OpenBase(Nom: string): TIBDatabase;
    begin
       Result := TIBDatabase.Create(Application);
       with Result do
       begin
         DatabaseName := Nom;
         Open(); // vérifier si il faut gérer les Exceptions
     
         if not Connected then
         begin
     
            Params.Clear;
            Params.Add('USER ''SYSDBA''');
            Params.Add('PASSWORD ''masterkey''');
            Params.Add('PAGE_SIZE 16384');
            Params.Add('DEFAULT CHARACTER SET ISO8859_1');
            CreateDatabase;
     
            if not Connected then
              Open(); // vérifier si il faut gérer les Exceptions
         end;
       end;
     
       if not Result.Connected then
         FreeAndNil(Result);
    end;
    je crais à chaque fois, car l'exe est appler par un autre application non delphi, mon programme sensé faire des états c'est tout, il peut êtres appler x fois en même temps, et chaque processus doit avoir son propre base de données, mon bos, m'a dit de rendre exe une dll, sa veux dire que seul ma dll (exe) qui accéed à cette base qui crée, pour la proposition de TClientdataset, normalement les premiére version l'utilise, mais en a eux 2 probléme, 1-mémoir insuffisant , 2- en utilisant Reportbuider, il ne peut se connecter à une base Dataclient, il lui faut une connexion (adoconnect, sqlconnection ou IBdatabase), c'est pourquoi au début j'ai choisi FB, mais mon bos opte pour sqlite, et c'est ce que finalment on va faire avec dbexpress esqlite de devart
    normalement j'ai du mettre ce post à délestage mais comme j'ai pas ce privilége (je sais pas ou est passé cette bouton) , j'ai voulus savoir si je peux résoudre ce probléme dll+Fb embedded
    merci à tout le monde

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

Discussions similaires

  1. Problème connexion FireBird Embedded
    Par Dark Christou dans le forum Firebird
    Réponses: 2
    Dernier message: 31/12/2009, 13h29
  2. Problème connexion FireBird Embedded
    Par Dark Christou dans le forum C#
    Réponses: 0
    Dernier message: 23/12/2009, 09h23
  3. Problème avec Firebird Embedded
    Par phobik dans le forum Bases de données
    Réponses: 13
    Dernier message: 21/10/2007, 11h26
  4. [Firebird] Embeded
    Par cyberlahy dans le forum Installation
    Réponses: 9
    Dernier message: 13/10/2005, 16h12
  5. Firebird embedded et les UDF
    Par Tito dans le forum Installation
    Réponses: 8
    Dernier message: 02/05/2005, 08h46

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