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: * - 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! * 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 * - Fare patch del file sql e dell'eseguibile f90.exe
* - Lanciare il programma per eseguire l'aggiornamento. * - Lanciare il programma per eseguire l'aggiornamento.
*/ */
#define TABMOD_SQL_VERSION "S0" #define TABMOD_TABVER "S0" // Campo per la memorizzazione della versione attuale delle tabelle
#define F9_SQL_VERSION 100 // Utilizzo questo per controllare la versione attuale delle tabelle e nel caso aggiornarle #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() SSimple_query& db()
{ {
@ -966,8 +967,8 @@ bool TF9_app::is_doc_xml(const TLocalisamfile& mov)
if(chiave_paf(doc, hfatt, bfatt)) if(chiave_paf(doc, hfatt, bfatt))
{ {
query << "SELECT * FROM PAF0100F WHERE P1_KEYHEADERFATT = '" << hfatt << "' AND P1_KEYBODYFATT = '" << bfatt << "';"; query << "SELECT * FROM PAF0100F WHERE P1_KEYHEADERFATT = '" << hfatt << "' AND P1_KEYBODYFATT = '" << bfatt << "';";
fp_db().sq_set_exec(query); db().sq_set_exec(query);
return fp_db().sq_items() > 0; return db().sq_items() > 0;
} }
return false; return false;
} }
@ -1245,7 +1246,8 @@ void pulisci_mov()
void TF9_app::main_loop() 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 #ifdef DBG // Per sicurezza che non venga inserito in release
//pulisci_mov(); //pulisci_mov();
#endif #endif
@ -1270,7 +1272,7 @@ bool TF9_app::create_tables() const
tabmod.put("CODTAB", "VERSION"); tabmod.put("CODTAB", "VERSION");
char ver[5] = "0000"; char ver[5] = "0000";
sprintf_s(ver, 5, "%04d", 100); sprintf_s(ver, 5, "%04d", 100);
tabmod.put(TABMOD_SQL_VERSION, ver); tabmod.put(TABMOD_TABVER, ver);
tabmod.write(); // todo: controllare tabmod.write(); // todo: controllare
ok &= tabmod.rewrite() == NOERR; // todo: controllare ok &= tabmod.rewrite() == NOERR; // todo: controllare
return ok; return ok;
@ -1297,15 +1299,16 @@ bool TF9_app::aggiorna_tab_f9(int version) const
string sql; string sql;
char ver[5] = "0000"; char ver[5] = "0000";
sprintf_s(ver, 5, "%04d", version); 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; std::ifstream fin;
fin.open(file); fin.open(file);
if(ok &= fin.is_open()) 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); std::getline(fin, appo_line);
if (appo_line[0] == '-' && appo_line[1] == '-') // Se è una riga di commento la salto if (appo_line[0] == '-' && appo_line[1] == '-') // Se è una riga di commento la salto
continue; continue;
@ -1315,12 +1318,17 @@ bool TF9_app::aggiorna_tab_f9(int version) const
if(end != int(std::string::npos)) if(end != int(std::string::npos))
{ {
TString query; query << sql.c_str(); TString query; query << sql.c_str();
ok &= fp_db().sq_set_exec(query); ok &= db().sq_set_exec(query);
ok &= fp_db().sq_commit(); ok &= db().sq_commit();
sql.erase(); sql.erase();
} }
} }
} }
else
{
TString msg; msg << "Impossibile trovare il file di aggiornamento tabelle: " << file;
error_box(msg);
}
return ok; return ok;
} }
@ -1331,51 +1339,47 @@ bool TF9_app::check_tab_version() const
tabmod.put("MOD", "F9"); tabmod.put("MOD", "F9");
tabmod.put("COD", "SQL"); tabmod.put("COD", "SQL");
tabmod.put("CODTAB", "VERSION"); 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(); for(; version < SQL_VERSION; version += 2) // Effettuo le modifiche per ogni avanzamento di versione
if(version < F9_SQL_VERSION) // Controllo la 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"; char ver[5] = "0000";
sprintf_s(ver, 5, "%04d", version + 2); sprintf_s(ver, 5, "%04d", version + 2);
tabmod.put(TABMOD_SQL_VERSION, ver); // Avanzo il contatore della versione in TABMOD tabmod.put(TABMOD_TABVER, ver); // Avanzo il contatore della versione in TABMOD
if (!exists)
{
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();
}
tabmod.rewrite(); tabmod.rewrite();
} }
else else
break; break;
} }
} }
}
return ok; 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()) if (!check_tab_version())
{ {
TString msg; TString msg;
std::ofstream fout; std::ofstream fout;
fout.open("f9checktaberr.txt"); 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(); 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); fatal_box(msg);
return false; return false;
} }

View File

@ -142,7 +142,7 @@ public:
bool check_tabelle_f9(); // Controllo esistenza delle tabelle e in caso le crea 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 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_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(""), 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') { } _last_estr_p(0), _last_estr_d(0), _tipodoc_escl('A'), _flagprov_escl('P') { }
}; };

View File

