From 9f06f16f5ac4d36cf5f04d4c4c9772017885842b Mon Sep 17 00:00:00 2001 From: Alessandro Bonazzi Date: Tue, 29 Jun 2021 11:04:13 +0200 Subject: [PATCH] Patch level : 12.0 nopatch Files correlati : Commento : MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit aggiunti metodi per verificare e aggiornare se il valore รจ cambiato. --- src/include/isam.cpp | 16 ++++++++++++++ src/include/isam.h | 52 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/src/include/isam.cpp b/src/include/isam.cpp index df9f9939e..2b6a21020 100755 --- a/src/include/isam.cpp +++ b/src/include/isam.cpp @@ -3242,7 +3242,23 @@ void TRectype::init(int logicnum) if (_length > 0 && lf_has_memo(logicnum)) init_memo(RECORD_NON_FISICO); } + +bool TRectype::changed(const char* fieldname, const char* val, const char* compare_to) +{ + const TString & value = get(fieldname); + return (value != compare_to) && (value != val); +} + +bool TRectype::update(const char* fieldname, const char* val, const char* compare_to) +{ + const bool val_changed = changed(fieldname, compare_to); + + if (val_changed) + put(fieldname, val); + + return val_changed; +} TRectype::TRectype(int logicnum) : _memo_data(NULL) { diff --git a/src/include/isam.h b/src/include/isam.h index e0c7bb25e..6f0399df6 100755 --- a/src/include/isam.h +++ b/src/include/isam.h @@ -310,6 +310,58 @@ public: virtual word class_id() const { return CLASS_RECTYPE; } virtual bool is_kind_of(word id) const { return id == class_id() || TSortable::is_kind_of(id); } + // @cmember verifica se ่ cambiato il contenuto del campo

in formato int + bool changed(const char* fieldname, int val, const char* compare_to = "~~") { TString s; s << val; return changed(fieldname, s, compare_to); } + bool changed_if_full(const char* fieldname, int val) { return changed(fieldname, val, ""); } + // @cmember verifica se ่ cambiato il contenuto del campo

in formato long + bool changed(const char* fieldname, long val, const char* compare_to = "~~") { TString s; s << val; return changed(fieldname, s, compare_to); } + bool changed_if_full(const char* fieldname, long val) { return changed(fieldname, val, ""); } + // @cmember verifica se ่ cambiato il contenuto del campo

in formato word + bool changed(const char* fieldname, word val, const char* compare_to = "~~") { TString s; s << val; return changed(fieldname, s, compare_to); } + bool changed_if_full(const char* fieldname, word val) { TString s; s << val; return changed(fieldname, s, ""); } + // @cmember verifica se ่ cambiato il contenuto del campo

in formato data + bool changed(const char* fieldname, const TDate& val, const char* compare_to = "~~") { return changed(fieldname, val.string(), compare_to); } + bool changed_if_full(const char* fieldname, const TDate& val) { return changed(fieldname, val, ""); } + // @cmember verifica se ่ cambiato il contenuto del campo

in formato boolean + bool changed(const char* fieldname, bool val, const char* compare_to = "~~") { return changed(fieldname, val ? "X" : "", compare_to); } + bool changed_if_full(const char* fieldname, bool val) { return changed(fieldname, val, ""); } + // @cmember verifica se ่ cambiato il contenuto del campo

in formato reale + bool changed(const char* fieldname, const real& val, const char* compare_to = "~~") { return changed(fieldname, val.string(), compare_to); } + bool changed_if_full(const char* fieldname, const real& val) { return changed(fieldname, val, ""); } + // @cmember verifica se ่ cambiato il contenuto del campo

in formato valuta + bool changed(const char* fieldname, const TCurrency& val, const char* compare_to = "~~") { return changed(fieldname, val.string(), compare_to); } + bool changed_if_full(const char* fieldname, const TCurrency& val) { return changed(fieldname, val, ""); } + // @cmember verifica se ่ cambiato il contenuto del campo

(non tipizzata) + bool changed(const char* fieldname, const char* val, const char* compare_to = "~~"); + bool changed_if_full(const char* fieldname, const char* val) { return changed(fieldname, val, ""); } + + // @cmember Setta il contenuto del campo

in formato int se ่ cambiato + bool update(const char* fieldname, int val, const char* compare_to = "~~") { TString s; s << val; return update(fieldname, s, compare_to); } + bool update_if_full(const char* fieldname, int val) { return update(fieldname, val, ""); } + // @cmember Setta il contenuto del campo

in formato long se ่ cambiato + bool update(const char* fieldname, long val, const char* compare_to = "~~") { TString s; s << val; return update(fieldname, s, compare_to); } + bool update_if_full(const char* fieldname, long val) { return update(fieldname, val, ""); } + // @cmember Setta il contenuto del campo

in formato word se ่ cambiato + bool update(const char* fieldname, word val, const char* compare_to = "~~") { TString s; s << val; return update(fieldname, s, compare_to); } + bool update_if_full(const char* fieldname, word val) { return update(fieldname, val, ""); } + // @cmember Setta il contenuto del campo

in formato data se ่ cambiato + bool update(const char* fieldname, const TDate& val, const char* compare_to = "~~") { return update(fieldname, val.string(), compare_to); } + bool update_if_full(const char* fieldname, const TDate& val) { return update(fieldname, val, ""); } + // @cmember Setta il contenuto del campo

in formato boolean se ่ cambiato + bool update(const char* fieldname, bool val, const char* compare_to = "~~") { return update(fieldname, val ? "X" : "", compare_to); } + bool update_if_full(const char* fieldname, bool val) { return update(fieldname, val, ""); } + // @cmember Setta il contenuto del campo

in formato reale se ่ cambiato + bool update(const char* fieldname, const real& val, const char* compare_to = "~~") { return update(fieldname, val.string(), compare_to); } + bool update_if_full(const char* fieldname, const real& val) { return update(fieldname, val, ""); } + // @cmember Setta il contenuto del campo

in formato valuta se ่ cambiato + bool update(const char* fieldname, const TCurrency& val, const char* compare_to = "~~") { return update(fieldname, val.string(), compare_to); } + bool update_if_full(const char* fieldname, const TCurrency& val) { return update(fieldname, val, ""); } + // @cmember Setta il contenuto del campo

(non tipizzata) se ่ cambiato + bool update(const char* fieldname, const char* val, const char* compare_to = "~~"); + bool update_if_full(const char* fieldname, const char* val) { return update(fieldname, val, ""); } + + // metodi per aggiornare se cambiato + // @cmember Costruttore Costruisce un record staccato da un file. // Sarebbe meglio utilizzare una delle altre due TRectype(int logicnum);