Bonjour,
J'aimerais créer plusieurs 'set of string' dynamiquement lors du run time.
Qui peut me mettre sur la piste?
Merci d'avance,
Phil.
Bonjour,
J'aimerais créer plusieurs 'set of string' dynamiquement lors du run time.
Qui peut me mettre sur la piste?
Merci d'avance,
Phil.
Qu'entends-tu par set of string ?
Set of string: variable de type ensemble que je créerais dynamiquement en la nommant puis en la remplissant à partir de chaines.
N'en connaissant pas le nombre à l'avance je cherche à les créer au runtime.
Merci d'avance
Phil.
Un ensemble ne peut contenir que des valeurs ordinales.
Pour des chaînes, ce serait un tableau, array of string, puis IndexStr pour trouver l'index.
je ne vois pas bien ce que tu comptes faire de cela...
sauf à convertir un TStringList en entier...je m'explique
NB: le code a été saisi en ligne sans vérification
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
40
41
42
43
44
45
46
47 function StringsAsInteger(Values, SetOf: TStrings): Integer; var Index: Integer; Value: Integer; begin Result := 0; for Index := 0 to Values.Count - 1 do begin Value := SetOf.IndexOf(Values[Index]); if Value >= 0 then Result := Result or (1 shl Value); end; end; procedure IntegerAsSrings(Value: Integer; SetOf, Values: TStrings); begin for Index := 0 to SetOf.Count - 1 do begin if Value and (1 shl Index) > 0 then Values.Add(SetOf[Index]); end; end; var SetOf: TStringList; Values: TStringList; Value: Integer; begin // liste de valeurs possibles SetOf := TStringList.Create; SetOf.Add('Un'); // 1 SetOf.Add('Deux'); // 2 SetOf.Add('Trois'); // 4 // des valeurs Value := TStringList.Create; Value.Add('Trois'); Value.Add('Cinq'); // sera ignoré // en entier ça devrait donner 4 Value := StringsAsInteger(Values, SetOf); // conversion inverse Values.Clear; IntegerAsString(Value, SetOf, Values); // Values devrait contenir "Trois" end;
Tu peux aussi imaginer un seul TStringList pour héberger les chaînes et tester si déjà présente dans la liste (IndexOf), et créer des ensembles d'entiers représentant leurs index dans cette liste.
Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
. Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !
J'ai en fait contourné le problème.
Je crée la chaîne à la volée juste avant la requête
index étant la colonne de la table AdvStrGrid cliquée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 S:=''; i:=1; repeat if TestsByPlaceGrid.Cells[index,i]<>'' then S:=S+ TestsByPlaceGrid.Cells[index,i]+','; i:=i+1; until TestsByPlaceGrid.Cells[index,i]=''; S:=copy(S,0,length(S)-1);
puis j'utilise ça:
... et ça marche
Code : Sélectionner tout - Visualiser dans une fenêtre à part Query.SQL.Add('SELECT COUNT(*) AS nombre from tests WHERE T_CODE IN ('+S+')');
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager