Patch level :2.1 198

Files correlati     :cacnv.exe
Ricompilazione Demo : [ ]
Commento            :
aggiunta implementazione dei metodi virtual RENUM e KEY_COMPLETE


git-svn-id: svn://10.65.10.50/trunk@12602 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2005-01-17 15:57:00 +00:00
parent fed9d39f2f
commit 92c85172a4
2 changed files with 52 additions and 3 deletions

View File

@ -1,4 +1,53 @@
#include <multirec.h>
#include <relation.h>
bool TMultiple_rectype::key_complete()
{
const RecDes& recd = *rec_des(); // Descrizione del record
const KeyDes& kd = recd.Ky[0];
const int nf = kd.FieldSeq[kd.NkFields - 1] % MaxFields; //posizione ultimo campo chiave principale
const RecFieldDes& rf = recd.Fd[nf];
const long num = get_long(rf.Name);
return num > 0;
}
//assegna il prossimo numero all'ultimo campo della chiave principale della testata
bool TMultiple_rectype::renum()
{
const RecDes& recd = *rec_des(); // Descrizione del record
const KeyDes& kd = recd.Ky[0];
const int nf = kd.FieldSeq[kd.NkFields - 1] % MaxFields; //posizione ultimo campo chiave principale
const RecFieldDes& rf = recd.Fd[nf];
TRectype::zero(rf.Name); //azzera il contenuto del campo chiave numerico
long next_num = 1;
if (kd.NkFields == 1) //chiave principale con un solo campo
{
TLocalisamfile file(num());
if (file.last() == NOERR)
next_num += file.get_long(rf.Name);
}
else //chiave principale con piu' campi
{
TRelation rel(num()); //relazione sul file principale
TCursor cur(&rel, "", 1, this, this); //cursore generale per chiavi multicampo
const long items = cur.items();
if (items > 0)
{
cur.freeze();
cur = items - 1; //va sull'ultimo record del file
next_num += cur.curr().get_long(rf.Name);
}
}
put(rf.Name, next_num);
return false;
}
void TMultiple_rectype::set_body_key(TRectype & rowrec)
{

View File

@ -37,9 +37,9 @@ protected:
// @cmember funzione per costruire la chiave delle righe
virtual void set_body_key(TRectype & rowrec);
// @cmember verifica se la chiave della testata e' completa
virtual bool key_complete() { return TRUE; }
virtual bool key_complete();
// @cmember setta la chiave della testata ad un valore nuovo (next-key)
virtual bool renum() { return FALSE; }
virtual bool renum();
// @cmember renumera le chiavi di tutti i corpi in base alla testata
virtual void renum_key();
// @cmember Genera il record del corpo
@ -60,7 +60,7 @@ protected:
// @cmember sincronizza tutti i body (li legge, se necessario) in seguito ad una lettura della testata
virtual void synchronize_bodies();
virtual TMultiple_rectype & copy(const TMultiple_rectype & r);
TObject* dup() const { return new TMultiple_rectype(*this); }
virtual TObject* dup() const { return new TMultiple_rectype(*this); }
// @cmember restituisce il numero di record attualmente caricati nel corpo (da usare nella dirty fields)
int loaded_rows(int logicnum = 0) const;