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 :

Violation d'accès pour DataSet


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 265
    Points : 117
    Points
    117
    Par défaut Violation d'accès pour DataSet
    Bonjour à tous,

    Je travaille sur Delphi 7. Dans mon DataModule j'ai posé mes composants ADOQuery. Et voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DataModules.ADOQuery.ConnectionString :=HR.ConnectionString;
       DataModules.ADOQuery.Active:=false;
       DataModules.ADOQuery.Sql.Clear;
       DataModules.ADOQuery.Sql.Add('Select * from tb_table');
       DataModules.ADOQuery.Active:=true;
     
       RptrelevCpte.QuickRep1.DataSet:=DataModules.ADOQuery;
    HR.ConnectionString a la chaine de connection pour se connecter à la base de données, et cela marche très bien lorsqu'il s'agit d'une requête. C'est la dernière instruction RptrelevCpte.QuickRep1.DataSet:=DataModules.ADOQuery; qui me génère cette erreur:

    Nom : Sans_titre.jpg
Affichages : 639
Taille : 22,6 Ko

    Je vous signale RptrelevCpte a été créé de même que le composant Quick Report QuickRep1 posé.

    Merci de votre aide.

  2. #2
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 265
    Points : 117
    Points
    117
    Par défaut
    Autre précision, j'utilise Quick Report 3.5

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    j'avoue na pas travailler de cette façon mais bon

    tu as essayer de faire la jointure avant d'ouvrir ta requete ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DataModules.ADOQuery.ConnectionString :=HR.ConnectionString;
       DataModules.ADOQuery.Active:=false;
       DataModules.ADOQuery.Sql.Clear;
       DataModules.ADOQuery.Sql.Add('Select * from tb_table');
       RptrelevCpte.QuickRep1.DataSet:=DataModules.ADOQuery; // juste avant d'acitver
       DataModules.ADOQuery.Active:=true;
       if not(RptrelevCpte.QuickRep1.DataSet.IsEmpty) Then
         RptrelevCpte.QuickRep1.Preview;
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  4. #4
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 265
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par anapurna Voir le message
    salut

    j'avoue na pas travailler de cette façon mais bon

    tu as essayer de faire la jointure avant d'ouvrir ta requete ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DataModules.ADOQuery.ConnectionString :=HR.ConnectionString;
       DataModules.ADOQuery.Active:=false;
       DataModules.ADOQuery.Sql.Clear;
       DataModules.ADOQuery.Sql.Add('Select * from tb_table');
       RptrelevCpte.QuickRep1.DataSet:=DataModules.ADOQuery; // juste avant d'acitver
       DataModules.ADOQuery.Active:=true;
       if not(RptrelevCpte.QuickRep1.DataSet.IsEmpty) Then
         RptrelevCpte.QuickRep1.Preview;
    Merci, j'ai toujours le même message d'erreur. J'avoue que c'est ma première fois d'utiliser Quick Report 3.5
    Bref si une personne peut avoir un tutoriel pour me guider car j'ai suivi cette video:


  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    A mon avis le problème est que l'instruction est placée dans le datamodule et que, comme en général, le datamodule est créé avant la forme du Quickreport.

    Pour moi l'instruction devrait être dans le OnCreate de la "forme" ou dans le BeforePrint du QuickReport

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     uses datamoduleunit ...
     QuickRep1.DataSet:=DataModules.ADOQuery;
    le datamodule étant la première "fiche" créée au niveau du projet
    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

  6. #6
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 265
    Points : 117
    Points
    117
    Par défaut
    Après vos remarques, j'ai mis ce bout de 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
    procedure TFCompteClient.Btn_relevCpteClick(Sender: TObject);
    var ADOQuery : TADOQuery;
    begin
       ADOQuery:=TADOQuery.Create(Self);
       ADOQuery.ConnectionString :=HR.ConnectionString;
       ADOQuery.Active:=false;
       ADOQuery.SQL.Clear;
       ADOQuery.SQL.Add('select * from tb_table');
       ADOQuery.Active:=true;
     
       with QuickReport1 do
       begin
          DataSet:=ADOQuery; 
       end;
    Alors que j'ai bien installé Quick Report 3.5, j'ai ce message

    Nom : Sans_titre1.jpg
Affichages : 560
Taille : 29,2 Ko

    lors de l’exécution de cette ligne with QuickReport1 do
    begin
    DataSet:=ADOQuery;
    end;

    J'ai fait des recherches, dans certains sites les utilisateurs demandent d'avoir la version prof de Quick Report. Quelqu'un aurait une idée de la source de mes problèmes ?

    Je vous remercie.

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    J'ai fait des recherches, dans certains sites les utilisateurs demandent d'avoir la version prof de Quick Report.
    non ce n'est pas forcément nécessaire

    Quelqu'un aurait une idée de la source de mes problèmes ?
    ce que vous ne maitrisez pas c'est le fait que le Quickreport est une forme (spécialisée mais une forme)

    dans votre dernier code vous ne faites pas appel à cette forme d'où le problème : le Quickrep (si mes souvenirs sont bons) n'est pas dans la clause uses

    procedure TFCompteClient.Btn_relevCpteClick(Sender: TObject);
    var ADOQuery : TADOQuery;
    monRapport : TRptrelevCpte;
    begin
    ADOQuery:=TADOQuery.Create(Self);
    Try
    ADOQuery.ConnectionString :=HR.ConnectionString;
    ADOQuery.Active:=false;
    ADOQuery.SQL.Clear;
    ADOQuery.SQL.Add('select * from tb_table');
    ADOQuery.Active:=true;

    monRapport:=TRptrelevCpte.Create(nil);
    try
    with monRapport.
    QuickReport1 do
    begin
    DataSet:=ADOQuery;
    Preview;
    end;

    finally
    monRapport.Free;
    end;
    finally
    ADOQuery.Free;
    end;

    end;
    mais, si j'ai bien saisi vous utilisez D7, alors en lieu et place de Quickrep vous auriez pu utiliser Rave ce qui aurait totalement changé la donne
    l'inconvénient majeur des versions anciennes de Quickreport c'est que l'état est inclus dans une forme : vous voulez modifier ne serait-ce qu'une virgule il faut recompiler tout le programme. Avec Rave ou FastReport l'état est "chargeable" à partir d'un fichier (il suffit donc de deployer ce fichier sans avoir à recompiler)
    mais surtout il suffit déposer deux ou trois composants même dans un datamodule pour que cela puisse fonctionner

    A noter que les prochaines versions de Delphi propose encore un nouveau générateur
    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

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

Discussions similaires

  1. DLL pour postgreSQL : erreur violation d'accès
    Par valda dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 11/02/2011, 13h27
  2. requete / violation d'accès
    Par marie253 dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/08/2004, 13h29
  3. Violation d'acces apres Execute
    Par SegmentationFault dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 10/08/2004, 16h23
  4. [CR] quel est le meilleur mode d'accès pour base Access
    Par IRAD dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/07/2004, 09h02
  5. Violation d'accès apres Close
    Par SegmentationFault dans le forum Bases de données
    Réponses: 3
    Dernier message: 05/07/2004, 16h46

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