Patch level :

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :

Implementato nuovo nnonche' fantastico costruttore dei TRecord_array.
Provare per credere.
Parola di Guido ... Angeli


git-svn-id: svn://10.65.10.50/trunk@12689 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2005-02-11 15:32:58 +00:00
parent 08d0526d91
commit 4381888011
6 changed files with 38 additions and 7 deletions

View File

@ -23,5 +23,6 @@
#define CAU_SOSPESO "SOSPESO"
#define CAU_VALINTRA "VALINTRA"
#define CAU_SOLOIVA "SOLOIVA"
#define CAU_MOVIND "MOVIND"
#endif

View File

@ -30,6 +30,7 @@
#define PCN_CMSNEEDED "CMSNEEDED"
#define PCN_CODCMS "CODCMS"
#define PCN_FASCMS "FASCMS"
#define PCN_ANALITICA "ANALITICA"
#define PCN_ANALITICA "ANALITICA"

View File

@ -26,6 +26,34 @@ TRecord_array::TRecord_array(const TRecord_array& a)
copy(a);
}
// Questo si che e' il costruttore dei miei sogni
// Senza cavolate come numfield o necessita' di interi record come chiave!
TRecord_array::TRecord_array(const char* keytok, int logicnum, int first)
: _file(logicnum), _offset(first - 1)
{
const RecDes& rd = prefix().get_recdes(logicnum); // Tracciato record del file
const KeyDes& kd = rd.Ky[0]; // Tracciato della chiave primaria
const int nLast = kd.FieldSeq[kd.NkFields-1] % MaxFields; // Posizione dell'ultimo campo della chiave
_num = rd.Fd[nLast].Name; // Nome dell'ultimo campo della chiave
TRectype* keyrec = new TRectype(logicnum); // Record chiave (vuoto)
if (keytok && *keytok) // La stringa chiave non e' vuota
{
const TToken_string key(keytok);
TString80 val; // Un campo chiave non puo' mai superare i 50
for (int i = 0; i < kd.NkFields-1; i++) // Riempio "quasi" tutta la chiave primaria
{
const int nPos = kd.FieldSeq[i] % MaxFields; // Posizione del campo i della chiave
const char* field = rd.Fd[nPos].Name; // Nome del campo i della chiave
key.get(i, val); // Valore del campo i della chiave
keyrec->put(field, val); // Riempio il campo chiave corrispondente
}
}
read(keyrec); // Leggo o inizializzo l'array vuoto
}
TRecord_array::~TRecord_array()
{
}

View File

@ -135,6 +135,8 @@ public:
TRecord_array(int logicnum, const char* numfield, int first = 1);
// @cmember Costruttore
TRecord_array(const TRecord_array& a);
// @cmember Costruttore moderno (c) by Guy
TRecord_array(const char* keytok, int logicnum, int first = 1);
// @cmember Distruttore
virtual ~TRecord_array();
};

View File

@ -1147,21 +1147,20 @@ int TRelation_application::write(const TMask& m)
int TRelation_application::rewrite(const TMask& m)
{
int err;
TRelation& r = *get_relation();
m.autosave(r);
// rewrite relation and all independent sheets
r.rewrite();
err=r.status();
int err=r.status();
const int max = m.fields();
for (int i = 0; i < max; i++)
{
if (m.fld(i).is_sheet()) {
TSheet_field& f = (TSheet_field& )m.fld(i);
if (m.fld(i).is_sheet())
{
TSheet_field& f = (TSheet_field&)m.fld(i);
if (f.record()&& !f.external_record())
err|=f.record()->write(TRUE);
}
}
}
return err;
}

View File

@ -877,7 +877,7 @@ int TRelation::write(bool force)
int TRelation::rewrite(bool force)
{
_errors = file(0).rewrite(); // Riscrive testata
if (force && _errors == _iskeynotfound) // Se non la trova ...
if (force && _errors == _iskeynotfound) // Se non la trova ...
_errors = file(0).write(); // ... forza la scrittura
for (int i = 0; i < _reldefs.items(); i++)