Patch level : 10.0 838

Files correlati     : ve0.exe
Ricompilazione Demo : [ ]
Commento            :

Aggiunta la possibilita di mettere campi della maschera nei join delle ricerche
(cliente SRM)


git-svn-id: svn://10.65.10.50/branches/R_10_00@21160 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2010-11-22 17:15:19 +00:00
parent 6ec84414f9
commit a52ef0ef1f
3 changed files with 48 additions and 4 deletions

View File

@ -2523,6 +2523,7 @@ int TBrowse::do_input(
} }
} }
_cursor->relation()->mask2rel(field().mask());
_cursor->setfilter(work, filter_update); _cursor->setfilter(work, filter_update);
_cursor->setregion(filtrec, filtrec); _cursor->setregion(filtrec, filtrec);

View File

@ -246,8 +246,11 @@ const char* TRelationdef::evaluate_expr(int j, const TLocalisamfile& to)
TExpression& expr = (TExpression&)_exprs[j]; TExpression& expr = (TExpression&)_exprs[j];
for (int k = 0; k < expr.numvar(); k++) for (int k = 0; k < expr.numvar(); k++)
{ {
const TFieldref fr(expr.varname(k), rec.num()); if (expr.varname(k)[0] != '#')
expr.setvar(k, fr.read(rec)); {
const TFieldref fr(expr.varname(k), rec.num());
expr.setvar(k, fr.read(rec));
}
} }
const char* val = (const char*)expr.as_string(); 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]; TExpression& altexpr = (TExpression&)_altexprs[j];
for (int k = 0; k < altexpr.numvar(); k++) for (int k = 0; k < altexpr.numvar(); k++)
{ {
const TFieldref fr(altexpr.varname(k), rec.num()); if (altexpr.varname(k)[0] != '#')
altexpr.setvar(k, fr.read(rec)); {
const TFieldref fr(altexpr.varname(k), rec.num());
altexpr.setvar(k, fr.read(rec));
}
} }
val = (const char*)altexpr.as_string(); val = (const char*)altexpr.as_string();
} }
@ -949,6 +955,35 @@ bool TRelation::exist(int logicnum) const
return lucky; 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 // TCursor
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////

View File

@ -9,6 +9,10 @@
class TSort; class TSort;
#endif #endif
#ifndef __MASK_H
class TMask;
#endif
// @doc EXTERNAL // @doc EXTERNAL
// @class TRelation | Classe per la definizione delle relazioni esistenti tra i file // @class TRelation | Classe per la definizione delle relazioni esistenti tra i file
@ -196,6 +200,10 @@ public: // TObject
TRecnotype operator --() TRecnotype operator --()
{ return prev(); } { return prev(); }
// @cmember Aggiorna i valori delle variabili udando maschera <m>
// (ritorna lo stato)
void mask2rel(const TMask & m);
// @cmember Costruttore dal numero logico del file // @cmember Costruttore dal numero logico del file
TRelation(int logicnum); TRelation(int logicnum);
// @cmember Costruttore dal nome della tabella // @cmember Costruttore dal nome della tabella