diff --git a/include/maskfld.cpp b/include/maskfld.cpp index 366735874..7ae4ed19e 100755 --- a/include/maskfld.cpp +++ b/include/maskfld.cpp @@ -2523,6 +2523,7 @@ int TBrowse::do_input( } } + _cursor->relation()->mask2rel(field().mask()); _cursor->setfilter(work, filter_update); _cursor->setregion(filtrec, filtrec); diff --git a/include/relation.cpp b/include/relation.cpp index 657094d6b..0a2e8365c 100755 --- a/include/relation.cpp +++ b/include/relation.cpp @@ -246,8 +246,11 @@ const char* TRelationdef::evaluate_expr(int j, const TLocalisamfile& to) TExpression& expr = (TExpression&)_exprs[j]; for (int k = 0; k < expr.numvar(); k++) { - const TFieldref fr(expr.varname(k), rec.num()); - expr.setvar(k, fr.read(rec)); + if (expr.varname(k)[0] != '#') + { + const TFieldref fr(expr.varname(k), rec.num()); + expr.setvar(k, fr.read(rec)); + } } const char* val = (const char*)expr.as_string(); @@ -256,8 +259,11 @@ const char* TRelationdef::evaluate_expr(int j, const TLocalisamfile& to) TExpression& altexpr = (TExpression&)_altexprs[j]; for (int k = 0; k < altexpr.numvar(); k++) { - const TFieldref fr(altexpr.varname(k), rec.num()); - altexpr.setvar(k, fr.read(rec)); + if (altexpr.varname(k)[0] != '#') + { + const TFieldref fr(altexpr.varname(k), rec.num()); + altexpr.setvar(k, fr.read(rec)); + } } val = (const char*)altexpr.as_string(); } @@ -949,6 +955,35 @@ bool TRelation::exist(int logicnum) const return lucky; } +void TRelation::mask2rel(const TMask & m) +{ + for (int i = 0; i < _reldefs.items(); i++) + { + TRelationdef& rdi = reldef(i); + + for (int j = 0; j < rdi._exprs.items(); j++) + { + TExpression& expr = (TExpression&)rdi._exprs[j]; + for (int k = 0; k < expr.numvar(); k++) + { + const char * name = expr.varname(k); + if (name[0] == '#') + expr.setvar(k, m.fld(0).evaluate_field(name)); + } + if (rdi._altexprs.objptr(j)) + { + TExpression& altexpr = (TExpression&)rdi._altexprs[j]; + for (int k = 0; k < altexpr.numvar(); k++) + { + const char * name = altexpr.varname(k); + if (name[0] == '#') + altexpr.setvar(k, m.fld(0).evaluate_field(name)); + } + } + } + } +} + /////////////////////////////////////////////////////////// // TCursor /////////////////////////////////////////////////////////// diff --git a/include/relation.h b/include/relation.h index cd299505b..449fac692 100755 --- a/include/relation.h +++ b/include/relation.h @@ -9,6 +9,10 @@ class TSort; #endif +#ifndef __MASK_H +class TMask; +#endif + // @doc EXTERNAL // @class TRelation | Classe per la definizione delle relazioni esistenti tra i file @@ -195,6 +199,10 @@ public: // TObject // (ritorna lo stato) TRecnotype operator --() { return prev(); } + + // @cmember Aggiorna i valori delle variabili udando maschera + // (ritorna lo stato) + void mask2rel(const TMask & m); // @cmember Costruttore dal numero logico del file TRelation(int logicnum);