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:
parent
fed9d39f2f
commit
92c85172a4
@ -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)
|
||||
{
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user