Objet pas à nil à sa déclaration
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 :
Code:
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); |
Il existe une autre fonction ChargeCategories copiée sur la même base
La fonction InitStatement est la suivante :
Code:
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; |
J'utilise ces fonctions dans le OnCreate de ma form principale :
Code:
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); |
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
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 :)