Patch level : 2.0 464

Files correlati     : cb6.dll ba3 piu tutti gli altri
Ricompilazione Demo : [ ]
Commento            :
Corretto errore AO20007
In qualsiasi videata richiamata dal tasto Elimina, se non ho nessun record da
 scegliere e premo sul tasto Tutti, mi viene restituito un errore di Ba3.exe
Corretto errore AO20017
Inserendo una nuova categoria se consulto i codici del Piano dei Conti,
passo nella pagina descrizione e inserisco una stringa da ricercare dopo aver
scritto la prima lettera si blocca tutto il programma senza che venga restituito
nessun errore (tra l'altro succede solo su alcune lettere iniziali e non su tutte,
il mio esempio inizia con la 'R'); inoltre se non scrivo nessuna stringa da
cercare e ritorno sui codici del sottoconto, mi passa all'elenco dei codici del
conto.
Corretto errore AO20018
Inserendo una nuova categoria se consulto i codici del Piano dei Conti,
passo nella pagina descrizione e inserisco una stringa da ricercare dopo aver
scritto la prima lettera si blocca tutto il programma senza che venga restituito
nessun errore (tra l'altro succede solo su alcune lettere iniziali e non su tutte,
il mio esempio inizia con la 'R'); inoltre se non scrivo nessuna stringa da
cercare e ritorno sui codici del sottoconto, mi passa all'elenco dei codici del
conto.
Corretto errore AO20019
CON LA TASTIERA Se premo sui tasti di salto all'ultimo o primo record e non ho
nessun dato mi restituisce un errore del modulo Base:
Impossibile leggere i dati - errore 201.


git-svn-id: svn://10.65.10.50/trunk@11077 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2003-04-30 17:04:20 +00:00
parent f9a92907f7
commit 6202d11fd3
8 changed files with 64 additions and 43 deletions

View File

@ -925,7 +925,7 @@ int mem4reset( void ) ;
int tfile4exprKey( TAG4FILE *, unsigned char * * ) ; int tfile4exprKey( TAG4FILE *, unsigned char * * ) ;
int tfile4freeAll( TAG4FILE * ) ; int tfile4freeAll( TAG4FILE * ) ;
int tfile4freeSaved( TAG4FILE * ) ; int tfile4freeSaved( TAG4FILE * ) ;
int tfile4go( TAG4FILE *, const unsigned char *, const long, const int ) ; S4EXPORT int tfile4go( TAG4FILE *, const unsigned char *, const long, const int ) ;
int tfile4goEof( TAG4FILE * ) ; int tfile4goEof( TAG4FILE * ) ;
int tfile4go2( TAG4FILE *, const unsigned char *, const long, const int ) ; int tfile4go2( TAG4FILE *, const unsigned char *, const long, const int ) ;
int tfile4initSeekConv( TAG4FILE *, int ) ; /* Initialize 'stok' and 'dtok' */ int tfile4initSeekConv( TAG4FILE *, int ) ; /* Initialize 'stok' and 'dtok' */

View File

@ -729,7 +729,8 @@ TBit_array& TBit_array::operator|= (const TBit_array& ba)
// Certified 99% // Certified 99%
void TBit_array::set(long n) void TBit_array::set(long n)
{ {
const word i = index(n); CHECKD(n >= 0, "Can't set a negative bit ", n);
const word i = index(n);
if (i >= _size) if (i >= _size)
resize(i); resize(i);
_bit[i] |= mask(n); _bit[i] |= mask(n);

View File

@ -1137,6 +1137,19 @@ char* DB_index_getkey(int handle)
return key; return key;
} }
/*-------------------------------------------------------------------------
Si posiziona sulla chiave ed il record indicati
--------------------------------------------------------------------------*/
int DB_index_go(int handle, const char* key, long recno)
{
TAG4 *t;
if(!handle_ok(handle)) return(-1);
if ((t=d4tagDefault(dbdata[handle]))==NULL) return(-1);
return(tfile4go(t->tagFile, key, recno, FALSE));
}
/*------------------------------------------------------------------------- /*-------------------------------------------------------------------------
Restituisce vero se l'indice e' alla fine Restituisce vero se l'indice e' alla fine
--------------------------------------------------------------------------*/ --------------------------------------------------------------------------*/

View File

@ -57,6 +57,7 @@ extern "C" {
long DB_index_recno(int handle); long DB_index_recno(int handle);
long DB_index_next(int handle); long DB_index_next(int handle);
char* DB_index_getkey(int handle); char* DB_index_getkey(int handle);
int DB_index_go(int handle, const char * key, long recno);
char* DB_memoptr(const int handle, const char * fieldname ); char* DB_memoptr(const int handle, const char * fieldname );
int DB_memowrite(const int handle, const char * fieldname, const char * data ) ; int DB_memowrite(const int handle, const char * fieldname, const char * data ) ;
int DB_index_eof(int handle); int DB_index_eof(int handle);

View File

@ -110,23 +110,17 @@ void TRelation_application::set_limits(
file().setkey(1); file().setkey(1);
if (what & 0x1) if (what & 0x1)
{ {
if (file().empty()) if (!file().empty() && file().first() == NOERR)
_first = 1; _first = file().recno();
else else
{ _first = -1;
file().first();
_first = file().recno();
}
} }
if (what & 0x2) if (what & 0x2)
{ {
if (file().empty()) if (!file().empty() && file().last() == NOERR)
_last = 1; _last = file().recno();
else else
{ _last = -1;
file().last();
_last = file().recno();
}
} }
} }
@ -316,15 +310,8 @@ int TRelation_application::set_mode(int mode)
const int m = ((TMaskmode)mode == NO_MODE) ? (int) MODE_QUERY : mode; const int m = ((TMaskmode)mode == NO_MODE) ? (int) MODE_QUERY : mode;
_mask->set_mode(m); _mask->set_mode(m);
// if (mode == _mode)
// {
// set_toolbar(FALSE); // Fast buttons update
// }
// else
// {
set_toolbar(TRUE); // Full buttons update set_toolbar(TRUE); // Full buttons update
_mode = mode; _mode = mode;
// }
const char* t = ""; const char* t = "";
switch(mode) switch(mode)

