Patch level : nopatch
Files correlati : Commento : Agguinti metodi per la creazione di tracciati record temporanei
This commit is contained in:
parent
438a204712
commit
207991605e
@ -646,6 +646,8 @@ bool TDir::is_active () const
|
|||||||
return main_app().has_module(module, CHK_DONGLE);
|
return main_app().has_module(module, CHK_DONGLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// riimplementare nella 13
|
||||||
|
|
||||||
void TTrec::update_fielddef (int nfld, TToken_string& s)
|
void TTrec::update_fielddef (int nfld, TToken_string& s)
|
||||||
{
|
{
|
||||||
RecFieldDes& rfd = _rec.Fd[nfld];
|
RecFieldDes& rfd = _rec.Fd[nfld];
|
||||||
@ -655,6 +657,59 @@ void TTrec::update_fielddef (int nfld, TToken_string& s)
|
|||||||
rfd.Dec = s.get_int ();
|
rfd.Dec = s.get_int ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TTrec::update_fielddef(int nfld, const char * name, int type, int len, int dec)
|
||||||
|
{
|
||||||
|
if (nfld < 0)
|
||||||
|
nfld = _rec.NFields++;
|
||||||
|
|
||||||
|
RecFieldDes& rfd = _rec.Fd[nfld];
|
||||||
|
|
||||||
|
strcpy(rfd.Name, name);
|
||||||
|
rfd.TypeF = type;
|
||||||
|
if (len <= 0)
|
||||||
|
{
|
||||||
|
switch (rfd.TypeF)
|
||||||
|
{
|
||||||
|
case _datefld:
|
||||||
|
rfd.Len = 8;
|
||||||
|
rfd.Dec = 0;
|
||||||
|
break;
|
||||||
|
case _charfld:
|
||||||
|
case _boolfld:
|
||||||
|
rfd.Len = 1;
|
||||||
|
rfd.Dec = 0;
|
||||||
|
break;
|
||||||
|
case _memofld:
|
||||||
|
rfd.Len = 10;
|
||||||
|
rfd.Dec = 0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
message_box("Lunghezza errata");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rfd.Len = len;
|
||||||
|
rfd.Dec = dec;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TTrec::update_fielddef(int nfld, const RecDes & rd, const char * name)
|
||||||
|
{
|
||||||
|
int i = -1;
|
||||||
|
|
||||||
|
for (i = 0; i < rd.NFields; i++)
|
||||||
|
if (strcmp(rd.Fd[i].Name, name) == 0)
|
||||||
|
break;
|
||||||
|
if (i >= 0)
|
||||||
|
update_fielddef(nfld, rd.Fd[i].Name, rd.Fd[i].TypeF, rd.Fd[i].Len, rd.Fd[i].Dec);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// riimplementare nella 13
|
||||||
|
|
||||||
|
|
||||||
void TTrec::update_keydef (int key, TToken_string& s)
|
void TTrec::update_keydef (int key, TToken_string& s)
|
||||||
{
|
{
|
||||||
TExpression expr ("", _strexpr);
|
TExpression expr ("", _strexpr);
|
||||||
@ -704,6 +759,56 @@ void TTrec::update_keydef (int key, TToken_string& s)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TTrec::update_keydef(int key, const char * e, const bool dup)
|
||||||
|
{
|
||||||
|
TExpression expr ("", _strexpr);
|
||||||
|
TString ke (e);
|
||||||
|
|
||||||
|
if (key < 0)
|
||||||
|
key = _rec.NKeys++;
|
||||||
|
if (expr.set(ke, _strexpr))
|
||||||
|
{
|
||||||
|
_rec.Ky[key].DupKeys = dup;
|
||||||
|
TCodearray & c = expr.code ();
|
||||||
|
c.begin ();
|
||||||
|
int n = 0;
|
||||||
|
while (!c.end ())
|
||||||
|
{
|
||||||
|
TCode & inst = c.step ();
|
||||||
|
TCodesym sym = inst.getsym ();
|
||||||
|
|
||||||
|
if (sym == _variable)
|
||||||
|
{
|
||||||
|
const char *s = inst.string ();
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < _rec.NFields; i++)
|
||||||
|
if (strcmp (_rec.Fd[i].Name, s) == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
_rec.Ky[key].FieldSeq[n] = i;
|
||||||
|
_rec.Ky[key].FromCh[n] = INVFLD;
|
||||||
|
_rec.Ky[key].ToCh[n] = INVFLD;
|
||||||
|
inst = c.step ();
|
||||||
|
sym = inst.getsym ();
|
||||||
|
if (sym == _upper)
|
||||||
|
_rec.Ky[key].FieldSeq[n] += MaxFields;
|
||||||
|
else if (sym == _number)
|
||||||
|
{
|
||||||
|
_rec.Ky[key].FromCh[n] = (int)inst.number().integer() - 1;
|
||||||
|
inst = c.step ();
|
||||||
|
_rec.Ky[key].ToCh[n] = _rec.Ky[key].FromCh[n] + (int)inst.number ().integer () - 1;
|
||||||
|
inst = c.step ();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
c.backtrace ();
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_rec.Ky[key].NkFields = n;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void TTrec::print_on(ostream & out) const
|
void TTrec::print_on(ostream & out) const
|
||||||
{
|
{
|
||||||
const int n = num();
|
const int n = num();
|
||||||
@ -779,5 +884,14 @@ void TTrec::read_from(istream & in)
|
|||||||
_des = NULL;
|
_des = NULL;
|
||||||
_tab = "";
|
_tab = "";
|
||||||
}
|
}
|
||||||
|
void TTrec::set_name(const char * name, int nfld)
|
||||||
|
{
|
||||||
|
if (nfld < 0)
|
||||||
|
nfld = _rec.NFields - 1;
|
||||||
|
|
||||||
|
RecFieldDes& rfd = _rec.Fd[nfld];
|
||||||
|
|
||||||
|
strcpy(rfd.Name, name);
|
||||||
|
}
|
||||||
|
|
||||||
#endif // FOXPRO
|
#endif // FOXPRO
|
||||||
|
@ -230,15 +230,33 @@ public:
|
|||||||
int len() const;
|
int len() const;
|
||||||
|
|
||||||
#ifndef FOXPRO
|
#ifndef FOXPRO
|
||||||
// @cmember Aggiorna la chiave. <p desc> e' una token string
|
// @cmember Aggiorna la chiave. <p desc> e' una token string
|
||||||
void update_keydef(int key, TToken_string& desc);
|
void update_keydef(int key, const char * e, const bool dup);
|
||||||
// @cmember Aggiorna il campo. <p desc> e' una token string
|
// @cmember Aggiorna la chiave. <p desc> e' una token string
|
||||||
void update_fielddef(int nfld, TToken_string& desc);
|
void update_keydef(int key, TToken_string& desc);
|
||||||
|
// @cmember Aggiunge una chiave. <p desc> e' una token string
|
||||||
|
void add_keydef(TToken_string& desc) { update_keydef(-1, desc); }
|
||||||
|
// @cmember Aggiunge una chiave. <p desc> e' una token string
|
||||||
|
void add_keydef(const char * e, const bool dup) { update_keydef(-1, e, dup); }
|
||||||
|
// @cmember Aggiorna il campo.
|
||||||
|
void update_fielddef(int nfld, const char * name, int type, int len = 0, int dec = 0);
|
||||||
|
// @cmember Aggiorna il campo. <p desc> e' una token string
|
||||||
|
void update_fielddef(int nfld, TToken_string& desc);
|
||||||
|
// @cmember Aggiorna il campo.
|
||||||
|
void update_fielddef(int nfld, const RecDes & rd, const char * name);
|
||||||
|
// @cmember Aggiunge un campo. <p desc> e' una token string
|
||||||
|
void add_fielddef(TToken_string& desc) { update_fielddef(-1, desc); }
|
||||||
|
// @cmember Aggiunge un campo.
|
||||||
|
void add_fielddef(const char * name, int type, int len = 0, int dec = 0) { update_fielddef(-1, name, type, len, dec); }
|
||||||
|
// @cmember Aggiunge un campo.
|
||||||
|
void add_fielddef(const RecDes & rd, const char * name) { update_fielddef(-1, rd, name); }
|
||||||
// @cmember Stampa il tracciato record sull'output selezionato
|
// @cmember Stampa il tracciato record sull'output selezionato
|
||||||
virtual void print_on(ostream& out) const;
|
virtual void print_on(ostream& out) const;
|
||||||
// @cmember Legge il tracciato record da input selezionato
|
// @cmember Legge il tracciato record da input selezionato
|
||||||
virtual void read_from(istream& in);
|
virtual void read_from(istream& in);
|
||||||
void set_des(TConfig* c = NULL, const char* tab = "") { _des = c; _tab = tab;}
|
void set_des(TConfig* c = NULL, const char* tab = "") { _des = c; _tab = tab;}
|
||||||
|
void set_name(const char * name, int pos = -1);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
// @cmember Duplica il descrittore di file
|
// @cmember Duplica il descrittore di file
|
||||||
virtual TObject* dup() const { return new TTrec(*this);}
|
virtual TObject* dup() const { return new TTrec(*this);}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user