ADO : Violation d'accès

Signaler
Messages postés
133
Date d'inscription
mercredi 4 janvier 2006
Statut
Membre
Dernière intervention
7 septembre 2010
-
Messages postés
49
Date d'inscription
mardi 26 avril 2005
Statut
Membre
Dernière intervention
31 août 2008
-
Bonjour,

- J'ai une application avec 3 form.
Sur la 1°, j'ai 1 adoconection, 3 ADOTable, 2 ADOQuery.
J'ai décidé de mettre tout ca dans un DataModule que j'ai nommé dans la propriété Name : DM.
- J'ai déclaré dans mon Unit1 : uses unit4.
- Puis devant tous mes ADOTable ..., ADOQuery, ..., ADOConnection, j'ai mis DM. (soit par ex : DM.ADOTable1....).

- J'ai compilé, tout est ok. Je fais F9, j'ai le message suivant :
Exception déclenchée à $7C81EB33. Classe d'exception EAccessViolation avec message 'Violation d'accès à l'adresse 005071E2 dans le module 'Project1.exe'. Lecture de l'adresse 00000078'. Processus Project1.exe (848)

Je clique malgré tout sur "continuer" et mon prog marche quand meme.
Quand je fais F7, je m'apercois que le message d'erreur aparait dans :
procedure TForm1.FormCreate(Sender: TObject);
Begin
.....
DM.ADOTableCompte.First;
....
End;
Et là, il bloque carrément.

POURQUOI ? Merci de votre aide.

2 réponses

Messages postés
133
Date d'inscription
mercredi 4 janvier 2006
Statut
Membre
Dernière intervention
7 septembre 2010

J'ai resolu le probleme en modifiant la source comme ceci. J'ai inversé l'ordre des création des Unit.
Par contre, juste une question : dans un FormCreate, quel est le code qui m'aurait permis de faire la meme chose ?

program Project1;

uses
Forms,
unit1 in 'unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3},
Unit4 in 'Unit4.pas',
Unit5 in 'Unit5.pas' {DM: TDataModule};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.Run;
end.
Messages postés
49
Date d'inscription
mardi 26 avril 2005
Statut
Membre
Dernière intervention
31 août 2008

Utiliser l'evenment OnActivate de la form1


Ou dans l'evenement AfterOpen de AdoTableCompte ..


Mais jamais avec OnCreate avec Ton cas , meme si tu inverse le ordre de creation c'est faux OnCreate c'est un enevement qui se produit lors de construction de la form (Constructor) on met ici des initialisation des variable et des membres de la classe et apres le creation et lorsque la fiche sera visible tu peux acceder a ta basede donnée
il sera mieux