Patch level : 12.0 no-patch

Files correlati     : f9.exe, f90100.sql
Commento            :
- Corretto check tables se esistono gia' dato che c'era gia' un aggiornamento delle tabelle dell'F9 da parte dell'FP
This commit is contained in:
Simone Palacino 2019-09-16 18:10:27 +02:00
parent d471675612
commit dee23524bc
3 changed files with 173 additions and 155 deletions

View File

@ -15,13 +15,14 @@
/*
* - Per aggiornare le tabelle f9 aggiungere nella cartella "sql\f9\" il file sql cosi' fatto:
* f9xxxx.sql dove xxxx e' il numero zero-filled della versione delle tabelle, che INCREMENTA DI DUE COME CON LE PATCH, IMPORTANTE!
* - Aggiornare la definizione qui sotto di F9_SQL_VERSION mettendo la nuova versione.
* - Aggiornare la definizione qui sotto di SQL_VERSION mettendo la nuova versione.
* - Fare patch del file sql e dell'eseguibile f90.exe
* - Lanciare il programma per eseguire l'aggiornamento.
*/
#define TABMOD_SQL_VERSION "S0"
#define F9_SQL_VERSION 100 // Utilizzo questo per controllare la versione attuale delle tabelle e nel caso aggiornarle
#define TABMOD_TABVER "S0" // Campo per la memorizzazione della versione attuale delle tabelle
#define TAB_BASE_VERSION 100 // Versione base delle tabelle
#define SQL_VERSION 100 // Utilizzo questo per controllare la versione attuale delle tabelle e nel caso aggiornarle
SSimple_query& db()
{
@ -966,8 +967,8 @@ bool TF9_app::is_doc_xml(const TLocalisamfile& mov)
if(chiave_paf(doc, hfatt, bfatt))
{
query << "SELECT * FROM PAF0100F WHERE P1_KEYHEADERFATT = '" << hfatt << "' AND P1_KEYBODYFATT = '" << bfatt << "';";
fp_db().sq_set_exec(query);
return fp_db().sq_items() > 0;
db().sq_set_exec(query);
return db().sq_items() > 0;
}
return false;
}
@ -1245,7 +1246,8 @@ void pulisci_mov()
void TF9_app::main_loop()
{
check_table();
if(!check_table())
fatal_box("Controllo tabelle modulo fallito.");
#ifdef DBG // Per sicurezza che non venga inserito in release
//pulisci_mov();
#endif
@ -1270,9 +1272,9 @@ bool TF9_app::create_tables() const
tabmod.put("CODTAB", "VERSION");
char ver[5] = "0000";
sprintf_s(ver, 5, "%04d", 100);
tabmod.put(TABMOD_SQL_VERSION, ver);
tabmod.write(); // todo: controllare
ok &= tabmod.rewrite() == NOERR; // todo: controllare
tabmod.put(TABMOD_TABVER, ver);
tabmod.write(); // todo: controllare
ok &= tabmod.rewrite() == NOERR; // todo: controllare
return ok;
}
@ -1297,15 +1299,16 @@ bool TF9_app::aggiorna_tab_f9(int version) const
string sql;
char ver[5] = "0000";
sprintf_s(ver, 5, "%04d", version);
file << "sql\\f90\\f9" << ver << ".sql";
TString name; name << "f9" << ver << ".sql";
file << "sql\\f90\\" << name;
std::ifstream fin;
fin.open(file);
if(ok &= fin.is_open())
{
while (!fin.eof())
while (!fin.eof() && ok)
{
std::string appo_line; // todo: Controllare che si svuota ad ogni ciclo o aggiungere un erase
std::string appo_line;
std::getline(fin, appo_line);
if (appo_line[0] == '-' && appo_line[1] == '-') // Se è una riga di commento la salto
continue;
@ -1315,12 +1318,17 @@ bool TF9_app::aggiorna_tab_f9(int version) const
if(end != int(std::string::npos))
{
TString query; query << sql.c_str();
ok &= fp_db().sq_set_exec(query);
ok &= fp_db().sq_commit();
ok &= db().sq_set_exec(query);
ok &= db().sq_commit();
sql.erase();
}
}
}
else
{
TString msg; msg << "Impossibile trovare il file di aggiornamento tabelle: " << file;
error_box(msg);
}
return ok;
}
@ -1331,51 +1339,47 @@ bool TF9_app::check_tab_version() const
tabmod.put("MOD", "F9");
tabmod.put("COD", "SQL");
tabmod.put("CODTAB", "VERSION");
const bool exists = tabmod.read() == NOERR;
if(ok &= tabmod.read() == NOERR)
int version = exists ? real(tabmod.get(TABMOD_TABVER)).integer() : TAB_BASE_VERSION - 2;
if(version < SQL_VERSION) // Controllo la versione
{
int version = real(tabmod.get(TABMOD_SQL_VERSION)).integer();
if(version < F9_SQL_VERSION) // Controllo la versione
for(; version < SQL_VERSION; version += 2) // Effettuo le modifiche per ogni avanzamento di versione
{
for(; version <= F9_SQL_VERSION; version += 2) // Effettuo le modifiche per ogni avanzamento di versione
if (ok &= aggiorna_tab_f9(version + 2))
{
if (ok &= aggiorna_tab_f9(version + 2))
char ver[5] = "0000";
sprintf_s(ver, 5, "%04d", version + 2);
tabmod.put(TABMOD_TABVER, ver); // Avanzo il contatore della versione in TABMOD
if (!exists)
{
char ver[5] = "0000";
sprintf_s(ver, 5, "%04d", version + 2);
tabmod.put(TABMOD_SQL_VERSION, ver); // Avanzo il contatore della versione in TABMOD
tabmod.rewrite();
tabmod.zero();
tabmod.put("MOD", "F9");
tabmod.put("COD", "SQL");
tabmod.put("CODTAB", "VERSION");
tabmod.put(TABMOD_TABVER, ver); // Avanzo il contatore della versione in TABMOD
tabmod.write();
}
else
break;
tabmod.rewrite();
}
else
break;
}
}
return ok;
}
bool TF9_app::check_table()
bool TF9_app::check_table() const
{
if (!check_tabelle_f9())
{
TString msg;
std::ofstream fout;
fout.open("f9checktaberr.txt");
fout << fp_db().sq_get_text_error(false) << std::endl;
fout.close();
msg << "Errore controllo database F9: creazione tabelle.\n" << fp_db().sq_get_text_error(false);
fatal_box(msg);
return false;
}
// Se il check tabelle va a buon fine controllo la versione delle tabelle
if (!check_tab_version())
{
TString msg;
std::ofstream fout;
fout.open("f9checktaberr.txt");
fout << fp_db().sq_get_text_error(false) << std::endl;
fout << db().sq_get_text_error(false) << std::endl;
fout.close();
msg << "Errore controllo database F9: aggiornamento tabelle.\n" << fp_db().sq_get_text_error(false);
msg << "! Errore controllo database F9: creazione/aggiornamento tabelle.\n" << db().sq_get_text_error() << "\n" << db().sq_get_string_error();
fatal_box(msg);
return false;
}

View File

@ -142,7 +142,7 @@ public:
bool check_tabelle_f9(); // Controllo esistenza delle tabelle e in caso le crea
bool aggiorna_tab_f9(int version) const; // Aggiorna modifiche alle tabelle F9 come descritto in cima al file .cpp
bool check_tab_version() const; // Controllo della versione e in caso aggiorna le tabelle
bool check_table();
bool check_table() const;
TF9_app() : _estr_msk(nullptr), _msk(nullptr), _mov_escl("", '|'), _tot_movs(0), _ambiente(""), _addr_doc(""),
_last_estr_p(0), _last_estr_d(0), _tipodoc_escl('A'), _flagprov_escl('P') { }
};

