ADO : Violation d'accès

yannba Messages postés 133 Date d'inscription mercredi 4 janvier 2006 Statut Membre Dernière intervention 7 septembre 2010 - 14 févr. 2006 à 19:14
walid2876 Messages postés 49 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 31 août 2008 - 14 févr. 2006 à 22:50
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

yannba Messages postés 133 Date d'inscription mercredi 4 janvier 2006 Statut Membre Dernière intervention 7 septembre 2010
14 févr. 2006 à 19:38
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.
0
walid2876 Messages postés 49 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 31 août 2008
14 févr. 2006 à 22:50
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
0