1. #1
    Membre régulier
    Inscrit en
    juillet 2005
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : juillet 2005
    Messages : 257
    Points : 113
    Points
    113

    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 : 44
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
    257
    Détails du profil
    Informations forums :
    Inscription : juillet 2005
    Messages : 257
    Points : 113
    Points
    113

    Par défaut

    Autre précision, j'utilise Quick Report 3.5

  3. #3
    Membre expert
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    2 447
    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 : 2 447
    Points : 3 844
    Points
    3 844

    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
    257
    Détails du profil
    Informations forums :
    Inscription : juillet 2005
    Messages : 257
    Points : 113
    Points
    113

    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
    Inscrit en
    janvier 2007
    Messages
    8 326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 8 326
    Points : 19 249
    Points
    19 249
    Billets dans le blog
    4

    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
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  6. #6
    Membre régulier
    Inscrit en
    juillet 2005
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : juillet 2005
    Messages : 257
    Points : 113
    Points
    113

    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 : 37
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
    Inscrit en
    janvier 2007
    Messages
    8 326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 8 326
    Points : 19 249
    Points
    19 249
    Billets dans le blog
    4

    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
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

+ 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