Patch level : 12.0 1028
Files correlati : tf0.exe Commento : Modificato l'aggiornamento del database del trasferimento fatture. Non modificava i campi esistenti ma creava solo i campi nuovi.
This commit is contained in:
parent
b29de6e86c
commit
47e8eaaa43
@ -590,37 +590,60 @@ int TTrFa_app::parse_line(const TString& line, TString& var, TString& val) const
|
||||
bool TTrFa_app::create_table(TScanner& tff, const TString& table)
|
||||
{
|
||||
TString query, var, val;
|
||||
if (xvt_sql_table_exists(_db, table))
|
||||
bool modified = false;
|
||||
TToken_string field_list("", ',');
|
||||
const bool new_table = !xvt_sql_table_exists(_db, table);
|
||||
streampos cur_pos = tff.pos();
|
||||
|
||||
if (!new_table)
|
||||
{
|
||||
SLIST fields = xvt_sql_list_fields(_db, table);
|
||||
while (!tff.eof())
|
||||
|
||||
while (!modified && !tff.eof())
|
||||
{
|
||||
const TString& line = tff.line();
|
||||
const int n = parse_line(line, var, val);
|
||||
|
||||
if (n <= 0)
|
||||
break;
|
||||
if (var.starts_with("INDEX_"))
|
||||
break;
|
||||
if (xvt_slist_find_str(fields, var) == NULL)
|
||||
{
|
||||
query.cut(0) << "ALTER TABLE " << table << " ADD COLUMN " << var << ' ' << val << " NOT NULL";
|
||||
if (val.find("INT") >= 0 || val.find("NUM") >= 0)
|
||||
query << " DEFAULT 0";
|
||||
else
|
||||
query << " DEFAULT ''";
|
||||
query << ";";
|
||||
xvt_sql_execute(_db, query, NULL, NULL); // Create table
|
||||
|
||||
modified = true;
|
||||
}
|
||||
else
|
||||
modified = (val != xvt_sql_field_type(_db, table, var));
|
||||
}
|
||||
if (modified)
|
||||
{
|
||||
const int nfields = xvt_slist_count(fields);
|
||||
|
||||
for (SLIST_ELT field = xvt_slist_get_first(fields); field != nullptr; field = xvt_slist_get_next(fields, field))
|
||||
field_list.add(field->str);
|
||||
}
|
||||
xvt_slist_destroy(fields);
|
||||
if (modified)
|
||||
{
|
||||
query = "ALTER TABLE ";
|
||||
query << table << " RENAME TO " << table << "_OLD;";
|
||||
xvt_sql_execute(_db, query, NULL, NULL); // rename table table
|
||||
query = "DROP INDEX ";
|
||||
query << table << "_1;";
|
||||
xvt_sql_execute(_db, query, NULL, NULL); // rename table table
|
||||
tff.setpos(cur_pos);
|
||||
}
|
||||
}
|
||||
else
|
||||
if (new_table || modified)
|
||||
{
|
||||
query << "CREATE TABLE " << table << " (";
|
||||
|
||||
query = "CREATE TABLE "; query << table << " (";
|
||||
while (!tff.eof())
|
||||
{
|
||||
const TString& line = tff.line();
|
||||
const int n = parse_line(line, var, val);
|
||||
|
||||
if (n <= 0)
|
||||
break;
|
||||
if (n == 1)
|
||||
@ -633,9 +656,8 @@ bool TTrFa_app::create_table(TScanner& tff, const TString& table)
|
||||
query.rtrim(1); // toglie ultima ,
|
||||
query << ");";
|
||||
xvt_sql_execute(_db, query, NULL, NULL); // Create table
|
||||
query.cut(0);
|
||||
query << "CREATE UNIQUE INDEX "
|
||||
<< table << "_1 ON " << table
|
||||
query = "CREATE UNIQUE INDEX ";
|
||||
query << table << "_1 ON " << table
|
||||
<< " (" << val << ");";
|
||||
xvt_sql_execute(_db, query, NULL, NULL); // Create index
|
||||
break;
|
||||
@ -650,8 +672,18 @@ bool TTrFa_app::create_table(TScanner& tff, const TString& table)
|
||||
query << ",";
|
||||
}
|
||||
}
|
||||
if (modified)
|
||||
{
|
||||
query = "INSERT INTO ";
|
||||
query << table << "(" << field_list
|
||||
<< ") SELECT " << field_list << " FROM "
|
||||
<< table << "_OLD;";
|
||||
xvt_sql_execute(_db, query, NULL, NULL); // rename table table
|
||||
query = "DROP TABLE ";
|
||||
query << table << "_OLD;";
|
||||
xvt_sql_execute(_db, query, NULL, NULL); // rename table table
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user