View File

@ -86,8 +86,6 @@ private:
// @Setta i filtri di lettura // @Setta i filtri di lettura
void set_key_filter(); void set_key_filter();
// @cmember:(INTERNAL) Setta i limiti
void set_limits(byte what = 0x3);
// @cmember:(INTERNAL) Posiziona l'applicazione in modo richiesta/inserimento (chiama <mf TRelation_application::query_mode>) // @cmember:(INTERNAL) Posiziona l'applicazione in modo richiesta/inserimento (chiama <mf TRelation_application::query_mode>)
void query_insert_mode() void query_insert_mode()
{ query_mode(TRUE); } { query_mode(TRUE); }
@ -236,6 +234,8 @@ protected:
// @access Public Member // @access Public Member
public: public:
// @cmember:(INTERNAL) Setta i limiti
void set_limits(byte what = 0x3);
// @cmember Ritorna la maschera corrente // @cmember Ritorna la maschera corrente
TMask& curr_mask() const TMask& curr_mask() const
{ return *_mask; } { return *_mask; }

View File

@ -285,10 +285,10 @@ void TRelation::print_on(ostream& out) const
void TRelation::restore_status() void TRelation::restore_status()
{ {
_status.restart(); // _status.restart();
for (int i = 0; i < _files.items(); i++) for (int i = _files.last(); i >= 0 ; i--)
{ {
const int err = _status.get_int(); const int err = _status.get_int(i*3);
const TRecnotype recno = _status.get_long(); const TRecnotype recno = _status.get_long();
const int key = _status.get_int(); const int key = _status.get_int();
@ -297,6 +297,7 @@ void TRelation::restore_status()
else file(i).curr().zero(); else file(i).curr().zero();
file(i).setstatus(err); file(i).setstatus(err);
} }
_status.get(_files.items()*3 - 1); // mi riposiziono prima di tutti i first_match
for (i = 0; i < _reldefs.items(); i++) for (i = 0; i < _reldefs.items(); i++)
{ {
const bool first_match = _status.get_int() ? TRUE : FALSE; const bool first_match = _status.get_int() ? TRUE : FALSE;
@ -1092,8 +1093,17 @@ TRecnotype TCursor::buildcursor(TRecnotype rp)
bool TCursor::filtercursor(TRecnotype recno) bool TCursor::filtercursor(TRecnotype recno)
{ {
file().readat(recno); file().readat(recno);
if (update_relation()) if (update_relation())
{
const int handle = file().handle();
const char *s0 = DB_index_getkey(handle);
_if->update(-filter_limit()); _if->update(-filter_limit());
if (_nkey != DB_tagget(handle))
DB_tagselect(handle, _nkey);
if (recno != DB_index_recno(handle))
DB_index_go(handle, s0, recno);
}
bool ok = TRUE; bool ok = TRUE;
@ -1362,7 +1372,7 @@ int TCursor::test(TIsamop op, TReclock lockop) const
TLocalisamfile& curfile = file(); TLocalisamfile& curfile = file();
const TRectype& currec = curfile.curr(); const TRectype& currec = curfile.curr();
curfile.setkey(_nkey); curfile.setkey(_nkey);
int err = NOERR; int err = NOERR;
if (op == _isequal) if (op == _isequal)
{ {
@ -1400,6 +1410,12 @@ int TCursor::test(TIsamop op, TReclock lockop) const
break; break;
else else
{ {
if (((TCursor *)this)->items() == 0)
{
err = _isemptyfile;
break;
}
if (lockop != _nolock) if (lockop != _nolock)
curfile.reread(_unlock); curfile.reread(_unlock);

View File

@ -498,19 +498,22 @@ void TSheet_control::check(
if (on) if (on)
{ {
const long tot = items()-1; const long tot = items()-1;
_checked.set(tot); // Forza le dimensioni del bit array if (tot >= 0)
_checked.set(); // Setta tutti i bit {
_checked.set(tot); // Forza le dimensioni del bit array
_checked.set(); // Setta tutti i bit
// Elimina i bit in eccesso alla fine dell'array // Elimina i bit in eccesso alla fine dell'array
for (long i = _checked.items()-1; i > tot; i--) for (long i = _checked.items()-1; i > tot; i--)
_checked.reset(i); _checked.reset(i);
// Elimina i bit corrispondenti a righe disabilitate // Elimina i bit corrispondenti a righe disabilitate
if (_disabled.first_one() >= 0) if (_disabled.first_one() >= 0)
{ {
for (long i = tot; i >= 0; i--) for (long i = tot; i >= 0; i--)
if (_disabled[i]) _checked.reset(i); if (_disabled[i]) _checked.reset(i);
} }
}
} }
else else
_checked.reset(); _checked.reset();
@ -1247,8 +1250,8 @@ bool TSheet::tutti_handler(TMask_field& f, KEY k)
if (k == K_SPACE) if (k == K_SPACE)
{ {
TSheet& s = (TSheet&)f.mask(); TSheet& s = (TSheet&)f.mask();
if (s.check_enabled()) if (s.check_enabled())
s.check(-1, !s.one_checked()); s.check(-1, !s.one_checked());
} }
return TRUE; return TRUE;
} }