Patch level : 12.0 420
Files correlati : Commento : Spostata classe per gestione db nel file principale, c'è qualcosa che non la fa funzionare al momento lasciamo tutto così git-svn-id: svn://10.65.10.50/branches/R_10_00@23935 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
519ceb1411
commit
8d64ad8819
@ -252,6 +252,228 @@ bool saveRec(TToken_string row, bool esportato)
|
|||||||
return rCust.write_rewrite(trasfatt) == NOERR;
|
return rCust.write_rewrite(trasfatt) == NOERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// TTrFa_record
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// Imposta il valore di un campo variant
|
||||||
|
void TTrFa_record::set(const char* fld, const TVariant& var)
|
||||||
|
{
|
||||||
|
CHECK(fld && *fld, "Null field name");
|
||||||
|
|
||||||
|
if (var.is_null())
|
||||||
|
{
|
||||||
|
_fields.remove(fld);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TVariant* obj = (TVariant*)_fields.objptr(fld);
|
||||||
|
if (obj != NULL)
|
||||||
|
*obj = var;
|
||||||
|
else
|
||||||
|
_fields.add(fld, new TVariant(var));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Imposta il valore di un campo intero
|
||||||
|
void TTrFa_record::set(const char* fld, long val)
|
||||||
|
{
|
||||||
|
const TVariant var(val);
|
||||||
|
set(fld, var);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Imposta il valore di un campo stringa
|
||||||
|
void TTrFa_record::set(const char* fld, const char* val)
|
||||||
|
{
|
||||||
|
if (val == NULL)
|
||||||
|
set(fld, NULL_VARIANT);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const TVariant var(val);
|
||||||
|
set(fld, var);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Imposta il valore di un campo stringa
|
||||||
|
void TTrFa_record::set(const char* fld, const TString& val)
|
||||||
|
{
|
||||||
|
const TVariant var(val);
|
||||||
|
set(fld, var);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Imposta il valore di un campo numerico
|
||||||
|
void TTrFa_record::set(const char* fld, const real& val)
|
||||||
|
{
|
||||||
|
const TVariant var(val);
|
||||||
|
set(fld, var);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Imposta il valore di un campo data in formato ISO
|
||||||
|
void TTrFa_record::set(const char* fld, const TDate& val)
|
||||||
|
{
|
||||||
|
if (val.ok())
|
||||||
|
{
|
||||||
|
const TVariant var(val);
|
||||||
|
set(fld, var);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
set(fld, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Imposta il valore di un campo booleano
|
||||||
|
void TTrFa_record::set(const char* fld, bool var)
|
||||||
|
{
|
||||||
|
set(fld, var ? "SI" : "NO");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Legge il valore di un campo variant
|
||||||
|
const TVariant& TTrFa_record::get(const char* fld) const
|
||||||
|
{
|
||||||
|
const TVariant* var = (const TVariant*)_fields.objptr(fld);
|
||||||
|
return var ? *var : NULL_VARIANT;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Converte un variant in una stringa valida per SQLite
|
||||||
|
const TString& TTrFa_record::var2str(const TString& fldname, const TVariant& var) const
|
||||||
|
{
|
||||||
|
const TFieldtypes vt = var.type();
|
||||||
|
if (vt == _realfld)
|
||||||
|
{
|
||||||
|
const TCurrency v(var.as_real(), "", ZERO, fldname.find("IMPONIBILE")>0 || fldname.find("IMPOSTA")>0);
|
||||||
|
TString& tmp = get_tmp_string();
|
||||||
|
tmp << '\'' << v.string() << '\'';
|
||||||
|
tmp.replace(',','.');
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
if (vt == _datefld)
|
||||||
|
{
|
||||||
|
TString& tmp = get_tmp_string();
|
||||||
|
tmp << '\'' << var.as_date().string(full, '-', full, full, amg_date) << '\'';
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TString& str = var.as_string();
|
||||||
|
|
||||||
|
bool apici = vt == _alfafld;
|
||||||
|
if (apici && str[0] != '0' && real::is_natural(str))
|
||||||
|
apici = false;
|
||||||
|
|
||||||
|
if (!apici)
|
||||||
|
return str;
|
||||||
|
|
||||||
|
TString& tmp = get_tmp_string();
|
||||||
|
tmp = str;
|
||||||
|
for (int a = str.rfind('\''); a >= 0; a--)
|
||||||
|
{
|
||||||
|
if (tmp[a] == '\'')
|
||||||
|
tmp.insert("'", a);
|
||||||
|
}
|
||||||
|
tmp.insert("'", 0);
|
||||||
|
tmp << '\'';
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Elimina il record in base ai campi chiave
|
||||||
|
bool TTrFa_record::remove()
|
||||||
|
{
|
||||||
|
TString256 query;
|
||||||
|
query << "DELETE FROM " << _table << " WHERE ";
|
||||||
|
int nkf = 0;
|
||||||
|
FOR_EACH_TOKEN(_key, fld)
|
||||||
|
{
|
||||||
|
const TVariant& var = get(fld);
|
||||||
|
if (!var.is_null())
|
||||||
|
{
|
||||||
|
if (nkf++ > 0)
|
||||||
|
query << " AND ";
|
||||||
|
query << fld << '=' << var2str(fld, var) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CHECKS(nkf >= 2, "Can't remove partial key on table ", (const char*)_table);
|
||||||
|
query << ';';
|
||||||
|
return xvt_sql_execute(_db, query, NULL, 0L) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Callback per la sottostante funzione search()
|
||||||
|
static int tff_search_record(void* jolly, int cols, char** values, char** names)
|
||||||
|
{
|
||||||
|
TTrFa_record& rec = *(TTrFa_record*)jolly;
|
||||||
|
for (int i = 0; i < cols; i++)
|
||||||
|
rec.set(names[i], values[i]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Carica un record in base ai campi chiave
|
||||||
|
bool TTrFa_record::search()
|
||||||
|
{
|
||||||
|
CHECKS(_fields.items() >= _key.items(), "Can't search partial key on table ", _table);
|
||||||
|
TString256 query;
|
||||||
|
query << "SELECT * FROM " << _table << " WHERE ";
|
||||||
|
FOR_EACH_TOKEN(_key, fld)
|
||||||
|
{
|
||||||
|
const TVariant& var = get(fld);
|
||||||
|
if (!var.is_null())
|
||||||
|
query << fld << '=' << var2str(fld, var) << " AND ";
|
||||||
|
}
|
||||||
|
query.rtrim(5);
|
||||||
|
query << ';';
|
||||||
|
return xvt_sql_execute(_db, query, tff_search_record, this) == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Carica un record in base ad un massimo di 3 campi chiave
|
||||||
|
bool TTrFa_record::search(const char* k1, const char* k2, const char* k3)
|
||||||
|
{
|
||||||
|
_fields.destroy();
|
||||||
|
|
||||||
|
set(_key.get(0), k1);
|
||||||
|
if (k2 && *k2)
|
||||||
|
set(_key.get(1), k2);
|
||||||
|
if (k3 && *k3)
|
||||||
|
set(_key.get(2), k3);
|
||||||
|
|
||||||
|
return search();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aggiunge un record al db
|
||||||
|
bool TTrFa_record::insert()
|
||||||
|
{
|
||||||
|
CHECKS(_fields.items() > _key.items(), "Can't insert empty record on table ", _table);
|
||||||
|
|
||||||
|
TString query, values;
|
||||||
|
query << "INSERT INTO " << _table << "\n(";
|
||||||
|
FOR_EACH_ASSOC_OBJECT(_fields, obj, fld, itm)
|
||||||
|
{
|
||||||
|
const TVariant& var = get(fld);
|
||||||
|
if (!var.is_null())
|
||||||
|
{
|
||||||
|
query << fld << ',';
|
||||||
|
values << var2str(fld, var) << ',';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
query.rtrim(1); values.rtrim(1);
|
||||||
|
query << ")\nVALUES (" << values << ");";
|
||||||
|
return xvt_sql_execute(_db, query, NULL, 0L) == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Crea un record della tabella data ed imposta i nomi dei campi chiave
|
||||||
|
TTrFa_record::TTrFa_record(const char* table) : _table(table), _key(15, ',')
|
||||||
|
{
|
||||||
|
_key = ini_get_string("./tff.ini", table, "INDEX_1");
|
||||||
|
if (_key.empty())
|
||||||
|
{
|
||||||
|
// Cerco di costruire i nomi della chiave cercando la K, come in P1_KEYHEADERFATT
|
||||||
|
TConfig cfg("tff.ini", table);
|
||||||
|
TAssoc_array& fields = cfg.list_variables();
|
||||||
|
FOR_EACH_ASSOC_STRING(fields, obj, key, str)
|
||||||
|
{
|
||||||
|
if (key[3] == 'K')
|
||||||
|
_key.add(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CHECKS(!_key.empty_items(), "Invalid primary key for table ", table);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////
|
||||||
// TTrFa_app
|
// TTrFa_app
|
||||||
/////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -489,6 +711,7 @@ bool TTrFa_app::send(TTrFa_mask* msk)
|
|||||||
{
|
{
|
||||||
log(-1, "WTF!?");
|
log(-1, "WTF!?");
|
||||||
xvt_sql_rollback(_db);
|
xvt_sql_rollback(_db);
|
||||||
|
message_box("Esportazione fallita");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(xvt_sql_commit(_db))
|
if(xvt_sql_commit(_db))
|
||||||
@ -575,7 +798,7 @@ bool TTrFa_app::tff0100(TSheet_field& sheet)
|
|||||||
cli = true;
|
cli = true;
|
||||||
else
|
else
|
||||||
fo = true;
|
fo = true;
|
||||||
if(cli & fo) break;
|
if(cli || fo) break;
|
||||||
}
|
}
|
||||||
// Metto qua il numero di telefono per dopo
|
// Metto qua il numero di telefono per dopo
|
||||||
TString80 tel; tel << firm.get("PTEL") << firm.get("TEL");
|
TString80 tel; tel << firm.get("PTEL") << firm.get("TEL");
|
||||||
@ -606,7 +829,7 @@ bool TTrFa_app::tff0100(TSheet_field& sheet)
|
|||||||
|
|
||||||
dte.set("P1_KEYPRGINVIO", DTE_PROVV);
|
dte.set("P1_KEYPRGINVIO", DTE_PROVV);
|
||||||
dte.set("P1_TRASMITTPAESE", paese);
|
dte.set("P1_TRASMITTPAESE", paese);
|
||||||
dte.set("P1_TRASMITTCOD", _cofi);
|
dte.set("P1_TRASMITTCOD", "");
|
||||||
dte.set("P1_TIPOINVIO", "DTE");
|
dte.set("P1_TIPOINVIO", "DTE");
|
||||||
dte.set("P1_TELEFONO", tel);
|
dte.set("P1_TELEFONO", tel);
|
||||||
dte.set("P1_MAIL", firm.get("MAIL"));
|
dte.set("P1_MAIL", firm.get("MAIL"));
|
||||||
@ -642,7 +865,7 @@ bool TTrFa_app::tff0100(TSheet_field& sheet)
|
|||||||
|
|
||||||
dtr.set("P1_KEYPRGINVIO", DTR_PROVV);
|
dtr.set("P1_KEYPRGINVIO", DTR_PROVV);
|
||||||
dtr.set("P1_TRASMITTPAESE", paese);
|
dtr.set("P1_TRASMITTPAESE", paese);
|
||||||
dtr.set("P1_TRASMITTCOD", _cofi);
|
dtr.set("P1_TRASMITTCOD", "");
|
||||||
dtr.set("P1_TIPOINVIO", "DTR");
|
dtr.set("P1_TIPOINVIO", "DTR");
|
||||||
dtr.set("P1_TELEFONO", tel);
|
dtr.set("P1_TELEFONO", tel);
|
||||||
dtr.set("P1_MAIL", firm.get("MAIL"));
|
dtr.set("P1_MAIL", firm.get("MAIL"));
|
||||||
@ -731,7 +954,7 @@ bool TTrFa_app::tff0300(TString key, TRectype r_ana)
|
|||||||
// Per il nome e cognome non mi faccio gli stessi problemi con i cli/fo in quanto stiamo parlando di cose "nuove"
|
// Per il nome e cognome non mi faccio gli stessi problemi con i cli/fo in quanto stiamo parlando di cose "nuove"
|
||||||
// Se il cliente ha messo nome e cognome insieme può bruciare nelle fiamme dei controlli dell'agenzia delle entrate
|
// Se il cliente ha messo nome e cognome insieme può bruciare nelle fiamme dei controlli dell'agenzia delle entrate
|
||||||
TString paiv = rfso.partita_IVA(), ragsoc = rfso.ragione_sociale(), nom = rfso.nome(), cog = rfso.cognome();
|
TString paiv = rfso.partita_IVA(), ragsoc = rfso.ragione_sociale(), nom = rfso.nome(), cog = rfso.cognome();
|
||||||
|
|
||||||
TTrFa_record tff0300f("TFF0300F");
|
TTrFa_record tff0300f("TFF0300F");
|
||||||
tff0300f.set("P3_KEYPRGINVIO", key);
|
tff0300f.set("P3_KEYPRGINVIO", key);
|
||||||
tff0300f.set("P3_FISCIVAPAESE", rfso.stato_residenzaISO());
|
tff0300f.set("P3_FISCIVAPAESE", rfso.stato_residenzaISO());
|
||||||
|
@ -2,227 +2,6 @@
|
|||||||
|
|
||||||
#include "tf0100b.h"
|
#include "tf0100b.h"
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// TTrFa_record
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
// Imposta il valore di un campo variant
|
|
||||||
void TTrFa_record::set(const char* fld, const TVariant& var)
|
|
||||||
{
|
|
||||||
CHECK(fld && *fld, "Null field name");
|
|
||||||
|
|
||||||
if (var.is_null())
|
|
||||||
{
|
|
||||||
_fields.remove(fld);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TVariant* obj = (TVariant*)_fields.objptr(fld);
|
|
||||||
if (obj != NULL)
|
|
||||||
*obj = var;
|
|
||||||
else
|
|
||||||
_fields.add(fld, new TVariant(var));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Imposta il valore di un campo intero
|
|
||||||
void TTrFa_record::set(const char* fld, long val)
|
|
||||||
{
|
|
||||||
const TVariant var(val);
|
|
||||||
set(fld, var);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Imposta il valore di un campo stringa
|
|
||||||
void TTrFa_record::set(const char* fld, const char* val)
|
|
||||||
{
|
|
||||||
if (val == NULL)
|
|
||||||
set(fld, NULL_VARIANT);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
const TVariant var(val);
|
|
||||||
set(fld, var);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Imposta il valore di un campo stringa
|
|
||||||
void TTrFa_record::set(const char* fld, const TString& val)
|
|
||||||
{
|
|
||||||
const TVariant var(val);
|
|
||||||
set(fld, var);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Imposta il valore di un campo numerico
|
|
||||||
void TTrFa_record::set(const char* fld, const real& val)
|
|
||||||
{
|
|
||||||
const TVariant var(val);
|
|
||||||
set(fld, var);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Imposta il valore di un campo data in formato ISO
|
|
||||||
void TTrFa_record::set(const char* fld, const TDate& val)
|
|
||||||
{
|
|
||||||
if (val.ok())
|
|
||||||
{
|
|
||||||
const TVariant var(val);
|
|
||||||
set(fld, var);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
set(fld, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Imposta il valore di un campo booleano
|
|
||||||
void TTrFa_record::set(const char* fld, bool var)
|
|
||||||
{
|
|
||||||
set(fld, var ? "SI" : "NO");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Legge il valore di un campo variant
|
|
||||||
const TVariant& TTrFa_record::get(const char* fld) const
|
|
||||||
{
|
|
||||||
const TVariant* var = (const TVariant*)_fields.objptr(fld);
|
|
||||||
return var ? *var : NULL_VARIANT;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Converte un variant in una stringa valida per SQLite
|
|
||||||
const TString& TTrFa_record::var2str(const TString& fldname, const TVariant& var) const
|
|
||||||
{
|
|
||||||
const TFieldtypes vt = var.type();
|
|
||||||
if (vt == _realfld)
|
|
||||||
{
|
|
||||||
const TCurrency v(var.as_real(), "", ZERO, fldname.find("IMPONIBILE")>0 || fldname.find("IMPOSTA")>0);
|
|
||||||
TString& tmp = get_tmp_string();
|
|
||||||
tmp << '\'' << v.string() << '\'';
|
|
||||||
tmp.replace(',','.');
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
if (vt == _datefld)
|
|
||||||
{
|
|
||||||
TString& tmp = get_tmp_string();
|
|
||||||
tmp << '\'' << var.as_date().string(full, '-', full, full, amg_date) << '\'';
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
const TString& str = var.as_string();
|
|
||||||
|
|
||||||
bool apici = vt == _alfafld;
|
|
||||||
if (apici && str[0] != '0' && real::is_natural(str))
|
|
||||||
apici = false;
|
|
||||||
|
|
||||||
if (!apici)
|
|
||||||
return str;
|
|
||||||
|
|
||||||
TString& tmp = get_tmp_string();
|
|
||||||
tmp = str;
|
|
||||||
for (int a = str.rfind('\''); a >= 0; a--)
|
|
||||||
{
|
|
||||||
if (tmp[a] == '\'')
|
|
||||||
tmp.insert("'", a);
|
|
||||||
}
|
|
||||||
tmp.insert("'", 0);
|
|
||||||
tmp << '\'';
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Elimina il record in base ai campi chiave
|
|
||||||
bool TTrFa_record::remove()
|
|
||||||
{
|
|
||||||
TString256 query;
|
|
||||||
query << "DELETE FROM " << _table << " WHERE ";
|
|
||||||
int nkf = 0;
|
|
||||||
FOR_EACH_TOKEN(_key, fld)
|
|
||||||
{
|
|
||||||
const TVariant& var = get(fld);
|
|
||||||
if (!var.is_null())
|
|
||||||
{
|
|
||||||
if (nkf++ > 0)
|
|
||||||
query << " AND ";
|
|
||||||
query << fld << '=' << var2str(fld, var) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
CHECKS(nkf >= 2, "Can't remove partial key on table ", (const char*)_table);
|
|
||||||
query << ';';
|
|
||||||
return xvt_sql_execute(_db, query, NULL, 0L) > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Callback per la sottostante funzione search()
|
|
||||||
static int tff_search_record(void* jolly, int cols, char** values, char** names)
|
|
||||||
{
|
|
||||||
TTrFa_record& rec = *(TTrFa_record*)jolly;
|
|
||||||
for (int i = 0; i < cols; i++)
|
|
||||||
rec.set(names[i], values[i]);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Carica un record in base ai campi chiave
|
|
||||||
bool TTrFa_record::search()
|
|
||||||
{
|
|
||||||
CHECKS(_fields.items() >= _key.items(), "Can't search partial key on table ", _table);
|
|
||||||
TString256 query;
|
|
||||||
query << "SELECT * FROM " << _table << " WHERE ";
|
|
||||||
FOR_EACH_TOKEN(_key, fld)
|
|
||||||
{
|
|
||||||
const TVariant& var = get(fld);
|
|
||||||
if (!var.is_null())
|
|
||||||
query << fld << '=' << var2str(fld, var) << " AND ";
|
|
||||||
}
|
|
||||||
query.rtrim(5);
|
|
||||||
query << ';';
|
|
||||||
return xvt_sql_execute(_db, query, tff_search_record, this) == 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Carica un record in base ad un massimo di 3 campi chiave
|
|
||||||
bool TTrFa_record::search(const char* k1, const char* k2, const char* k3)
|
|
||||||
{
|
|
||||||
_fields.destroy();
|
|
||||||
|
|
||||||
set(_key.get(0), k1);
|
|
||||||
if (k2 && *k2)
|
|
||||||
set(_key.get(1), k2);
|
|
||||||
if (k3 && *k3)
|
|
||||||
set(_key.get(2), k3);
|
|
||||||
|
|
||||||
return search();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Aggiunge un record al db
|
|
||||||
bool TTrFa_record::insert()
|
|
||||||
{
|
|
||||||
CHECKS(_fields.items() > _key.items(), "Can't insert empty record on table ", _table);
|
|
||||||
|
|
||||||
TString query, values;
|
|
||||||
query << "INSERT INTO " << _table << "\n(";
|
|
||||||
FOR_EACH_ASSOC_OBJECT(_fields, obj, fld, itm)
|
|
||||||
{
|
|
||||||
const TVariant& var = get(fld);
|
|
||||||
if (!var.is_null())
|
|
||||||
{
|
|
||||||
query << fld << ',';
|
|
||||||
values << var2str(fld, var) << ',';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
query.rtrim(1); values.rtrim(1);
|
|
||||||
query << ")\nVALUES (" << values << ");";
|
|
||||||
return xvt_sql_execute(_db, query, NULL, 0L) == 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Crea un record della tabella data ed imposta i nomi dei campi chiave
|
|
||||||
TTrFa_record::TTrFa_record(const char* table) : _table(table), _key(15, ',')
|
|
||||||
{
|
|
||||||
_key = ini_get_string("./tff.ini", table, "INDEX_1");
|
|
||||||
if (_key.empty())
|
|
||||||
{
|
|
||||||
// Cerco di costruire i nomi della chiave cercando la K, come in P1_KEYHEADERFATT
|
|
||||||
TConfig cfg("tff.ini", table);
|
|
||||||
TAssoc_array& fields = cfg.list_variables();
|
|
||||||
FOR_EACH_ASSOC_STRING(fields, obj, key, str)
|
|
||||||
{
|
|
||||||
if (key[3] == 'K')
|
|
||||||
_key.add(key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
CHECKS(!_key.empty_items(), "Invalid primary key for table ", table);
|
|
||||||
}
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////
|
||||||
// TTrFa_cursors
|
// TTrFa_cursors
|
||||||
/////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Loading…
x
Reference in New Issue
Block a user