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 :

EAccessViolation avec IB


Sujet :

Bases de données Delphi

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Par défaut EAccessViolation avec IB
    Bonjour,

    Sur une fiche DataModule j'ai disposé le composant IBDatabase1
    Dès que je veux initialiser sa propriété databasename par le simple code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        with IbDatabase1 do
        begin
          DatabaseName:= DBName;
    L'erreur se déclenche
    DBName est du type string du genre 'C:\MACHIN\BASETRUC.GDB'
    Quelqu'un peut me dire comment évitre cette erreur ?

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 716
    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 716
    Billets dans le blog
    65
    Par défaut
    Quelle Erreur ?

    Déjà il faudrait ajouter avant
    ensuite je ne sais pas si DBName est un nom judicieux , je suggère plutôt NomDB, j'ai peur que cela puisse être un nom de propriété

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Par défaut
    L'erreur qui se déclenche est une IBAccessError et elle se produit à la 1 ère ligne. Par ailleurs Connected est à false.

    Tout se passe comme si IBDataBase1 n'était pas reconnu (ou n'avait pas été déclaré) je l'ai pourtant placé sur la fiche DataModule1 avec un IBTransaction1 dont la propriété DefautDataBase est initialisée sur IBDataBase1

    Je n'ai fait qu'écrire la procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DataModule1.OpenDB(DBBase: string);
    begin
    With IBDataBase1 do 
    begin
    ...
    end;
    Cette seule ligne déclenche une IBAccessError.
    Ni le nom DBBase ni la propriété Connected ne semble incriminées. Le path et le nom de la base passés dans DBBase correspond à une base existtante

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Par défaut EAccessViolation
    Autant pour moi
    L'erreur déclenchée est EAccessViolation et non IBAccessError comme écrit dans mon message précédent.
    Autre chose :
    Si j'initialise la propriété DataBaseName sur le composant de la fiche avec le même path et nom de fichier GDB et que je met Connected à True tout se passe bien. C'est uniquement quand j'initialise la propriété DataBaseName par du code dynamique que jobtiens l'erreur. Or dans la structure de mon application il faut absolument que j'utilise le code.

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 716
    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 716
    Billets dans le blog
    65
    Par défaut
    je travailles avec FB et FibPlus ce qui fait que pour moi DBName est une propriété .
    pour me connecter je fait donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DataModule.Base.DBName:='C:\mabase.fdb';
    DataModule.Base.Connected:=true;
    étant bien entendu que mot de passe et utilisateur sont déjà renseigné ailleurs
    AllowStreamedConnected est bien à false ?
    les Params sont-ils bien renseignés ?

    Quelle-est l'erreur exacte ? (tu peux faire ctrl+c sur la fenêtre message puis le copier dans n'importe quel editeur de texte , enfin ça depend de Windows)

  6. #6
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 949
    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 949
    Par défaut
    Qq précisions STP :

    Tu évoques un datamodule, c'est une bonne approche, mais les codes que mentionnes sont situés où dans ton appli ?

    Bref, quelle est l'architecture de ton prog ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Par défaut
    Il s'agit d'une fiche DELPHI DataModule sur la quelle on pose des composants database. J'ai posé un IBDataBase eu IBTransaction
    La fiche Delphi DataModule n'a pas de propriété Base, il ne semble pas que l'on parle de la même chose. TDataModule est une classe qui centralise la gestion des composants non visuels d'une application. Elle ne posséde que la propriété publiée OldCreateOrder.

    Quant au texte de l'erreur il est du genre : "Violation d'accès à l'adresse 004AD216 dans le module 'application.exe" Ecriture à l'adresse 00000058"

    Ces info sont elles utiles ?

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 716
    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 716
    Billets dans le blog
    65
    Par défaut
    le dataModule est-il bien créer avant la 'fiche' delphi (voir source du projet)

    cela devrait se présenter ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    begin
     Application.initialize;
     Application.CreateForm(TDatamodule, Datamodule); 
     Application.CreateForm(TForm1, Form1);
     Application.Run;
    end;
    nota : pour Base c'est le nom de mon composant TpFibDataBase (équivalent en gros au TIBdataBase )

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Par défaut
    J'ai vérifié, la création du datamodule se trouvait être après la création de la fiche principale, j'ai donc inverser l'ordre mais cela ne change rien, j'ai toujours la même erreur au même endroit

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Par défaut
    pour mieux comprendre voici un extrait du code de création de la fiche datamodule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    type
      TDBModule = class(TDataModule)
        DataBase: TIBDatabase;
        qry: TIBQuery;
        Transaction: TIBTransaction;
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        function Open_DB_Ok( BaseName: string): boolean;
      end;
    et de la fonction
    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
     
    function TDBModule.Open_DB_Ok(  BaseName: string): boolean;
    begin
      with DataBase do
      begin
        Params.Add('USER "SYSDBA"');
        Params.Add('PASSWORD "masterkey"');
        Params.Add('PAGE_SIZE 8192');// pour stocker image 10 mégaPix
        Connected := true;
        result:= DataBase.TestConnected;
        Transaction.DefaultDatabase := DataBase;
        Transaction.Active:= Result;
        qry.Database := Database;
        qry.Transaction := Transaction;
      end;
    end;
    L'erreur se produit à la ligne With Database do

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Par défaut Ca marche
    Vérification faite j'avais oublié la ligne
    DatabaseName := BaseName;
    dans la boucle with DataBase do
    Je l'ai rétablie et depuis que j'ai inversé les Application.CreateForm je n'ai plus l'erreur.
    Mille merci
    J'active le bouton résolu

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

Discussions similaires

  1. [Free Pascal] EAccessViolation avec interface et méthode de classe
    Par Neuromancien2 dans le forum Free Pascal
    Réponses: 3
    Dernier message: 01/03/2013, 07h10
  2. Réponses: 2
    Dernier message: 26/09/2010, 20h02
  3. Erreur d'EAccessViolation avec un String *
    Par Freud44 dans le forum C++Builder
    Réponses: 2
    Dernier message: 22/10/2008, 12h00
  4. EAccessViolation error avec tableau de pointeur
    Par mat777 dans le forum Langage
    Réponses: 3
    Dernier message: 16/01/2008, 16h21
  5. Erreur EACCESSVIOLATION avec des compsts créés dynamiquement
    Par tsikpemoise dans le forum Bases de données
    Réponses: 4
    Dernier message: 28/02/2004, 20h05

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