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 <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)
|
void TMultiple_rectype::set_body_key(TRectype & rowrec)
|
||||||
{
|
{
|
||||||
|
@ -37,9 +37,9 @@ protected:
|
|||||||
// @cmember funzione per costruire la chiave delle righe
|
// @cmember funzione per costruire la chiave delle righe
|
||||||
virtual void set_body_key(TRectype & rowrec);
|
virtual void set_body_key(TRectype & rowrec);
|
||||||
// @cmember verifica se la chiave della testata e' completa
|
// @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)
|
// @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
|
// @cmember renumera le chiavi di tutti i corpi in base alla testata
|
||||||
virtual void renum_key();
|
virtual void renum_key();
|
||||||
// @cmember Genera il record del corpo
|
// @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
|
// @cmember sincronizza tutti i body (li legge, se necessario) in seguito ad una lettura della testata
|
||||||
virtual void synchronize_bodies();
|
virtual void synchronize_bodies();
|
||||||
virtual TMultiple_rectype & copy(const TMultiple_rectype & r);
|
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)
|
// @cmember restituisce il numero di record attualmente caricati nel corpo (da usare nella dirty fields)
|
||||||
int loaded_rows(int logicnum = 0) const;
|
int loaded_rows(int logicnum = 0) const;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user