Bonjour à tous,
J'ai ce message d'erreur lorsque je tente de remplir un TListView : Index de liste hors limites (8)
Ca me répète le message pour chaque ligne…
voila mon code:
quand j'exécute pas à pas, l'erreur s'arrête ici (dans System.Classes)
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 begin ListView1.Clear; ListView1.Column[5].Caption := 'Code postal client'; ListView1.Column[6].Caption := 'Concessionnaire'; ListView1.Column[7].Caption := 'Code postal concess'; ListView1.Column[8].Caption := 'Description'; DBExp := TSQLite3Database.Create; try DBExp.Open(Utilisateur); Stmt_Exp := DBExp.Prepare('SELECT * FROM affaire ' + ExportExcel + ' ORDER BY Date'); try while Stmt_Exp.Step = SQLITE_ROW do begin Item2 := ListView1.Items.Add; ShowMessage('1'); Item2.Caption := FormatDateTime('dd/mm/yyyy', UnixToDateTime(StrToInt(Stmt_Exp.ColumnText(1)))); //Date Item2.SubItems.Add(Stmt_Exp.ColumnText(2)); //Modele Item2.SubItems.Add(Stmt_Exp.ColumnText(3)); //Type Item2.SubItems.Add(Stmt_Exp.ColumnText(8)); //Pourcentage Item2.SubItems.Add(Stmt_Exp.ColumnText(11)); //Client Stmt_Exp2 := DBExp.Prepare('SELECT CodePostal FROM client WHERE id = "' + Stmt_Exp.ColumnText(5) +'"'); //IdClient Stmt_Exp2.Step; Item2.SubItems.Add(Stmt_Exp2.ColumnText(0)); //Code Postal Client Item2.SubItems.Add(Stmt_Exp.ColumnText(4)); //Concess Stmt_Exp2 := DBExp.Prepare('SELECT CodePostal FROM concessionnaire WHERE id = "' + Stmt_Exp.ColumnText(19) +'"'); //IdConcess Stmt_Exp2.Step; Item2.SubItems.Add(Stmt_Exp2.ColumnText(0)); //Code Postal Concessionnaire Item2.SubItems.Add(Stmt_Exp.ColumnText(9)); //Descritpion end; finally Stmt_Exp.Free; end; finally DBExp.Free end; end.
J'ai mis le ShowMessage('1') pour trouver exactement d'où vient le problème. L'erreur hors limites arrive juste avant au niveau Item2 := ListView1.Items.Add;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 function TStringList.Get(Index: Integer): string; begin if Cardinal(Index) >= Cardinal(FCount) then Error(@SListIndexError, Index); Result := FList[Index].FString; end;
J'ai fait des recherches un peu partout mais je ne comprends vraiment pas pourquoi…
Désolé si le code n'est pas top, je débute…
Merci![]()
Partager