Bonjour à tous,
J'ai un petit soucis non compréhensible. A certains moments, Delphi considère une nouvelle variable Objet comme étant assignée et <> nil, alors qu'il n'y a eu que sa déclaration et pas de MonObjet := TObjet.Create .
Voici 1 fonction ChargeAuteurs :
Il existe une autre fonction ChargeCategories copiée sur la même base
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
17
18 procedure ChargeAuteurs; var OdbcAuteur: TOdbcStmt; Auteur: TAuteur; begin if not assigned(AuteurVide) then AuteurVide := TAuteur.Create; AuteurVide.Efface; // Création ou clear de la liste if not assigned(ListeAuteurs) then ListeAuteurs := TListeAuteurs.Create else ListeAuteurs.Clear; InitStatement(OdbcAuteur); ... CloseStatement(OdbcAuteur); FreeAndNil(OdbcAuteur);
La fonction InitStatement est la suivante :
J'utilise ces fonctions dans le OnCreate de ma form principale :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 // Initialise un nouveau Statement function InitStatement(var varOdbcStmt: TOdbcStmt): boolean; begin Result := True; if (not assigned(varOdbcStmt)) or (varOdbcStmt = nil) then varOdbcStmt := TOdbcStmt.Create(Application); varOdbcStmt.AutoFirstRow := False; varOdbcStmt.OdbcConnexion := odbcCnx; if not (varOdbcStmt.Connect) then begin VistaErreur(Application.MainForm, 'Message d''erreur', '', varOdbcStmt.ErrorMessage); Result := False; end; end;
Lors de l'appel InitStatement depuis ChargeAuteur, la ligne if (not assigned(varOdbcStmt)) or (varOdbcStmt = nil) retourne Faux, alors que pour tous les autres appels varOdbcStmt = nil
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 // Charge les catégories ChargeCategories; for i := 0 to listeCategories.Count - 1 do begin cboRechercheCategorie.Items.Append(TCategorie(listeCategories[i]).Nom); cboConsultCategorie.Items.Append(TCategorie(listeCategories[i]).Nom); end; // Charge les utilisateurs ChargeAuteurs; for i := 0 to ListeAuteurs.Count - 1 do cboAuteur.Items.Append(TAuteur(ListeAuteurs[i]).Nom);
Ce qui est encore plus bizarre, c'est que si j'appelle ChargeCategorie puis ChargeAuteurs l'un après l'autre, sans code entre les deux, ça fonctionne bien. Si je les inverse, ça ne fonctionne plus... 2 fois ChargeAuteur de suite, le 1er pose problème et pas le second... l'erreur est toujours sur l'objet créé dans ChargeAuteurs.
J'avoue ne plus savoir où chercher pour essayer d'avoir un comportement normal.
Ah oui, c'est sous D2009 update 3.
Merci
Partager