Bonjour, je remplis un composant TTreeView en appelant une base de données composé de 7 niveaux.

Voici le code d'appel:

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
TreeView1.Items.Clear;
Datamodule1.QAfficheArboLoco.close;
Datamodule1.QAfficheArboLoco.SQL.Clear;
Datamodule1.QAfficheArboLoco.SQL.Add('SELECT ID_Engin_FK3,Module_N1,Module_N2,Module_N3,Module_N4,Module_N5,Module_N6');
Datamodule1.QAfficheArboLoco.SQL.Add('FROM Arbo');
Datamodule1.QAfficheArboLoco.SQL.Add('GROUP BY ID_Engin_FK3,Module_N1,Module_N2,Module_N3,Module_N4,Module_N5,Module_N6');
Datamodule1.QAfficheArboLoco.Open;
Datamodule1.QAfficheArboLoco.First;
L_Acc_FieldCount:= Datamodule1.QAfficheArboLoco.FieldCount;
While not Datamodule1.QAfficheArboLoco.Eof do
begin
if L_Acc_Value[0]<> Datamodule1.QAfficheArboLoco.Fields[0].Value then
L_Acc_Treenode[0]:=TreeView1.Items.Add(nil,vartostr(Datamodule1.QAfficheArboLoco.Fields[0].Value));
for i:=1 to Datamodule1.QAfficheArboLoco.FieldCount -1 do
begin
if (L_Acc_value[i]<> Datamodule1.QAfficheArboLoco.Fields[i].Value) or (Datamodule1.QAfficheArboLoco.Fields[i].Value = NULL) then
L_Acc_Treenode[i]:=TreeView1.Items.AddChild(L_Acc_Treenode[i-1],Vartostr(Datamodule1.QAfficheArboLoco.Fields[i].Value));
L_Acc_value[i]:=Datamodule1.QAfficheArboLoco.Fields[i].Value;
end;
L_Acc_value[0]:=Datamodule1.QAfficheArboLoco.Fields[0].Value;
Datamodule1.QAfficheArboLoco.Next;
end;
DataModule1.QAfficheTypeOperationMP.close ;
DataModule1.QAfficheTypeOperationMP.sql.clear;
DataModule1.QAfficheTypeOperationMP.SQL.add('SELECT * FROM Description_Operation_Maintenance');
DataModule1.QAfficheTypeOperationMP.open;
while jx3<DataModule1.QAfficheTypeOperationMP.RecordCount do
begin
DOM_Combo.Items.Add(DataModule1.QAfficheTypeOperationMPDescr_Operation.value) ;
jx3:=jx3+1;
DataModule1.QAfficheTypeOperationMP.moveby(1);
end;
end;

Bref cela n'a pas grand intérêt puisque cela marche.

Le probleme se pose sur les modifications de cette arbo.
J'arrive a le faire "brut" donc en direct! Mais les changements de ne s'effectuent pas réellement dans la table (donc inutile en gros!!!!)

J'essaie de faire avec ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
DataModule1.QMAJ.close ;
DataModule1.QMAJ.sql.clear;
SQL1:=('UPDATE ');
SQL2:=(' SET ID_Engin = UPPER(ID_Engin),Module_N1 = UPPER(Module_N1),Module_N2 = UPPER(Module_N2),Module_N3 = UPPER(Module_N3),Module_N4 = UPPER(Module_N4),Module_N5 = UPPER(Module_N5),Module_N6 = UPPER(Module_N6)');
SQL := concat(SQL1,ArboLocoDB,SQL2);
DataModule1.QMAJ.ExecSQL;
C'était censé modifier les colonnes tout d'un coup mais après je me suis rendu compte que ça ne fait que mettre les noms en capitales (lol ).

Donc grâce à Malatar, j'essaie en faisant cela:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
WITH DataModule1.QModifPiece DO
BEGIN
  SQL.Clear;
  SQL.Add('UPDATE Arbo SET Module_N1 =:Module_N1,Module_N2 =: UPPER(Module_N2),');
  SQL.Add('            Module_N3 =: Module_N3,Module_N4 =: Module_N4,');
  SQL.Add('            Module_N5 =: Module_N5,Module_N6 =: Module_N6');
  SQL.Add('WHERE ID_Engin=:ID_Engin');
  SQL.Add('AND '+ concatener + ' = ' + QuotedStr(SelectedModule)+'');
  ParamCheck := True;
ExexSQL;
Et il me sort une erreur , violation de champ

Bref, je sens que ma requete est toute pourrie mais je desespere... lol