diff --git a/src/include/isam.cpp b/src/include/isam.cpp index 2b6a21020..8af59c191 100755 --- a/src/include/isam.cpp +++ b/src/include/isam.cpp @@ -712,6 +712,20 @@ TBaseisamfile::TBaseisamfile( } +TBaseisamfile::TBaseisamfile( + const char* name, // @parm Nome del file esterno da aprire + const TTrec & desc) // @parm Indica la descrizione del file +{ + const int err = DB_build(name, &desc.rec()); + if (err != NOERR) + fatal_box("Non posso creare il file %s : errore n.ro %d", name, err); + _lasterr = NOERR; + TFilename filename(name); + CHECK(filename.full(), "Must define the file to open!"); + _logicnum = prefix().get_handle(filename); + _current = new TRectype(this); +} + TBaseisamfile::~TBaseisamfile() { SAFE_DELETE(_current); @@ -941,7 +955,7 @@ int TBaseisamfile::_write(const TRectype& rec) { if (rec.has_memo()) ((TRectype&)rec).write_memo(_isam_handle, _recno ); - rec_cache(_logicnum).notify_change(); + rec_cache(_logicnum).notify_change(); } else @@ -1089,7 +1103,7 @@ int TBaseisamfile::_remove(const TRectype& rec) { if (curr().has_memo( )) curr().init_memo(); - rec_cache(_logicnum).notify_change(); + rec_cache(_logicnum).notify_change(); DB_flush(fhnd); } else @@ -1372,6 +1386,13 @@ TLocalisamfile::TLocalisamfile( { } +TLocalisamfile::TLocalisamfile( + const char* name, // @parm Nome del file esterno da aprire + const TTrec & desc) // @parm Indica la descrizione del file + : TBaseisamfile(name, desc) +{ +} + TLocalisamfile::TLocalisamfile(int logicnum, bool tmpfile) : TBaseisamfile(logicnum) { @@ -1475,6 +1496,19 @@ TIsamtempfile::TIsamtempfile(int logicnum, const char* radix, bool create, bool n.insert("%", 0); open(n, create, eod, eox); + + TCodeb_handle cb_handle = prefix().get_handle(_isam_handle, _curr_key); + const int dbfreclen = DB_reclen(cb_handle); + const int trcreclen = prefix().get_reclen(logicnum); + + if (dbfreclen != trcreclen) + { + TString msg; + msg.format("Lunghezza record incoerente sul file %d (%s): file=%d trc=%d", + num(), (const char*)description(), dbfreclen, trcreclen); + fatal_box(msg); + } + } TIsamtempfile::~TIsamtempfile() @@ -1615,17 +1649,23 @@ int TIsamtempfile::close() // TExternisamfile /////////////////////////////////////////////////////////// TExternisamfile::TExternisamfile(const char* name, bool exclusive, bool index) -: TLocalisamfile(name) + : TLocalisamfile(name) { init(name, exclusive, index); } TExternisamfile::TExternisamfile(const char* name, const char* descname, bool exclusive, bool index) -: TLocalisamfile(name, descname) + : TLocalisamfile(name, descname) { init(name, exclusive, index); } +TExternisamfile::TExternisamfile(const char* name, const TTrec & desc, bool exclusive, bool index) + : TLocalisamfile(name, desc) +{ + init(name, exclusive, index); +} + TExternisamfile::~TExternisamfile() { close(); @@ -4035,7 +4075,7 @@ TRectype& TRectype::operator =(const char* rec) const char* TRectype::key(int numkey) const { - TString& tmp = get_tmp_string(256); + TString& tmp = get_tmp_string(256); __build_key(rec_des(), numkey, _rec, tmp.get_buffer(), false); return tmp; } @@ -4153,7 +4193,7 @@ bool TRectype::edit(int logicnum, const char* alternate_key_fields, const char* xvt_fsys_remove_file(ininame); - if (ok) + if (ok && _logicnum < 1000) rec_cache(logicnum).notify_change(); } return ok; @@ -4378,7 +4418,7 @@ const char* TRecfield::operator =(const char* s) _rec->put(_name, s); else __putfieldbuff( _len, _dec, _type, s, _p); - } + } else put_subfield(s); _rec->setempty(FALSE); diff --git a/src/include/isam.h b/src/include/isam.h index 2999cb90f..08932f11d 100755 --- a/src/include/isam.h +++ b/src/include/isam.h @@ -1,4 +1,4 @@ -+#ifndef __ISAM_H +#ifndef __ISAM_H #define __ISAM_H #ifndef __CURRENCY_H @@ -430,6 +430,8 @@ protected: // @cmember Costruttore per derivare TExternisamfile.

indica il file esterno da aprire. TBaseisamfile(const char* name, const char* descname = NULL); + // @cmember Costruttore per derivare TExternisamfile.

indica il file esterno da aprire. + TBaseisamfile(const char* name, const TTrec & desc); int handle(int key = 0) const; @@ -756,6 +758,8 @@ protected: TLocalisamfile(int logicnum, bool tmp); // @cmember Costruttore per derivare TExternisamfile.

indica il file esterno da aprire (vedi ). TLocalisamfile(const char* name, const char* descname = NULL); + // @cmember Costruttore per derivare TExternisamfile.

indica il file esterno da aprire (vedi ) + TLocalisamfile(const char* name, const TTrec & desc); // @access Public Member public: @@ -857,8 +861,8 @@ public: // @cmember Costruttore.

é il nome del file che contiene la descrizione del file (estensione trr). //

indica se aprire il file in modo esclusivo. //

indica se aprire il file con indici o meno - TExternisamfile(const char* name, const char * descname, bool exclusive = false, - bool index = true); + TExternisamfile(const char* name, const char * descname, bool exclusive = false, bool index = true); + TExternisamfile(const char* name, const TTrec &desc, bool exclusive = false, bool index = true); // @cmember Distruttore virtual ~TExternisamfile(); };