Bonsoir ;
Comment je peux realiser ca ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Var cond : string ; begin cond : ='table1.fieldbyname('nom').asansistring='abcd'' ; if cond then traitement End ;
Bonsoir ;
Comment je peux realiser ca ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Var cond : string ; begin cond : ='table1.fieldbyname('nom').asansistring='abcd'' ; if cond then traitement End ;
http://docwiki.embarcadero.com/Libra...Utils.SameText
Code : Sélectionner tout - Visualiser dans une fenêtre à part if sametext(table1.fieldbyname('nom').asstring,'abcd') then traitement
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Cette question serait-elle sur une sorte de Pascal Script interprété en RunTime ?
La réponse est dans la question ci-dessus
Si tu as du budget TMS Script
Paul Toth a créé son TokyoScript
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Salut ;
Dans l'application je donne a l'utilisateur la possibilite de definire une condition pour colorer les evenement d'un scheduler puis je stocke cette condition sous forme texte dans une table.
Ce que je cherche c'est verifier cette condition qui est sous forme de texte, je ne veux pas comparer 2 chaines de caractere.
Merci bcp
Bonjour,
il fallait certainement être plus clair, surtout pour un lundi soir. Et commencer aussi, peut-être par indiquer quelle version de Delphi vous utilisezCe que je cherche c'est verifier cette condition qui est sous forme de texte, je ne veux pas comparer 2 chaines de caractere.
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 table1.fieldbyname('cond').asansistring : ='table2.fieldbyname(''start'').asdatetime>table3.fieldbyname(''start'').asdatetime+5' ; . . {voici ce que je cherche} if table1.fieldbyname('cond').asansistring then traitement
Si je comprends bien, tu as un bout de code qui est stocké quelque part, et tu veux pouvoir ré-utilise ce bout de code tel quel à l’exécution ?
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
J'utilise delphi 10.1 berlin
Vous devriez proposer quelques choses de plus simples à votre utilisateur
table2, table3 déjà cela n'a aucun sens au niveau DB puisque ce sont des variables du Delphi
Votre éditeur de script devrait fournir un contexte d'exécution précis à votre utilisateur
fieldbyname, asdatetime tout ça est incompréhensible par l'utilisateur, à vous de générer le code nécessaire et de gérer les méta-data pour gérer types et comparaisons entre type
votre utilisateur devra saisir ceci
A vous de fournir au moteur de Script le contexte d'exécution, objet, méthode, accesseur ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part TableDeux.start > TableTrois.start + 5
TableDeux et TableTrois ... évidemment il nous faut nous expliquer un peu plus, voir la complexité de donnée mise à disposition de l'utilisateur
Avez-vous regarder les liens sur les outils de script fourni ci-dessus ?
Sinon, pourquoi ne pas générer du SQL à partir du fragment fourni par l'utilisateur, avec une petite protection contre l'injection de code, ça peut être un bon départ, c'est en plus très simple
devient en MySQL par exemple (puisque l'on ne connait pas le SGBD)
Code : Sélectionner tout - Visualiser dans une fenêtre à part TableDeux.start > TableTrois.start + 5
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT (SELECT start FROM TableDeux WHERE ... ) > (SELECT start + 5 FROM TableTrois WHERE ... ) FROM DUAL
Intéressant, des formules simples peuvent être exécuté en RunTime par les livebindings, une piste à suivre
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Puisque Berlin il y a, lisez ce tutoriel qui montre comment implémenter des méthodes https://serge-girard.developpez.com/...gs/Episode-2b/
Toutefois, je plussoie ShaiLeTroll vous proposez à vos utilisateur quelque chose de trop compliqué
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Pas mal ce truc, cela attise ma curiosité, je ne fais pas de FMX et quasiment jamais de lien DB<->Controls en VCL puisque je travaille principalement sur des Serveurs type WebSocket+PHP/JS ou sur des utilitaires maison
Alors voir les Livebindings pour interpréter du code à la volée, ça semble fort sympa ... juste pour jouer à titre perso
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Bonjour,
Toujours un plaisir de lire ce genre de tutos
c'est pas aussi simple qu'il y parait de produire un tutoriel clair et utile sans compter que c'est chronophage.
Merci de partager ça
Toutefois une petite erreur de frappe c'est glissée dans le chapitre VI-B
Enfin, tout comme vous le feriez pour un objet, n'oubliez pas de libérer cette fonction quand vous n'en avez plus besoin.
Libérer
TBindingMethodsFactory.UnRegisterMethod('Reverse');
Cordialement,
@+
je confirmec'est pas aussi simple qu'il y parait de produire un tutoriel clair et utile sans compter que c'est chronophage.
Après tout les va-et-vient entre correcteurs il y aurait toujours des fôtesToutefois une petite erreur de frappe c'est glissée
J'espère encore avoir l'original pour le corriger, merci.
En parlant de correcteurs, j'en manque mes tutos sont coincés en zone de relecture technique du coup j'ai un manque de motivation.
Tout volontaire courageux serait bienvenu.
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
J'ai trouvé ce petit exemple sur stackoverflow qui utilise les Bindings, il semble assez simple et facile à adapter (je précise bien que je ne l'ai pas testé, mais il me semble correct coté syntaxe) :
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 program BindingsDemo; {$APPTYPE CONSOLE} uses System.Rtti, System.Bindings.Expression, System.Bindings.EvalProtocol, System.Bindings.Helper; type TFoo = class Val1: Integer; Val2: Integer; Result: TValue; end; procedure Main; var Foo: TFoo; scope: IScope; expr: TBindingExpression; begin Foo := TFoo.Create; Foo.Val1 := 42; Foo.Val2 := 666; scope := TBindings.CreateAssociationScope([Associate(Foo, 'Foo')]); expr := TBindings.CreateUnmanagedBinding( [Scope], 'Foo.Val1 + Foo.Val2', [Scope], 'Foo.Result', nil ); expr.Evaluate; Assert(Foo.Result.AsInteger=708); Writeln(Foo.Result.ToString); end; begin Main; Readln; end.
je pense pouvoir libérer un peu de temps en début d'année prochaine
mais je ne suis pas certain d'avoir toutes les compétences requises à l'accomplissement d'une telle tache.
Parce que quand je lis tes derniers tutos je suis plutôt du coté élève que correcteur
Tout dépend de ce que tu attends d'une relecture technique !
A voir, donc mais oui je serais content de pouvoir y participer.
Cordialement,
@+
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