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,7 +1272,7 @@ 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.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 <= F9_SQL_VERSION; version += 2) // Effettuo le modifiche per ogni avanzamento di versione
for(; version < SQL_VERSION; version += 2) // Effettuo le modifiche per ogni avanzamento di versione
{
if (ok &= aggiorna_tab_f9(version + 2))
{
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.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();
}
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,3 +1,4 @@
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 '',
@ -17,8 +18,11 @@ CREATE TABLE F9DRD00K (
F9RSINW CHAR(2) NOT NULL DEFAULT '',
F9RDSIN 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 (
F9TCSOC CHAR(10) NOT NULL DEFAULT '',
F9TCADO CHAR(10) NOT NULL DEFAULT '',
@ -30,8 +34,11 @@ CREATE TABLE F9DRT00K (
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 ) ) ;
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 '',
@ -86,8 +93,11 @@ CREATE TABLE F9IVA00K (
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 ) ) ;
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 '',
@ -101,8 +111,11 @@ CREATE TABLE F9PWA00K (
F9PCDA7 CHAR(2) NOT NULL DEFAULT '',
F9PCDA8 CHAR(2) 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(
IDESTR CHAR(18) NOT NULL,
NUMREG NUMERIC(7,0) NOT NULL,
@ -119,5 +132,6 @@ CREATE TABLE F9ERROR(
ESCLUDI CHAR(1),
ESCLUSO CHAR(2),
DESCRERR VARCHAR(110),
PRIMARY KEY(IDESTR, NUMREG)
);
PRIMARY KEY(IDESTR, NUMREG))
ELSE
SELECT 1 AS EXIST;