From 438188801124f72d2c19936a0fdf8c54fe8c4ba8 Mon Sep 17 00:00:00 2001 From: guy Date: Fri, 11 Feb 2005 15:32:58 +0000 Subject: [PATCH] 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 --- include/causali.h | 1 + include/pconti.h | 1 + include/recarray.cpp | 28 ++++++++++++++++++++++++++++ include/recarray.h | 2 ++ include/relapp.cpp | 11 +++++------ include/relation.cpp | 2 +- 6 files changed, 38 insertions(+), 7 deletions(-) diff --git a/include/causali.h b/include/causali.h index 571f6480b..4eac2bad1 100755 --- a/include/causali.h +++ b/include/causali.h @@ -23,5 +23,6 @@ #define CAU_SOSPESO "SOSPESO" #define CAU_VALINTRA "VALINTRA" #define CAU_SOLOIVA "SOLOIVA" +#define CAU_MOVIND "MOVIND" #endif diff --git a/include/pconti.h b/include/pconti.h index 894c82d0f..a7e4fee07 100755 --- a/include/pconti.h +++ b/include/pconti.h @@ -30,6 +30,7 @@ #define PCN_CMSNEEDED "CMSNEEDED" #define PCN_CODCMS "CODCMS" #define PCN_FASCMS "FASCMS" +#define PCN_ANALITICA "ANALITICA" #define PCN_ANALITICA "ANALITICA" diff --git a/include/recarray.cpp b/include/recarray.cpp index c3d872146..9ce258bfa 100755 --- a/include/recarray.cpp +++ b/include/recarray.cpp @@ -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() { } diff --git a/include/recarray.h b/include/recarray.h index d4d626cd1..eb8ba597d 100755 --- a/include/recarray.h +++ b/include/recarray.h @@ -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(); }; diff --git a/include/relapp.cpp b/include/relapp.cpp index b2f5dea2c..27f31b8b9 100755 --- a/include/relapp.cpp +++ b/include/relapp.cpp @@ -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; } diff --git a/include/relation.cpp b/include/relation.cpp index 2ef0f66ca..acd8ca8d7 100755 --- a/include/relation.cpp +++ b/include/relation.cpp @@ -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++)