From 7fa73a982c31d0554e54fd8c2594dbbdbf01596d Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 22 Oct 1997 12:58:17 +0000 Subject: [PATCH] Riportate modifiche dalla R9702: 1.113.2.7 ed 1.113.2.8, relative alla conversione dei tracciati record nel caso di variazione della lunghezza del campo. git-svn-id: svn://10.65.10.50/trunk@5416 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- include/isam.cpp | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/include/isam.cpp b/include/isam.cpp index d5f884b9e..8306ebe38 100755 --- a/include/isam.cpp +++ b/include/isam.cpp @@ -2105,7 +2105,7 @@ int TSystemisamfile::update( i0->fhnd=DB_open((const char*)tmpfname,0, TRUE); if (i0->fhnd < 0 ) err=get_error(i0->fhnd); TFilename fname(filename()); - TString s(80); + TString s(80), fld_name, fld_val; s.format("Aggiornamento archivio %s", (const char*) fname); TProgind p(nitems ? nitems : 1, s, TRUE, TRUE, 70); int nflds = curr().items(); @@ -2122,8 +2122,29 @@ int TSystemisamfile::update( nrec.zero(); ni++; for (j = 0; j < nflds; j++) - if (nrec.exist((const TString&) fld[j])) - nrec.put((const TString&) fld[j], get((const TString&) fld[j])); + { + fld_name = (TString&) fld[j]; + if (nrec.exist((fld_name))) + { + fld_val = get(fld_name); + // Se il campo e' di tipo stringa ed e' stato accorciato, tronca il contenuto, + // per evitare segnalazioni inutili in conversione. Nel caso di campo numerico + // viene "zappato" + // Questo trattamento non viene effettuato per i campi data + // perchè la get() restituisce una data formattata e quindi + // di lunghezza maggiore, ciò provoca una "zappatura" indiscriminata + // di tutti i campi data (fa pure rima) L.A. + TFieldtypes fld_type = nrec.type(fld_name); + if (fld_type != _datefld) + { + const int l1 = nrec.length(fld_name); + const int l2 = fld_val.len(); + if ( l1 < l2) + fld_val.cut(fld_type == _alfafld ? l1 : 0); + } + nrec.put(fld_name, fld_val); + } + } if (lcf) makelc((TRectype &)nrec); browse_null(nrec.string(),DB_reclen(i0->fhnd));