@ -1,3 +1,4 @@
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'F9DRD00K')
CREATE TABLE F9DRD00K ( CREATE TABLE F9DRD00K (
F9RCSOC CHAR(10) NOT NULL DEFAULT '', F9RCSOC CHAR(10) NOT NULL DEFAULT '',
F9RIDES CHAR(18) NOT NULL DEFAULT '', F9RIDES CHAR(18) NOT NULL DEFAULT '',
@ -17,8 +18,11 @@ CREATE TABLE F9DRD00K (
F9RSINW CHAR(2) NOT NULL DEFAULT '', F9RSINW CHAR(2) NOT NULL DEFAULT '',
F9RDSIN CHAR(256) NOT NULL DEFAULT '', F9RDSIN CHAR(256) NOT NULL DEFAULT '',
F9RPCDC CHAR(256) NOT NULL DEFAULT '', F9RPCDC CHAR(256) NOT NULL DEFAULT '',
PRIMARY KEY( F9RCSOC , F9RIDES , F9RFPDE ) ) ; PRIMARY KEY( F9RCSOC,F9RIDES,F9RFPDE ))
ELSE
SELECT 1 AS EXIST;
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'F9DRT00K')
CREATE TABLE F9DRT00K ( CREATE TABLE F9DRT00K (
F9TCSOC CHAR(10) NOT NULL DEFAULT '', F9TCSOC CHAR(10) NOT NULL DEFAULT '',
F9TCADO CHAR(10) NOT NULL DEFAULT '', F9TCADO CHAR(10) NOT NULL DEFAULT '',
@ -30,8 +34,11 @@ CREATE TABLE F9DRT00K (
F9TTCAU CHAR(6) NOT NULL DEFAULT '', F9TTCAU CHAR(6) NOT NULL DEFAULT '',
F9TTMOV CHAR(6) NOT NULL DEFAULT '', F9TTMOV CHAR(6) NOT NULL DEFAULT '',
F9TFCEE CHAR(6) NOT NULL DEFAULT '', F9TFCEE CHAR(6) NOT NULL DEFAULT '',
PRIMARY KEY( F9TCSOC , F9TCADO , F9TCCAU , F9TTCAU , F9TTMOV , F9TFCEE ) ) ; 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 ( CREATE TABLE F9IVA00K (
F9ICSOC CHAR(10) NOT NULL DEFAULT '', F9ICSOC CHAR(10) NOT NULL DEFAULT '',
F9IIDLA CHAR(18) NOT NULL DEFAULT '', F9IIDLA CHAR(18) NOT NULL DEFAULT '',
@ -86,8 +93,11 @@ CREATE TABLE F9IVA00K (
F9IAPRT NUMERIC(4, 0) NOT NULL DEFAULT 0, F9IAPRT NUMERIC(4, 0) NOT NULL DEFAULT 0,
F9INPRT NUMERIC(10, 0) NOT NULL DEFAULT 0, F9INPRT NUMERIC(10, 0) NOT NULL DEFAULT 0,
F9IURIC DATETIME NOT NULL DEFAULT getdate(), F9IURIC DATETIME NOT NULL DEFAULT getdate(),
PRIMARY KEY( F9ICSOC , F9IIDLA , F9IFPDE , F9ISIVA , F9ICREG , F9INPRI , F9IUPRI , F9ITPGI ) ) ; 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 ( CREATE TABLE F9PWA00K (
F9PCSOC CHAR(10) NOT NULL DEFAULT '', F9PCSOC CHAR(10) NOT NULL DEFAULT '',
F9PCDFN CHAR(2) NOT NULL DEFAULT '', F9PCDFN CHAR(2) NOT NULL DEFAULT '',
@ -101,8 +111,11 @@ CREATE TABLE F9PWA00K (
F9PCDA7 CHAR(2) NOT NULL DEFAULT '', F9PCDA7 CHAR(2) NOT NULL DEFAULT '',
F9PCDA8 CHAR(2) NOT NULL DEFAULT '', F9PCDA8 CHAR(2) NOT NULL DEFAULT '',
F9PPCDC CHAR(256) NOT NULL DEFAULT '', F9PPCDC CHAR(256) NOT NULL DEFAULT '',
PRIMARY KEY( F9PCSOC ) ) ; PRIMARY KEY( F9PCSOC ))
ELSE
SELECT 1 AS EXIST;
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'F9ERROR')
CREATE TABLE F9ERROR( CREATE TABLE F9ERROR(
IDESTR CHAR(18) NOT NULL, IDESTR CHAR(18) NOT NULL,
NUMREG NUMERIC(7,0) NOT NULL, NUMREG NUMERIC(7,0) NOT NULL,
@ -119,5 +132,6 @@ CREATE TABLE F9ERROR(
ESCLUDI CHAR(1), ESCLUDI CHAR(1),
ESCLUSO CHAR(2), ESCLUSO CHAR(2),
DESCRERR VARCHAR(110), DESCRERR VARCHAR(110),
PRIMARY KEY(IDESTR, NUMREG) PRIMARY KEY(IDESTR, NUMREG))
); ELSE
SELECT 1 AS EXIST;