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 : 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);
Il existe une autre fonction ChargeCategories copiée sur la même base

La fonction InitStatement est la suivante :

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;
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
    // 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