View File

@ -1,123 +1,137 @@
CREATE TABLE F9DRD00K (
F9RCSOC CHAR(10) NOT NULL DEFAULT '' ,
F9RIDES CHAR(18) NOT NULL DEFAULT '' ,
F9RFPDE CHAR(1) NOT NULL DEFAULT '' ,
F9RDDES CHAR(256) NOT NULL DEFAULT '' ,
F9RFTDC CHAR(1) NOT NULL DEFAULT '' ,
F9RUESD DATE NOT NULL DEFAULT getdate() ,
F9RUESA DATE NOT NULL DEFAULT getdate() ,
F9RUTEE CHAR(10) NOT NULL DEFAULT '' ,
F9RUHES DATETIME NOT NULL DEFAULT getdate() ,
F9RIDAS CHAR(2) NOT NULL DEFAULT '' ,
F9RIDWA CHAR(2) NOT NULL DEFAULT '' ,
F9RDSIW CHAR(256) NOT NULL DEFAULT '' ,
F9RUHIM DATETIME NOT NULL DEFAULT getdate() ,
F9RIISO CHAR(1) NOT NULL DEFAULT '' ,
F9RUHIS DATETIME NOT NULL DEFAULT getdate() ,
F9RSINW CHAR(2) NOT NULL DEFAULT '' ,
F9RDSIN CHAR(256) NOT NULL DEFAULT '' ,
F9RPCDC CHAR(256) NOT NULL DEFAULT '' ,
PRIMARY KEY( F9RCSOC , F9RIDES , F9RFPDE ) ) ;
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'F9DRD00K')
CREATE TABLE F9DRD00K (
F9RCSOC CHAR(10) NOT NULL DEFAULT '',
F9RIDES CHAR(18) NOT NULL DEFAULT '',
F9RFPDE CHAR(1) NOT NULL DEFAULT '',
F9RDDES CHAR(256) NOT NULL DEFAULT '',
F9RFTDC CHAR(1) NOT NULL DEFAULT '',
F9RUESD DATE NOT NULL DEFAULT getdate(),
F9RUESA DATE NOT NULL DEFAULT getdate(),
F9RUTEE CHAR(10) NOT NULL DEFAULT '',
F9RUHES DATETIME NOT NULL DEFAULT getdate(),
F9RIDAS CHAR(2) NOT NULL DEFAULT '',
F9RIDWA CHAR(2) NOT NULL DEFAULT '',
F9RDSIW CHAR(256) NOT NULL DEFAULT '',
F9RUHIM DATETIME NOT NULL DEFAULT getdate(),
F9RIISO CHAR(1) NOT NULL DEFAULT '',
F9RUHIS DATETIME NOT NULL DEFAULT getdate(),
F9RSINW CHAR(2) NOT NULL DEFAULT '',
F9RDSIN CHAR(256) NOT NULL DEFAULT '',
F9RPCDC CHAR(256) NOT NULL DEFAULT '',
PRIMARY KEY( F9RCSOC,F9RIDES,F9RFPDE ))
ELSE
SELECT 1 AS EXIST;
CREATE TABLE F9DRT00K (
F9TCSOC CHAR(10) NOT NULL DEFAULT '' ,
F9TCADO CHAR(10) NOT NULL DEFAULT '' ,
F9TDDES CHAR(30) NOT NULL DEFAULT '' ,
F9TCLDC CHAR(10) NOT NULL DEFAULT '' ,
F9TCDD1 CHAR(2) NOT NULL DEFAULT '' ,
F9TCSOS CHAR(6) NOT NULL DEFAULT '' ,
F9TCCAU CHAR(6) NOT NULL DEFAULT '' ,
F9TTCAU CHAR(6) NOT NULL DEFAULT '' ,
F9TTMOV CHAR(6) NOT NULL DEFAULT '' ,
F9TFCEE CHAR(6) NOT NULL DEFAULT '' ,
PRIMARY KEY( F9TCSOC , F9TCADO , F9TCCAU , F9TTCAU , F9TTMOV , F9TFCEE ) ) ;
CREATE TABLE F9IVA00K (
F9ICSOC CHAR(10) NOT NULL DEFAULT '' ,
F9IIDLA CHAR(18) NOT NULL DEFAULT '' ,
F9IFPDE CHAR(1) NOT NULL DEFAULT '' ,
F9IAFES CHAR(4) NOT NULL DEFAULT '' ,
F9IGIVA CHAR(1) NOT NULL DEFAULT '' ,
F9ITPGI CHAR(10) NOT NULL DEFAULT '' ,
F9IDXML CHAR(1) NOT NULL DEFAULT '' ,
F9ITCFO CHAR(1) NOT NULL DEFAULT '' ,
F9ICCFO CHAR(10) NOT NULL DEFAULT '' ,
F9IDRSO CHAR(60) NOT NULL DEFAULT '' ,
F9IIDFI CHAR(30) NOT NULL DEFAULT '' ,
F9IPIVA CHAR(28) NOT NULL DEFAULT '' ,
F9ICFIS CHAR(16) NOT NULL DEFAULT '' ,
F9ICADO CHAR(10) NOT NULL DEFAULT '' ,
F9ICSOS CHAR(6) NOT NULL DEFAULT '' ,
F9INDOC CHAR(20) NOT NULL DEFAULT '' ,
F9IUDOC DATE NOT NULL DEFAULT getdate() ,
F9ISIVA CHAR(10) NOT NULL DEFAULT '' ,
F9ICREG CHAR(6) NOT NULL DEFAULT '' ,
F9INPRI CHAR(20) NOT NULL DEFAULT '' ,
F9IUPRI DATE NOT NULL DEFAULT getdate() ,
F9IFOOA CHAR(10) NOT NULL DEFAULT '' ,
F9ITROT CHAR(6) NOT NULL DEFAULT '' ,
F9INRRO CHAR(20) NOT NULL DEFAULT '' ,
F9IURGO DATE NOT NULL DEFAULT getdate() ,
F9ICLDF CHAR(10) NOT NULL DEFAULT '' ,
F9INMF1 CHAR(100) NOT NULL DEFAULT '' ,
F9ICLDN CHAR(10) NOT NULL DEFAULT '' ,
F9INMF2 CHAR(100) NOT NULL DEFAULT '' ,
F9ICLDA CHAR(10) NOT NULL DEFAULT '' ,
F9INMF3 CHAR(100) NOT NULL DEFAULT '' ,
F9ICLD4 CHAR(10) NOT NULL DEFAULT '' ,
F9INMF4 CHAR(100) NOT NULL DEFAULT '' ,
F9ICLD5 CHAR(10) NOT NULL DEFAULT '' ,
F9INMF5 CHAR(100) NOT NULL DEFAULT '' ,
F9ICLD6 CHAR(10) NOT NULL DEFAULT '' ,
F9INMF6 CHAR(100) NOT NULL DEFAULT '' ,
F9ICLD7 CHAR(10) NOT NULL DEFAULT '' ,
F9INMF7 CHAR(100) NOT NULL DEFAULT '' ,
F9ICLD8 CHAR(10) NOT NULL DEFAULT '' ,
F9INMF8 CHAR(100) NOT NULL DEFAULT '' ,
F9ICLD9 CHAR(10) NOT NULL DEFAULT '' ,
F9INMF9 CHAR(100) NOT NULL DEFAULT '' ,
F9ICL10 CHAR(10) NOT NULL DEFAULT '' ,
F9INM10 CHAR(100) NOT NULL DEFAULT '' ,
F9IUTEE CHAR(10) NOT NULL DEFAULT '' ,
F9IUHEL DATETIME NOT NULL DEFAULT getdate() ,
F9IUHEW DATETIME NOT NULL DEFAULT getdate() ,
F9IDDES CHAR(30) NOT NULL DEFAULT '' ,
F9ITPRT CHAR(2) NOT NULL DEFAULT '' ,
F9IAPRT NUMERIC(4, 0) NOT NULL DEFAULT 0 ,
F9INPRT NUMERIC(10, 0) NOT NULL DEFAULT 0 ,
F9IURIC DATETIME NOT NULL DEFAULT getdate() ,
PRIMARY KEY( F9ICSOC , F9IIDLA , F9IFPDE , F9ISIVA , F9ICREG , F9INPRI , F9IUPRI , F9ITPGI ) ) ;
CREATE TABLE F9PWA00K (
F9PCSOC CHAR(10) NOT NULL DEFAULT '' ,
F9PCDFN CHAR(2) NOT NULL DEFAULT '' ,
F9PCDNT CHAR(2) NOT NULL DEFAULT '' ,
F9PCDA1 CHAR(2) NOT NULL DEFAULT '' ,
F9PCDA2 CHAR(2) NOT NULL DEFAULT '' ,
F9PCDA3 CHAR(2) NOT NULL DEFAULT '' ,
F9PCDA4 CHAR(2) NOT NULL DEFAULT '' ,
F9PCDA5 CHAR(2) NOT NULL DEFAULT '' ,
F9PCDA6 CHAR(2) NOT NULL DEFAULT '' ,
F9PCDA7 CHAR(2) NOT NULL DEFAULT '' ,
F9PCDA8 CHAR(2) NOT NULL DEFAULT '' ,
F9PPCDC CHAR(256) NOT NULL DEFAULT '' ,
PRIMARY KEY( F9PCSOC ) ) ;
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'F9DRT00K')
CREATE TABLE F9DRT00K (
F9TCSOC CHAR(10) NOT NULL DEFAULT '',
F9TCADO CHAR(10) NOT NULL DEFAULT '',
F9TDDES CHAR(30) NOT NULL DEFAULT '',
F9TCLDC CHAR(10) NOT NULL DEFAULT '',
F9TCDD1 CHAR(2) NOT NULL DEFAULT '',
F9TCSOS CHAR(6) NOT NULL DEFAULT '',
F9TCCAU CHAR(6) NOT NULL DEFAULT '',
F9TTCAU CHAR(6) NOT NULL DEFAULT '',
F9TTMOV CHAR(6) NOT NULL DEFAULT '',
F9TFCEE CHAR(6) NOT NULL DEFAULT '',
PRIMARY KEY( F9TCSOC,F9TCADO,F9TCCAU,F9TTCAU,F9TTMOV,F9TFCEE ))
ELSE
SELECT 1 AS EXIST;
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'F9IVA00K')
CREATE TABLE F9IVA00K (
F9ICSOC CHAR(10) NOT NULL DEFAULT '',
F9IIDLA CHAR(18) NOT NULL DEFAULT '',
F9IFPDE CHAR(1) NOT NULL DEFAULT '',
F9IAFES CHAR(4) NOT NULL DEFAULT '',
F9IGIVA CHAR(1) NOT NULL DEFAULT '',
F9ITPGI CHAR(10) NOT NULL DEFAULT '',
F9IDXML CHAR(1) NOT NULL DEFAULT '',
F9ITCFO CHAR(1) NOT NULL DEFAULT '',
F9ICCFO CHAR(10) NOT NULL DEFAULT '',
F9IDRSO CHAR(60) NOT NULL DEFAULT '',
F9IIDFI CHAR(30) NOT NULL DEFAULT '',
F9IPIVA CHAR(28) NOT NULL DEFAULT '',
F9ICFIS CHAR(16) NOT NULL DEFAULT '',
F9ICADO CHAR(10) NOT NULL DEFAULT '',
F9ICSOS CHAR(6) NOT NULL DEFAULT '',
F9INDOC CHAR(20) NOT NULL DEFAULT '',
F9IUDOC DATE NOT NULL DEFAULT getdate(),
F9ISIVA CHAR(10) NOT NULL DEFAULT '',
F9ICREG CHAR(6) NOT NULL DEFAULT '',
F9INPRI CHAR(20) NOT NULL DEFAULT '',
F9IUPRI DATE NOT NULL DEFAULT getdate(),
F9IFOOA CHAR(10) NOT NULL DEFAULT '',
F9ITROT CHAR(6) NOT NULL DEFAULT '',
F9INRRO CHAR(20) NOT NULL DEFAULT '',
F9IURGO DATE NOT NULL DEFAULT getdate(),
F9ICLDF CHAR(10) NOT NULL DEFAULT '',
F9INMF1 CHAR(100) NOT NULL DEFAULT '',
F9ICLDN CHAR(10) NOT NULL DEFAULT '',
F9INMF2 CHAR(100) NOT NULL DEFAULT '',
F9ICLDA CHAR(10) NOT NULL DEFAULT '',
F9INMF3 CHAR(100) NOT NULL DEFAULT '',
F9ICLD4 CHAR(10) NOT NULL DEFAULT '',
F9INMF4 CHAR(100) NOT NULL DEFAULT '',
F9ICLD5 CHAR(10) NOT NULL DEFAULT '',
F9INMF5 CHAR(100) NOT NULL DEFAULT '',
F9ICLD6 CHAR(10) NOT NULL DEFAULT '',
F9INMF6 CHAR(100) NOT NULL DEFAULT '',
F9ICLD7 CHAR(10) NOT NULL DEFAULT '',
F9INMF7 CHAR(100) NOT NULL DEFAULT '',
F9ICLD8 CHAR(10) NOT NULL DEFAULT '',
F9INMF8 CHAR(100) NOT NULL DEFAULT '',
F9ICLD9 CHAR(10) NOT NULL DEFAULT '',
F9INMF9 CHAR(100) NOT NULL DEFAULT '',
F9ICL10 CHAR(10) NOT NULL DEFAULT '',
F9INM10 CHAR(100) NOT NULL DEFAULT '',
F9IUTEE CHAR(10) NOT NULL DEFAULT '',
F9IUHEL DATETIME NOT NULL DEFAULT getdate(),
F9IUHEW DATETIME NOT NULL DEFAULT getdate(),
F9IDDES CHAR(30) NOT NULL DEFAULT '',
F9ITPRT CHAR(2) NOT NULL DEFAULT '',
F9IAPRT NUMERIC(4, 0) NOT NULL DEFAULT 0,
F9INPRT NUMERIC(10, 0) NOT NULL DEFAULT 0,
F9IURIC DATETIME NOT NULL DEFAULT getdate(),
PRIMARY KEY( F9ICSOC,F9IIDLA,F9IFPDE,F9ISIVA,F9ICREG,F9INPRI,F9IUPRI,F9ITPGI ))
ELSE
SELECT 1 AS EXIST;
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'F9PWA00K')
CREATE TABLE F9PWA00K (
F9PCSOC CHAR(10) NOT NULL DEFAULT '',
F9PCDFN CHAR(2) NOT NULL DEFAULT '',
F9PCDNT CHAR(2) NOT NULL DEFAULT '',
F9PCDA1 CHAR(2) NOT NULL DEFAULT '',
F9PCDA2 CHAR(2) NOT NULL DEFAULT '',
F9PCDA3 CHAR(2) NOT NULL DEFAULT '',
F9PCDA4 CHAR(2) NOT NULL DEFAULT '',
F9PCDA5 CHAR(2) NOT NULL DEFAULT '',
F9PCDA6 CHAR(2) NOT NULL DEFAULT '',
F9PCDA7 CHAR(2) NOT NULL DEFAULT '',
F9PCDA8 CHAR(2) NOT NULL DEFAULT '',
F9PPCDC CHAR(256) NOT NULL DEFAULT '',
PRIMARY KEY( F9PCSOC ))
ELSE
SELECT 1 AS EXIST;
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'F9ERROR')
CREATE TABLE F9ERROR(
IDESTR CHAR(18) NOT NULL,
NUMREG NUMERIC(7,0) NOT NULL,
DATAREG DATE NOT NULL,
DATADOC DATE NOT NULL,
CODCAUS VARCHAR(3) NOT NULL,
MESELIQ NUMERIC(2,0),
NUMDOC VARCHAR(50) NOT NULL,
IDESTR CHAR(18) NOT NULL,
NUMREG NUMERIC(7,0) NOT NULL,
DATAREG DATE NOT NULL,
DATADOC DATE NOT NULL,
CODCAUS VARCHAR(3) NOT NULL,
MESELIQ NUMERIC(2,0),
NUMDOC VARCHAR(50) NOT NULL,
IMPTOTDOC NUMERIC(18,3) NOT NULL,
FORN NUMERIC(6,0) NOT NULL,
RAGSOC VARCHAR(50),
PROTIVA VARCHAR(10) NOT NULL,
PROTIVA VARCHAR(10) NOT NULL,
DESCR VARCHAR(50),
ESCLUDI CHAR(1),
ESCLUSO CHAR(2),
DESCRERR VARCHAR(110),
PRIMARY KEY(IDESTR, NUMREG)
);
PRIMARY KEY(IDESTR, NUMREG))
ELSE
SELECT 1 AS EXIST;