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);
|
||||
}
|
||||
|
||||
// riimplementare nella 13
|
||||
|
||||
void TTrec::update_fielddef (int nfld, TToken_string& s)
|
||||
{
|
||||
RecFieldDes& rfd = _rec.Fd[nfld];
|
||||
@ -655,6 +657,59 @@ void TTrec::update_fielddef (int nfld, TToken_string& s)
|
||||
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)
|
||||
{
|
||||
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
|
||||
{
|
||||
const int n = num();
|
||||
@ -779,5 +884,14 @@ void TTrec::read_from(istream & in)
|
||||
_des = NULL;
|
||||
_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
|
||||
|
@ -230,15 +230,33 @@ public:
|
||||
int len() const;
|
||||
|
||||
#ifndef FOXPRO
|
||||
// @cmember Aggiorna la chiave. <p desc> e' una token string
|
||||
void update_keydef(int key, TToken_string& desc);
|
||||
// @cmember Aggiorna il campo. <p desc> e' una token string
|
||||
void update_fielddef(int nfld, TToken_string& desc);
|
||||
// @cmember Aggiorna la chiave. <p desc> e' una token string
|
||||
void update_keydef(int key, const char * e, const bool dup);
|
||||
// @cmember Aggiorna la chiave. <p desc> e' una token string
|
||||
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
|
||||
virtual void print_on(ostream& out) const;
|
||||
// @cmember Legge il tracciato record da input selezionato
|
||||
virtual void read_from(istream& in);
|
||||
void set_des(TConfig* c = NULL, const char* tab = "") { _des = c; _tab = tab;}
|
||||
void set_name(const char * name, int pos = -1);
|
||||
|
||||
#endif
|
||||
// @cmember Duplica il descrittore di file
|
||||
virtual TObject* dup() const { return new TTrec(*this);}
|
||||
|
Loading…
x
Reference in New Issue
Block a user