Aggiunti campi memo
git-svn-id: svn://10.65.10.50/trunk@2195 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
cc7a4e7aaa
commit
588c70089f
347
include/isam.cpp
347
include/isam.cpp
@ -124,6 +124,22 @@ int get_error(int err)
|
|||||||
return(NOERR);
|
return(NOERR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HIDDEN bool lf_has_memo( const int lffile )
|
||||||
|
{
|
||||||
|
TTrec r;
|
||||||
|
|
||||||
|
r.get( lffile );
|
||||||
|
bool ret = FALSE;
|
||||||
|
int nfields = r.fields( );
|
||||||
|
for( int i = 0; i < nfields && !ret; i ++ )
|
||||||
|
{
|
||||||
|
TToken_string s( r.fielddef( i ) );
|
||||||
|
if ( s.get_int( 1 ) == _memofld )
|
||||||
|
ret = TRUE;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
HIDDEN void browse_null(char *start, int nc)
|
HIDDEN void browse_null(char *start, int nc)
|
||||||
{
|
{
|
||||||
for (int i = nc - 1; i >= 0 ; i--) // Anche il primo byte(deletion flag) deve essere cambiato. nc comprende il primo byte
|
for (int i = nc - 1; i >= 0 ; i--) // Anche il primo byte(deletion flag) deve essere cambiato. nc comprende il primo byte
|
||||||
@ -344,6 +360,101 @@ void set_autoload_new_files(bool on)
|
|||||||
__autoload = on;
|
__autoload = on;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TMemo_info::put( const char * fieldname, const char * data )
|
||||||
|
{
|
||||||
|
int index( findfld( rec_des( ), ( char * ) fieldname ) );
|
||||||
|
_dirty.set( index );
|
||||||
|
_data.add( data, index );
|
||||||
|
}
|
||||||
|
|
||||||
|
TMemo_info::TMemo_info( const int lfid, const TRecnotype recno )
|
||||||
|
{
|
||||||
|
_lfid = lfid;
|
||||||
|
_recno = recno;
|
||||||
|
}
|
||||||
|
|
||||||
|
TMemo_info::~TMemo_info( )
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
TString& TMemo_info::get( const char * fieldname )
|
||||||
|
{
|
||||||
|
TLocalisamfile posfile( _lfid );
|
||||||
|
int index( findfld( posfile.curr( ).rec_des( ), ( char * )( const char * )fieldname ) );
|
||||||
|
if ( _data.objptr( index ) )
|
||||||
|
{
|
||||||
|
if( _dirty[ index ] )
|
||||||
|
return _data.row( index );
|
||||||
|
}
|
||||||
|
if( _recno >= 0 )
|
||||||
|
{
|
||||||
|
isdef * def = posfile.filehnd( );
|
||||||
|
DB_go( def->fhnd, _recno );
|
||||||
|
_data.add( DB_memoptr( def->fhnd, fieldname ), index );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
_data.add( "", index );
|
||||||
|
return _data.row( index );
|
||||||
|
}
|
||||||
|
|
||||||
|
RecDes * TMemo_info::rec_des( ) const
|
||||||
|
{
|
||||||
|
const isdef* i = openf[ _lfid - 1 ];
|
||||||
|
CHECKD(i, "Can't use a record of closed file ", _lfid );
|
||||||
|
RecDes* r = i->r;
|
||||||
|
CHECKD(r, "Missing record description of file", _lfid );
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TMemo_info::write_data( )
|
||||||
|
{
|
||||||
|
|
||||||
|
TLocalisamfile posfile( _lfid );
|
||||||
|
isdef * def = posfile.filehnd( );
|
||||||
|
CHECK( _recno > 0, "Maiale! Non fare le GO con _recno < 0 " );
|
||||||
|
DB_go( def->fhnd, _recno );
|
||||||
|
RecDes *r = rec_des( );
|
||||||
|
for( int i = _data.last( ); i > 0; i = _data.pred( i ) )
|
||||||
|
DB_memowrite( def->fhnd, r->Fd[ i ].Name, ( char * )( const char * )_data.row( i ) );
|
||||||
|
reset( );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TMemo_info::memo_loaded( const char * fieldname )
|
||||||
|
{
|
||||||
|
TLocalisamfile posfile( _lfid );
|
||||||
|
int index( findfld( posfile.curr( ).rec_des( ), ( char * )( const char * )fieldname ) );
|
||||||
|
return ( _data.objptr( index ) != NULL );
|
||||||
|
}
|
||||||
|
|
||||||
|
TMemo_info::TMemo_info( TMemo_info& memoinfo )
|
||||||
|
{
|
||||||
|
_lfid = memoinfo._lfid;
|
||||||
|
_recno = memoinfo._recno;
|
||||||
|
_data = memoinfo._data;
|
||||||
|
_dirty = memoinfo._dirty;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TMemo_info::reset( )
|
||||||
|
{
|
||||||
|
_data.destroy( );
|
||||||
|
_dirty.reset( );
|
||||||
|
}
|
||||||
|
|
||||||
|
void TRectype::init_memo_info( const int lf, const TRecnotype recnum )
|
||||||
|
{
|
||||||
|
if( _memoinfo )
|
||||||
|
delete _memoinfo;
|
||||||
|
_memoinfo = new TMemo_info( lf, recnum );
|
||||||
|
}
|
||||||
|
|
||||||
|
void TRectype::write_memo_info( ) const
|
||||||
|
{
|
||||||
|
CHECK( _memoinfo, "Tentativo di registrare una TMemo_info vuota," );
|
||||||
|
_memoinfo->write_data( );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// TExtrectype
|
// TExtrectype
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
@ -403,7 +514,8 @@ TBaseisamfile::TBaseisamfile(int logicnum, bool linkrecinst)
|
|||||||
// _historicfile = ((r.field(RFLD_SYS_DATE) != FIELDERR) &&
|
// _historicfile = ((r.field(RFLD_SYS_DATE) != FIELDERR) &&
|
||||||
// (r.field(RFLD_SYS_FIRST) != FIELDERR) &&
|
// (r.field(RFLD_SYS_FIRST) != FIELDERR) &&
|
||||||
// (r.field(RFLD_SYS_LAST) != FIELDERR));
|
// (r.field(RFLD_SYS_LAST) != FIELDERR));
|
||||||
_historicfile = FALSE;
|
_historicfile = FALSE;
|
||||||
|
_has_memo = lf_has_memo( _logicnum );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -439,9 +551,9 @@ int TBaseisamfile::gethr(TRectype& rec, TDate& atdate)
|
|||||||
fd1(wr, RFLD_SYS_DATE);
|
fd1(wr, RFLD_SYS_DATE);
|
||||||
|
|
||||||
TDate d1;
|
TDate d1;
|
||||||
TRecnotype wr0 = -1L, wr1 = -1L;
|
TRecnotype wr0 = RECORD_NON_FISICO, wr1 = RECORD_NON_FISICO;
|
||||||
|
|
||||||
if ((wr0 == flf.ptr()) == -1L) return _iskeynotfound;
|
if ((wr0 == flf.ptr()) == RECORD_NON_FISICO) return _iskeynotfound;
|
||||||
_hf.read(wr.string(), wr0);
|
_hf.read(wr.string(), wr0);
|
||||||
if ((d1 = (const TDate&) fd1) > atdate)
|
if ((d1 = (const TDate&) fd1) > atdate)
|
||||||
{
|
{
|
||||||
@ -526,6 +638,11 @@ const char* TBaseisamfile::description() const
|
|||||||
return _isamfile->d->Des;
|
return _isamfile->d->Des;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TBaseisamfile::has_memo( )
|
||||||
|
{
|
||||||
|
return _has_memo;
|
||||||
|
}
|
||||||
|
|
||||||
TRecnotype TBaseisamfile::eod() const
|
TRecnotype TBaseisamfile::eod() const
|
||||||
{
|
{
|
||||||
NOT_OPEN();
|
NOT_OPEN();
|
||||||
@ -560,6 +677,10 @@ int TBaseisamfile::first(word lockop)
|
|||||||
_lasterr=cisread(_isamfile, curr(), _isfirst + lockop);
|
_lasterr=cisread(_isamfile, curr(), _isfirst + lockop);
|
||||||
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
||||||
_recno = _isamfile->RecNo;
|
_recno = _isamfile->RecNo;
|
||||||
|
if( has_memo( ) )
|
||||||
|
{
|
||||||
|
curr( ).init_memo_info( _logicnum, _recno );
|
||||||
|
}
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -572,6 +693,10 @@ int TBaseisamfile::last(word lockop)
|
|||||||
_lasterr=cisread(_isamfile, curr(), _islast + lockop );
|
_lasterr=cisread(_isamfile, curr(), _islast + lockop );
|
||||||
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
||||||
_recno = _isamfile->RecNo;
|
_recno = _isamfile->RecNo;
|
||||||
|
if( has_memo( ) )
|
||||||
|
{
|
||||||
|
curr( ).init_memo_info( _logicnum, _recno );
|
||||||
|
}
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -593,10 +718,14 @@ int TBaseisamfile::next(word lockop)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_lasterr=cisread(_isamfile, curr(), _isnext + lockop);
|
_lasterr=cisread(_isamfile, curr(), _isnext + lockop);
|
||||||
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
||||||
}
|
}
|
||||||
_recno = _isamfile->RecNo;
|
_recno = _isamfile->RecNo;
|
||||||
|
if( has_memo( ) )
|
||||||
|
{
|
||||||
|
curr( ).init_memo_info( _logicnum, _recno );
|
||||||
|
}
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -627,6 +756,10 @@ int TBaseisamfile::prev(word lockop)
|
|||||||
_lasterr=cisread(_isamfile, curr(), _isprev + lockop);
|
_lasterr=cisread(_isamfile, curr(), _isprev + lockop);
|
||||||
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
||||||
_recno = _isamfile->RecNo;
|
_recno = _isamfile->RecNo;
|
||||||
|
if( has_memo( ) )
|
||||||
|
{
|
||||||
|
curr( ).init_memo_info( _logicnum, _recno );
|
||||||
|
}
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -647,6 +780,10 @@ int TBaseisamfile::reread(word lockop, TDate& atdate)
|
|||||||
_lasterr=cisread(_isamfile, curr(), _iscurr + lockop);
|
_lasterr=cisread(_isamfile, curr(), _iscurr + lockop);
|
||||||
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
||||||
_recno = _isamfile->RecNo;
|
_recno = _isamfile->RecNo;
|
||||||
|
if( has_memo( ) )
|
||||||
|
{
|
||||||
|
curr( ).init_memo_info( _logicnum, _recno );
|
||||||
|
}
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -659,6 +796,10 @@ int TBaseisamfile::reread(TRectype& rec, word lockop, TDate& atdate)
|
|||||||
_lasterr=cisread(_isamfile, rec, _iscurr + lockop);
|
_lasterr=cisread(_isamfile, rec, _iscurr + lockop);
|
||||||
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
||||||
_recno = _isamfile->RecNo;
|
_recno = _isamfile->RecNo;
|
||||||
|
if( has_memo( ) )
|
||||||
|
{
|
||||||
|
rec.init_memo_info( _logicnum, _recno );
|
||||||
|
}
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -692,6 +833,10 @@ int TBaseisamfile::skip(TRecnotype nrec, word lockop)
|
|||||||
_lasterr=cisread(_isamfile,curr(),_iscurr + lockop);
|
_lasterr=cisread(_isamfile,curr(),_iscurr + lockop);
|
||||||
} while (_lasterr ==_islocked);
|
} while (_lasterr ==_islocked);
|
||||||
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
||||||
|
if( has_memo( ) )
|
||||||
|
{
|
||||||
|
curr( ).init_memo_info( _logicnum, _recno );
|
||||||
|
}
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -705,6 +850,10 @@ int TBaseisamfile::read(word op, word lockop, TDate& atdate)
|
|||||||
_lasterr=cisread(_isamfile, curr(), op + lockop);
|
_lasterr=cisread(_isamfile, curr(), op + lockop);
|
||||||
if (_lasterr != NOERR) _lasterr=get_error(_lasterr);
|
if (_lasterr != NOERR) _lasterr=get_error(_lasterr);
|
||||||
_recno = _isamfile->RecNo;
|
_recno = _isamfile->RecNo;
|
||||||
|
if( has_memo( ) )
|
||||||
|
{
|
||||||
|
curr( ).init_memo_info( _logicnum, _recno );
|
||||||
|
}
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -715,9 +864,13 @@ int TBaseisamfile::read(TRectype& rec, word op, word lockop, TDate& atdate)
|
|||||||
CHECKD(op >= _iscurr && op <= _isgteq, "Invalid read operation : ", op);
|
CHECKD(op >= _iscurr && op <= _isgteq, "Invalid read operation : ", op);
|
||||||
NOT_OPEN();
|
NOT_OPEN();
|
||||||
rec.setdirty();
|
rec.setdirty();
|
||||||
_lasterr=cisread(_isamfile, rec, op + lockop);
|
_lasterr=cisread(_isamfile, rec, op + lockop);
|
||||||
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
||||||
_recno = _isamfile->RecNo;
|
_recno = _isamfile->RecNo;
|
||||||
|
if( has_memo( ) )
|
||||||
|
{
|
||||||
|
rec.init_memo_info( _logicnum, _recno );
|
||||||
|
}
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -732,6 +885,10 @@ int TBaseisamfile::readat(TRecnotype nrec, word lockop)
|
|||||||
else
|
else
|
||||||
memcpy(curr().string(),DB_getrecord(_isamfile->fhnd),DB_reclen(_isamfile->fhnd));
|
memcpy(curr().string(),DB_getrecord(_isamfile->fhnd),DB_reclen(_isamfile->fhnd));
|
||||||
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
||||||
|
if( has_memo( ) )
|
||||||
|
{
|
||||||
|
curr( ).init_memo_info( _logicnum, _recno );
|
||||||
|
}
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -746,6 +903,10 @@ int TBaseisamfile::readat(TRectype& rec, TRecnotype nrec, word lockop)
|
|||||||
else
|
else
|
||||||
memcpy(rec.string(),DB_getrecord(_isamfile->fhnd),DB_reclen(_isamfile->fhnd));
|
memcpy(rec.string(),DB_getrecord(_isamfile->fhnd),DB_reclen(_isamfile->fhnd));
|
||||||
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
||||||
|
if( has_memo( ) )
|
||||||
|
{
|
||||||
|
rec.init_memo_info( _logicnum, _recno );
|
||||||
|
}
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -764,6 +925,11 @@ int TBaseisamfile::write(TDate& atdate)
|
|||||||
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
||||||
setkey(oldkey);
|
setkey(oldkey);
|
||||||
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
||||||
|
if( has_memo( ) )
|
||||||
|
{
|
||||||
|
curr( ).memo_info( ).recno( _recno );
|
||||||
|
curr( ).write_memo_info( );
|
||||||
|
}
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -782,7 +948,15 @@ int TBaseisamfile::write(const TRectype& rec, TDate& atdate)
|
|||||||
_lasterr = DB_add(_isamfile->fhnd);
|
_lasterr = DB_add(_isamfile->fhnd);
|
||||||
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
||||||
setkey(oldkey);
|
setkey(oldkey);
|
||||||
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
||||||
|
if (_lasterr != NOERR )
|
||||||
|
{
|
||||||
|
if( has_memo( ) )
|
||||||
|
{
|
||||||
|
rec.memo_info( ).recno( _recno );
|
||||||
|
rec.write_memo_info( );
|
||||||
|
}
|
||||||
|
}
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -803,6 +977,11 @@ int TBaseisamfile::rewrite(TDate& atdate)
|
|||||||
_lasterr = DB_rewrite(_isamfile->fhnd);
|
_lasterr = DB_rewrite(_isamfile->fhnd);
|
||||||
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
||||||
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
||||||
|
if( has_memo( ) )
|
||||||
|
{
|
||||||
|
curr( ).memo_info( ).recno( _recno );
|
||||||
|
curr( ).write_memo_info( );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
}
|
}
|
||||||
@ -823,6 +1002,11 @@ int TBaseisamfile::rewrite(const TRectype& rec, TDate& atdate)
|
|||||||
_lasterr = DB_rewrite(_isamfile->fhnd);
|
_lasterr = DB_rewrite(_isamfile->fhnd);
|
||||||
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
||||||
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
||||||
|
if( has_memo( ) )
|
||||||
|
{
|
||||||
|
rec.memo_info( ).recno( _recno );
|
||||||
|
rec.write_memo_info( );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
}
|
}
|
||||||
@ -841,6 +1025,11 @@ int TBaseisamfile::rewriteat(TRecnotype nrec)
|
|||||||
} else
|
} else
|
||||||
_lasterr = get_error(_lasterr);
|
_lasterr = get_error(_lasterr);
|
||||||
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
||||||
|
if( has_memo( ) )
|
||||||
|
{
|
||||||
|
curr( ).memo_info( ).recno( _recno );
|
||||||
|
curr( ).write_memo_info( );
|
||||||
|
}
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -857,6 +1046,11 @@ int TBaseisamfile::rewriteat(const TRectype& rec, TRecnotype nrec)
|
|||||||
} else
|
} else
|
||||||
_lasterr = get_error(_lasterr);
|
_lasterr = get_error(_lasterr);
|
||||||
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
||||||
|
if( has_memo( ) )
|
||||||
|
{
|
||||||
|
rec.memo_info( ).recno( _recno );
|
||||||
|
rec.write_memo_info( );
|
||||||
|
}
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -867,26 +1061,26 @@ int TBaseisamfile::remove(TDate& atdate)
|
|||||||
|
|
||||||
NOT_OPEN();
|
NOT_OPEN();
|
||||||
|
|
||||||
// rimozione campi memo
|
/*// rimozione campi memo
|
||||||
#ifndef FOXPRO
|
#ifndef FOXPRO
|
||||||
TMemo_file* memo = NULL;
|
TMemo_file* memo = NULL;
|
||||||
|
|
||||||
for (int i = 0; i < curr().items(); i++)
|
for (int i = 0; i < curr().items(); i++)
|
||||||
{
|
{
|
||||||
if (curr().type(curr().fieldname(i)) == _memofld)
|
if ( curr().type(curr().fieldname(i)) == _memofld )
|
||||||
{
|
{
|
||||||
long val = curr().get_long(curr().fieldname(i));
|
long val = curr().get_long(curr().fieldname(i));
|
||||||
if (val > 0l)
|
if (val > 0l)
|
||||||
{
|
{
|
||||||
if (memo == NULL)
|
if (memo == NULL)
|
||||||
memo = new TMemo_file(filename());
|
memo = new TMemo_file(filename());
|
||||||
memo->remove_field(val);
|
memo->remove_field(val);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (memo != NULL) delete memo;
|
}
|
||||||
#endif
|
if (memo != NULL) delete memo;
|
||||||
|
#endif
|
||||||
|
*/
|
||||||
if ((_lasterr=cisread(_isamfile, curr(), _isequal + _nolock)) == NOERR)
|
if ((_lasterr=cisread(_isamfile, curr(), _isequal + _nolock)) == NOERR)
|
||||||
{
|
{
|
||||||
_lasterr = DB_delete(_isamfile->fhnd); // Put only deletion flag on record, must remove keys too!
|
_lasterr = DB_delete(_isamfile->fhnd); // Put only deletion flag on record, must remove keys too!
|
||||||
@ -903,6 +1097,7 @@ int TBaseisamfile::remove(TDate& atdate)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
||||||
|
curr( ).memo_info( ).recno( RECORD_NON_FISICO );
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -929,6 +1124,7 @@ int TBaseisamfile::remove(const TRectype& rec, TDate& atdate)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
curr( ).memo_info( ).recno( RECORD_NON_FISICO );
|
||||||
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
}
|
}
|
||||||
@ -996,7 +1192,7 @@ int TBaseisamfile::_open(unsigned int mode)
|
|||||||
}
|
}
|
||||||
filehnd()->ln = num();
|
filehnd()->ln = num();
|
||||||
openf[num() - 1] = filehnd();
|
openf[num() - 1] = filehnd();
|
||||||
_recno = -1L;
|
_recno = RECORD_NON_FISICO;
|
||||||
|
|
||||||
CHECKD(filehnd()->r->NKeys > 0, "File senza indici: ", num());
|
CHECKD(filehnd()->r->NKeys > 0, "File senza indici: ", num());
|
||||||
setkey(1);
|
setkey(1);
|
||||||
@ -1331,7 +1527,7 @@ int TIsamtempfile::open(const char* radix, bool create, TRecnotype eod, TRecnoty
|
|||||||
filehnd()->ln = -num();
|
filehnd()->ln = -num();
|
||||||
filehnd()->knum = 1;
|
filehnd()->knum = 1;
|
||||||
}
|
}
|
||||||
_recno = -1L;
|
_recno = RECORD_NON_FISICO;
|
||||||
setstatus(err);
|
setstatus(err);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@ -2034,6 +2230,7 @@ TRectype::TRectype(int logicnum) : _cod(NULL)
|
|||||||
|
|
||||||
{
|
{
|
||||||
_logicnum = logicnum;
|
_logicnum = logicnum;
|
||||||
|
_memoinfo = NULL;
|
||||||
if (openf[_logicnum - 1] != NULL)
|
if (openf[_logicnum - 1] != NULL)
|
||||||
_length = DB_reclen(openf[logicnum - 1]->fhnd);
|
_length = DB_reclen(openf[logicnum - 1]->fhnd);
|
||||||
else
|
else
|
||||||
@ -2049,12 +2246,13 @@ TRectype::TRectype(int logicnum) : _cod(NULL)
|
|||||||
if (_length)
|
if (_length)
|
||||||
zero();
|
zero();
|
||||||
else
|
else
|
||||||
setempty(TRUE);
|
setempty(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
TRectype::TRectype(const TBaseisamfile* i): _cod(NULL)
|
TRectype::TRectype(const TBaseisamfile* i): _cod(NULL)
|
||||||
{
|
{
|
||||||
_logicnum = i->num();
|
_logicnum = i->num();
|
||||||
|
_memoinfo = NULL;
|
||||||
if (i->filehnd() != NULL)
|
if (i->filehnd() != NULL)
|
||||||
_length = DB_reclen(i->filehnd()->fhnd);
|
_length = DB_reclen(i->filehnd()->fhnd);
|
||||||
else
|
else
|
||||||
@ -2071,7 +2269,7 @@ TRectype::TRectype(const TBaseisamfile* i): _cod(NULL)
|
|||||||
if (_length)
|
if (_length)
|
||||||
zero();
|
zero();
|
||||||
else
|
else
|
||||||
setempty(TRUE);
|
setempty(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2080,6 +2278,12 @@ TRectype::TRectype(const TRectype& r)
|
|||||||
|
|
||||||
{
|
{
|
||||||
_logicnum = r._logicnum;
|
_logicnum = r._logicnum;
|
||||||
|
if ( r._memoinfo )
|
||||||
|
{
|
||||||
|
_memoinfo = new TMemo_info( *r._memoinfo );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
_memoinfo = NULL;
|
||||||
_length = r.len();
|
_length = r.len();
|
||||||
_rec = new char [ _length ];
|
_rec = new char [ _length ];
|
||||||
_rec[0] = r._rec[0];
|
_rec[0] = r._rec[0];
|
||||||
@ -2095,6 +2299,7 @@ TRectype::~TRectype()
|
|||||||
{
|
{
|
||||||
if (_cod != NULL) delete _cod;
|
if (_cod != NULL) delete _cod;
|
||||||
if (_rec != NULL) delete _rec;
|
if (_rec != NULL) delete _rec;
|
||||||
|
if (_memoinfo != NULL ) delete _memoinfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TRectype::settab(const char *tab)
|
void TRectype::settab(const char *tab)
|
||||||
@ -2263,7 +2468,7 @@ int TRectype::ndec(const char* fieldname) const
|
|||||||
|
|
||||||
bool TRectype::exist(const char* fieldname) const
|
bool TRectype::exist(const char* fieldname) const
|
||||||
{
|
{
|
||||||
return findfld(rec_des(), (char*)fieldname) != -1;
|
return findfld(rec_des(), (char*)fieldname) != FIELDERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2284,7 +2489,7 @@ const char* TRectype::get_str(const char* fieldname) const
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (CGetFieldBuff((char*) fieldname, rd, _rec, _isam_string) == -1)
|
if (CGetFieldBuff((char*) fieldname, rd, _rec, _isam_string) == FIELDERR)
|
||||||
UNKNOWN_FIELD(num(), fieldname);
|
UNKNOWN_FIELD(num(), fieldname);
|
||||||
if (CFieldType((char*) fieldname,rd) == _boolfld)
|
if (CFieldType((char*) fieldname,rd) == _boolfld)
|
||||||
{
|
{
|
||||||
@ -2303,13 +2508,18 @@ const char* TRectype::get_str(const char* fieldname) const
|
|||||||
const TString& TRectype::get(const char* fieldname) const
|
const TString& TRectype::get(const char* fieldname) const
|
||||||
{
|
{
|
||||||
static TFixed_string tmp(_isam_string, sizeof(_isam_string));
|
static TFixed_string tmp(_isam_string, sizeof(_isam_string));
|
||||||
|
if( _memoinfo && type( fieldname ) == _memofld )
|
||||||
|
{
|
||||||
|
const TString16 fn( fieldname );
|
||||||
|
return _memoinfo->get( fn );
|
||||||
|
}
|
||||||
get_str(fieldname);
|
get_str(fieldname);
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TRectype::get_int(const char* fieldname) const
|
int TRectype::get_int(const char* fieldname) const
|
||||||
{
|
{
|
||||||
if (CGetFieldBuff((char*) fieldname, rec_des(), _rec, _isam_string) == -1)
|
if (CGetFieldBuff((char*) fieldname, rec_des(), _rec, _isam_string) == FIELDERR)
|
||||||
UNKNOWN_FIELD(num(), fieldname);
|
UNKNOWN_FIELD(num(), fieldname);
|
||||||
return atoi(_isam_string);
|
return atoi(_isam_string);
|
||||||
}
|
}
|
||||||
@ -2317,7 +2527,7 @@ int TRectype::get_int(const char* fieldname) const
|
|||||||
|
|
||||||
long TRectype::get_long(const char* fieldname) const
|
long TRectype::get_long(const char* fieldname) const
|
||||||
{
|
{
|
||||||
if (CGetFieldBuff((char*) fieldname, rec_des(), _rec, _isam_string) == -1)
|
if (CGetFieldBuff((char*) fieldname, rec_des(), _rec, _isam_string) == FIELDERR)
|
||||||
UNKNOWN_FIELD(num(), fieldname);
|
UNKNOWN_FIELD(num(), fieldname);
|
||||||
return atol(_isam_string);
|
return atol(_isam_string);
|
||||||
}
|
}
|
||||||
@ -2326,7 +2536,7 @@ long TRectype::get_long(const char* fieldname) const
|
|||||||
word TRectype::get_word(const char* fieldname) const
|
word TRectype::get_word(const char* fieldname) const
|
||||||
|
|
||||||
{
|
{
|
||||||
if (CGetFieldBuff((char*) fieldname, rec_des(), _rec, _isam_string) == -1)
|
if (CGetFieldBuff((char*) fieldname, rec_des(), _rec, _isam_string) == FIELDERR)
|
||||||
UNKNOWN_FIELD(num(), fieldname);
|
UNKNOWN_FIELD(num(), fieldname);
|
||||||
return (word)atoi(_isam_string);
|
return (word)atoi(_isam_string);
|
||||||
}
|
}
|
||||||
@ -2334,7 +2544,7 @@ word TRectype::get_word(const char* fieldname) const
|
|||||||
real TRectype::get_real(const char* fieldname) const
|
real TRectype::get_real(const char* fieldname) const
|
||||||
|
|
||||||
{
|
{
|
||||||
if (CGetFieldBuff((char*) fieldname, rec_des(), _rec, _isam_string) == -1)
|
if (CGetFieldBuff((char*) fieldname, rec_des(), _rec, _isam_string) == FIELDERR)
|
||||||
UNKNOWN_FIELD(num(), fieldname);
|
UNKNOWN_FIELD(num(), fieldname);
|
||||||
real r(_isam_string);
|
real r(_isam_string);
|
||||||
return r;
|
return r;
|
||||||
@ -2344,7 +2554,7 @@ real TRectype::get_real(const char* fieldname) const
|
|||||||
char TRectype::get_char(const char* fieldname) const
|
char TRectype::get_char(const char* fieldname) const
|
||||||
|
|
||||||
{
|
{
|
||||||
if (CGetFieldBuff((char*) fieldname, rec_des(), _rec, _isam_string) == -1)
|
if (CGetFieldBuff((char*) fieldname, rec_des(), _rec, _isam_string) == FIELDERR)
|
||||||
UNKNOWN_FIELD(num(), fieldname);
|
UNKNOWN_FIELD(num(), fieldname);
|
||||||
return *_isam_string;
|
return *_isam_string;
|
||||||
}
|
}
|
||||||
@ -2353,7 +2563,7 @@ char TRectype::get_char(const char* fieldname) const
|
|||||||
bool TRectype::get_bool(const char* fieldname) const
|
bool TRectype::get_bool(const char* fieldname) const
|
||||||
|
|
||||||
{
|
{
|
||||||
if (CGetFieldBuff((char*) fieldname, rec_des(), _rec, _isam_string) == -1)
|
if (CGetFieldBuff((char*) fieldname, rec_des(), _rec, _isam_string) == FIELDERR)
|
||||||
UNKNOWN_FIELD(num(), fieldname);
|
UNKNOWN_FIELD(num(), fieldname);
|
||||||
if (toupper(*_isam_string) == 'T' || toupper(*_isam_string) == 'Y'
|
if (toupper(*_isam_string) == 'T' || toupper(*_isam_string) == 'Y'
|
||||||
|| toupper(*_isam_string) == 'S' || toupper(*_isam_string) == 'X')
|
|| toupper(*_isam_string) == 'S' || toupper(*_isam_string) == 'X')
|
||||||
@ -2365,16 +2575,11 @@ bool TRectype::get_bool(const char* fieldname) const
|
|||||||
|
|
||||||
bool TRectype::get_memo(const char* fieldname, TTextfile& txt) const
|
bool TRectype::get_memo(const char* fieldname, TTextfile& txt) const
|
||||||
{
|
{
|
||||||
long val = get_long(fieldname);
|
TToken_string memo( get( fieldname ), '\n' );
|
||||||
bool ok = FALSE;
|
int last = memo.items( );
|
||||||
if (ok = (val != 0l))
|
for( int i = 0; i < items( ); i ++ )
|
||||||
{
|
txt.append( memo.get( i ) );
|
||||||
TLocalisamfile f(_logicnum);
|
return TRUE;
|
||||||
TMemo_file memo(f.filename());
|
|
||||||
|
|
||||||
ok |= memo.get_field(txt, val);
|
|
||||||
}
|
|
||||||
return ok;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // FOXPRO
|
#endif // FOXPRO
|
||||||
@ -2394,7 +2599,7 @@ TDate TRectype::get_date(const char* fieldname) const
|
|||||||
void TRectype::put(const char* fieldname, int val)
|
void TRectype::put(const char* fieldname, int val)
|
||||||
|
|
||||||
{
|
{
|
||||||
if (CPutField((char*) fieldname, rec_des(), &val, _rec) == -1)
|
if (CPutField((char*) fieldname, rec_des(), &val, _rec) == FIELDERR)
|
||||||
UNKNOWN_FIELD(num(), fieldname);
|
UNKNOWN_FIELD(num(), fieldname);
|
||||||
setempty(FALSE);
|
setempty(FALSE);
|
||||||
}
|
}
|
||||||
@ -2403,7 +2608,7 @@ void TRectype::put(const char* fieldname, int val)
|
|||||||
void TRectype::put(const char* fieldname, long val)
|
void TRectype::put(const char* fieldname, long val)
|
||||||
|
|
||||||
{
|
{
|
||||||
if (CPutField((char*) fieldname, rec_des(), &val, _rec) == -1)
|
if (CPutField((char*) fieldname, rec_des(), &val, _rec) == FIELDERR)
|
||||||
UNKNOWN_FIELD(num(), fieldname);
|
UNKNOWN_FIELD(num(), fieldname);
|
||||||
setempty(FALSE);
|
setempty(FALSE);
|
||||||
}
|
}
|
||||||
@ -2416,11 +2621,11 @@ void TRectype::put(const char* fieldname, TTextfile& txt)
|
|||||||
|
|
||||||
TMemo_file memo(f.filename());
|
TMemo_file memo(f.filename());
|
||||||
|
|
||||||
long id = memo.set_field(txt, isnew ? -1 : val);
|
long id = memo.set_field(txt, isnew ? FIELDERR : val);
|
||||||
if (isnew) val = id;
|
if (isnew) val = id;
|
||||||
TString16 str; str << val;
|
TString16 str; str << val;
|
||||||
|
|
||||||
if (CPutFieldBuff((char*) fieldname, rec_des(), (char*)(const char*)str, _rec) == -1)
|
if (CPutFieldBuff((char*) fieldname, rec_des(), (char*)(const char*)str, _rec) == FIELDERR)
|
||||||
UNKNOWN_FIELD(num(), fieldname);
|
UNKNOWN_FIELD(num(), fieldname);
|
||||||
setempty(FALSE);
|
setempty(FALSE);
|
||||||
}
|
}
|
||||||
@ -2429,14 +2634,14 @@ void TRectype::put(const char* fieldname, TTextfile& txt)
|
|||||||
void TRectype::put(const char* fieldname, word val)
|
void TRectype::put(const char* fieldname, word val)
|
||||||
|
|
||||||
{
|
{
|
||||||
if (CPutField((char*) fieldname, rec_des(), &val, _rec) == -1)
|
if (CPutField((char*) fieldname, rec_des(), &val, _rec) == FIELDERR)
|
||||||
UNKNOWN_FIELD(num(), fieldname);
|
UNKNOWN_FIELD(num(), fieldname);
|
||||||
setempty(FALSE);
|
setempty(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TRectype::put(const char* fieldname, const real& val)
|
void TRectype::put(const char* fieldname, const real& val)
|
||||||
{
|
{
|
||||||
if (CPutFieldBuff((char*) fieldname, rec_des(), (char*)(const char*)val.string(), _rec) == -1)
|
if (CPutFieldBuff((char*) fieldname, rec_des(), (char*)(const char*)val.string(), _rec) == FIELDERR)
|
||||||
UNKNOWN_FIELD(num(), fieldname);
|
UNKNOWN_FIELD(num(), fieldname);
|
||||||
setempty(FALSE);
|
setempty(FALSE);
|
||||||
}
|
}
|
||||||
@ -2453,7 +2658,7 @@ void TRectype::put(const char* fieldname, char val)
|
|||||||
{
|
{
|
||||||
char w[2] = {val, '\0'};
|
char w[2] = {val, '\0'};
|
||||||
|
|
||||||
if (CPutFieldBuff((char*) fieldname, rec_des(), w, _rec) == -1)
|
if (CPutFieldBuff((char*) fieldname, rec_des(), w, _rec) == FIELDERR)
|
||||||
UNKNOWN_FIELD(num(), fieldname);
|
UNKNOWN_FIELD(num(), fieldname);
|
||||||
setempty(FALSE);
|
setempty(FALSE);
|
||||||
}
|
}
|
||||||
@ -2463,7 +2668,7 @@ void TRectype::put(const char* fieldname, bool val)
|
|||||||
|
|
||||||
{
|
{
|
||||||
char* s = val ? "T" : "F";
|
char* s = val ? "T" : "F";
|
||||||
if (CPutFieldBuff((char*) fieldname, rec_des(), s, _rec) == -1)
|
if (CPutFieldBuff((char*) fieldname, rec_des(), s, _rec) == FIELDERR)
|
||||||
UNKNOWN_FIELD(num(), fieldname);
|
UNKNOWN_FIELD(num(), fieldname);
|
||||||
setempty(FALSE);
|
setempty(FALSE);
|
||||||
}
|
}
|
||||||
@ -2484,6 +2689,14 @@ void TRectype::put(const char* fieldname, const char* val)
|
|||||||
{
|
{
|
||||||
TRecfield f(*this, fieldname);
|
TRecfield f(*this, fieldname);
|
||||||
f = val;
|
f = val;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(CFieldType((char*) fieldname, rec_des()) == _memofld)
|
||||||
|
{
|
||||||
|
// Qui registro il campo memo
|
||||||
|
CHECK( _memoinfo, "La struttura TMemo_info non è stata allocata!" );
|
||||||
|
_memoinfo->put( fieldname, val );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2498,7 +2711,7 @@ void TRectype::put(const char* fieldname, const char* val)
|
|||||||
else
|
else
|
||||||
wval="F";
|
wval="F";
|
||||||
}
|
}
|
||||||
if (CPutFieldBuff((char*) fieldname, rec_des(), (char*) (const char*)wval, _rec) == -1)
|
if (CPutFieldBuff((char*) fieldname, rec_des(), (char*) (const char*)wval, _rec) == FIELDERR)
|
||||||
UNKNOWN_FIELD(num(), fieldname);
|
UNKNOWN_FIELD(num(), fieldname);
|
||||||
}
|
}
|
||||||
setempty(FALSE);
|
setempty(FALSE);
|
||||||
@ -2518,9 +2731,13 @@ void TRectype::zero(const char* fieldname)
|
|||||||
f = "";
|
f = "";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (CZeroField((char*) fieldname, rec_des(), _rec) == -1)
|
if (CZeroField((char*) fieldname, rec_des(), _rec) == FIELDERR)
|
||||||
UNKNOWN_FIELD(num(), fieldname);
|
UNKNOWN_FIELD(num(), fieldname);
|
||||||
}
|
}
|
||||||
|
if( lf_has_memo( _logicnum ) )
|
||||||
|
{
|
||||||
|
init_memo_info( _logicnum, RECORD_NON_FISICO );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2538,8 +2755,12 @@ void TRectype::zero(char c)
|
|||||||
memset(_rec + 1, c, len() - 1);
|
memset(_rec + 1, c, len() - 1);
|
||||||
|
|
||||||
if (_cod != NULL)
|
if (_cod != NULL)
|
||||||
*_cod = _tab;
|
*_cod = _tab;
|
||||||
|
|
||||||
|
if( lf_has_memo( _logicnum ) )
|
||||||
|
{
|
||||||
|
init_memo_info( _logicnum, RECORD_NON_FISICO );
|
||||||
|
}
|
||||||
setempty(TRUE);
|
setempty(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2620,7 +2841,7 @@ void TRecfield::set(int from, int to)
|
|||||||
int nf;
|
int nf;
|
||||||
RecDes* rd = _rec->rec_des();
|
RecDes* rd = _rec->rec_des();
|
||||||
|
|
||||||
if ((nf = findfld(rd, _name)) == -1)
|
if ((nf = findfld(rd, _name)) == FIELDERR)
|
||||||
{
|
{
|
||||||
_p = NULL;
|
_p = NULL;
|
||||||
_len = 0;
|
_len = 0;
|
||||||
@ -2900,7 +3121,7 @@ TRecfield::operator const char*() const
|
|||||||
|
|
||||||
TRecnotype TRecfield::ptr() const
|
TRecnotype TRecfield::ptr() const
|
||||||
{
|
{
|
||||||
if (_p == NULL) return(-1L);
|
if (_p == NULL) return(RECORD_NON_FISICO);
|
||||||
unsigned char* wp = (unsigned char*) _p + 3;
|
unsigned char* wp = (unsigned char*) _p + 3;
|
||||||
TRecnotype r = *wp;
|
TRecnotype r = *wp;
|
||||||
bool n = r > 127;
|
bool n = r > 127;
|
||||||
|
@ -5,6 +5,18 @@
|
|||||||
#include <sysfld.h>
|
#include <sysfld.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ARRAY_H
|
||||||
|
#include <array.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ASSOC_H
|
||||||
|
#include <assoc.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __SYSFLD_H
|
||||||
|
#include <sysfld.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef FOXPRO
|
#ifndef FOXPRO
|
||||||
|
|
||||||
#ifndef __REAL_H
|
#ifndef __REAL_H
|
||||||
@ -36,9 +48,37 @@ class TTextfile;
|
|||||||
// @M
|
// @M
|
||||||
#define FIELDERR -1
|
#define FIELDERR -1
|
||||||
|
|
||||||
|
#define RECORD_NON_FISICO (-1L)
|
||||||
|
|
||||||
const int MAX_KEYS = 8;
|
const int MAX_KEYS = 8;
|
||||||
// @END
|
// @END
|
||||||
|
|
||||||
|
class TLocalisamfile;
|
||||||
|
|
||||||
|
class TMemo_info : public TObject
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
|
||||||
|
TBit_array _dirty;
|
||||||
|
TString_array _data;
|
||||||
|
int _lfid;
|
||||||
|
TRecnotype _recno;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
TRecnotype recno( ){ return _recno; }
|
||||||
|
void recno( TRecnotype r ){ _recno = r; }
|
||||||
|
RecDes * rec_des( ) const;
|
||||||
|
void put( const char * fieldname, const char * data );
|
||||||
|
TString& get( const char * fieldname );
|
||||||
|
void write_data( );
|
||||||
|
bool memo_loaded( const char * fieldname );
|
||||||
|
void reset( );
|
||||||
|
TMemo_info( const int lfid, const TRecnotype recno );
|
||||||
|
TMemo_info( TMemo_info& memoinfo );
|
||||||
|
virtual ~TMemo_info( );
|
||||||
|
};
|
||||||
|
|
||||||
// @C
|
// @C
|
||||||
// Classe TRectype : public TObject
|
// Classe TRectype : public TObject
|
||||||
//
|
//
|
||||||
@ -61,6 +101,7 @@ class TRectype : public TSortable
|
|||||||
bool _isempty; // Se il record e' vuoto
|
bool _isempty; // Se il record e' vuoto
|
||||||
char _tab[5]; // identificatore della tabella
|
char _tab[5]; // identificatore della tabella
|
||||||
TRecfield * _cod; // campo "COD" della tabella
|
TRecfield * _cod; // campo "COD" della tabella
|
||||||
|
TMemo_info * _memoinfo;
|
||||||
// @END
|
// @END
|
||||||
|
|
||||||
protected: // TObject
|
protected: // TObject
|
||||||
@ -69,7 +110,7 @@ protected: // TObject
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
const char* start(int nf) const;
|
const char* start(int nf) const;
|
||||||
void setempty(bool val) { _isempty = val;} // Rende vero is_empty
|
void setempty(bool val) { _isempty = val;} // Rende vero is_empty
|
||||||
|
|
||||||
public: // TObject
|
public: // TObject
|
||||||
virtual TObject* dup() const; // Duplica record
|
virtual TObject* dup() const; // Duplica record
|
||||||
@ -106,7 +147,6 @@ public:
|
|||||||
const char* get_str(const char* fieldname) const ;
|
const char* get_str(const char* fieldname) const ;
|
||||||
#ifndef FOXPRO
|
#ifndef FOXPRO
|
||||||
const TString& get(const char* fieldname) const ;
|
const TString& get(const char* fieldname) const ;
|
||||||
TString sget(const char* fieldname) const { return ((TString)get(fieldname)); }
|
|
||||||
int get_int(const char* fieldname) const ;
|
int get_int(const char* fieldname) const ;
|
||||||
long get_long(const char* fieldname) const ;
|
long get_long(const char* fieldname) const ;
|
||||||
word get_word(const char* fieldname) const ;
|
word get_word(const char* fieldname) const ;
|
||||||
@ -158,6 +198,11 @@ public:
|
|||||||
TRectype(const TRectype& r); // Costruisce il record a partire da r
|
TRectype(const TRectype& r); // Costruisce il record a partire da r
|
||||||
|
|
||||||
virtual ~TRectype();
|
virtual ~TRectype();
|
||||||
|
|
||||||
|
void init_memo_info( const int lf, const TRecnotype recnum );
|
||||||
|
TMemo_info& memo_info( ) const { CHECK( _memoinfo, "Tentativo di accesso ad una memoinfo vuota!" ); return *_memoinfo; }
|
||||||
|
void write_memo_info( ) const;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -182,7 +227,8 @@ class TBaseisamfile : public TObject
|
|||||||
bool _historicfile; // Vero se il file e' archivio storico
|
bool _historicfile; // Vero se il file e' archivio storico
|
||||||
TRecnotype _lasthf;
|
TRecnotype _lasthf;
|
||||||
TRecnotype _recno;
|
TRecnotype _recno;
|
||||||
|
bool _has_memo;
|
||||||
|
|
||||||
friend class TRectype;
|
friend class TRectype;
|
||||||
friend class TLocalisamfile;
|
friend class TLocalisamfile;
|
||||||
friend class TIsamfile;
|
friend class TIsamfile;
|
||||||
@ -209,6 +255,7 @@ protected:
|
|||||||
void recover();
|
void recover();
|
||||||
int _open(unsigned int mode = _manulock); // Apre isam file con lock
|
int _open(unsigned int mode = _manulock); // Apre isam file con lock
|
||||||
int _close();
|
int _close();
|
||||||
|
|
||||||
const char* filename() const;
|
const char* filename() const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -284,8 +331,6 @@ public:
|
|||||||
#ifndef FOXPRO
|
#ifndef FOXPRO
|
||||||
const TString& get(const char* fieldname) const
|
const TString& get(const char* fieldname) const
|
||||||
{ return curr().get(fieldname);}
|
{ return curr().get(fieldname);}
|
||||||
TString sget(const char* fieldname) const
|
|
||||||
{ return ((TString)get(fieldname)); }
|
|
||||||
void put(const char* fieldname, int val)
|
void put(const char* fieldname, int val)
|
||||||
{ curr().put(fieldname, val);}
|
{ curr().put(fieldname, val);}
|
||||||
void put(const char* fieldname, long val)
|
void put(const char* fieldname, long val)
|
||||||
@ -317,6 +362,8 @@ public:
|
|||||||
void zero(char c) { curr().zero(c);}
|
void zero(char c) { curr().zero(c);}
|
||||||
void blank(const char * fieldname) { curr().blank(fieldname); }
|
void blank(const char * fieldname) { curr().blank(fieldname); }
|
||||||
TRectype& operator =(const TRectype& rec) { return curr() = rec;}
|
TRectype& operator =(const TRectype& rec) { return curr() = rec;}
|
||||||
|
|
||||||
|
bool has_memo( );
|
||||||
|
|
||||||
TBaseisamfile(int logicnum, bool linkrecinst = FALSE);
|
TBaseisamfile(int logicnum, bool linkrecinst = FALSE);
|
||||||
virtual ~TBaseisamfile();
|
virtual ~TBaseisamfile();
|
||||||
@ -409,7 +456,7 @@ public:
|
|||||||
//
|
//
|
||||||
// File isam temporaneo
|
// File isam temporaneo
|
||||||
//
|
//
|
||||||
// @END
|
// @END TTrec
|
||||||
|
|
||||||
class TIsamtempfile : public TLocalisamfile
|
class TIsamtempfile : public TLocalisamfile
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user