Patch level : 12.0 nopatch
Files correlati : ps Commento: Modifiche al salvataggio in formato dBase.
This commit is contained in:
parent
ef311955ee
commit
0d3ca7deb7
@ -1699,6 +1699,7 @@ void TReport_select::parse_output(TScanner& scanner)
|
|||||||
KEY TReport_select::run()
|
KEY TReport_select::run()
|
||||||
{
|
{
|
||||||
TFilename path = field().get();
|
TFilename path = field().get();
|
||||||
|
|
||||||
if (select_custom_file(path, "rep", _classe))
|
if (select_custom_file(path, "rep", _classe))
|
||||||
{
|
{
|
||||||
path = path.name();
|
path = path.name();
|
||||||
@ -1732,18 +1733,21 @@ bool TReport_select::check(CheckTime ct)
|
|||||||
|
|
||||||
if (repname.blank() && ct == FINAL_CHECK)
|
if (repname.blank() && ct == FINAL_CHECK)
|
||||||
return field().error_box(TR("Il report deve essere specificato"));
|
return field().error_box(TR("Il report deve essere specificato"));
|
||||||
bool found = false;
|
if (_classe.full())
|
||||||
FOR_EACH_ARRAY_ITEM(reps, r, obj)
|
|
||||||
{
|
{
|
||||||
TToken_string * row = (TToken_string *)obj;
|
bool found = false;
|
||||||
|
|
||||||
found = (repname == row->get(0));
|
|
||||||
if (found)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!found)
|
FOR_EACH_ARRAY_ITEM(reps, r, obj)
|
||||||
return field().error_box(FR("Il report %s non è compatibile"), (const char *)repname);
|
{
|
||||||
|
TToken_string * row = (TToken_string *)obj;
|
||||||
|
|
||||||
|
found = (repname == row->get(0));
|
||||||
|
if (found)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!found)
|
||||||
|
return field().error_box(FR("Il report %s non è compatibile"), (const char *)repname);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (field().roman()) // Must exist
|
if (field().roman()) // Must exist
|
||||||
|
@ -18,6 +18,7 @@ class TConfig;
|
|||||||
#define DESCDIR "recdesc"
|
#define DESCDIR "recdesc"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// @doc EXTERNAL
|
// @doc EXTERNAL
|
||||||
|
|
||||||
// @class TDir | Classe per la gestione del file "dir.gen"
|
// @class TDir | Classe per la gestione del file "dir.gen"
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
BUTTON DLG_PRINT 2 2
|
BUTTON DLG_PRINT 2 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 1 "Stampa"
|
PROMPT 1 1 "~Stampa"
|
||||||
PICTURE TOOL_PRINT
|
PICTURE TOOL_PRINT
|
||||||
END
|
END
|
||||||
|
|
||||||
BUTTON DLG_SETPRINT 2 2
|
BUTTON DLG_SETPRINT 2 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 1 "Imposta"
|
PROMPT 2 1 "~Imposta"
|
||||||
PICTURE TOOL_SETPRINT
|
PICTURE TOOL_SETPRINT
|
||||||
END
|
END
|
||||||
|
|
||||||
|
@ -335,7 +335,7 @@ bool TProgress_monitor::set_status(long n)
|
|||||||
_start = clock();
|
_start = clock();
|
||||||
|
|
||||||
// Se è passato un secondo allora crea la progress dialog
|
// Se è passato un secondo allora crea la progress dialog
|
||||||
if (_pd == NULL_WIN && n > 0 && (clock() - _start) >= CLOCKS_PER_SEC)
|
if (_pd == NULL_WIN && n > 0 && (clock() - _start) >= CLOCKS_PER_SEC && !is_batch())
|
||||||
{
|
{
|
||||||
_pd = xvt_dm_progress_create(_pm_parent, main_app().title(), _total, _cancellable);
|
_pd = xvt_dm_progress_create(_pm_parent, main_app().title(), _total, _cancellable);
|
||||||
if (_txt.full())
|
if (_txt.full())
|
||||||
|
@ -391,48 +391,106 @@ bool TRecordset::save_as_dbf(const char* table, int mode)
|
|||||||
else
|
else
|
||||||
pisam = new TFast_isamfile(logicnum);
|
pisam = new TFast_isamfile(logicnum);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const TString & query = query_text();
|
||||||
|
int pos = query.find("FROM");
|
||||||
|
TArray records;
|
||||||
|
|
||||||
|
if (pos > 0)
|
||||||
|
{
|
||||||
|
TToken_string tables(query.mid(pos + 5), ',');
|
||||||
|
const int len = tables.len();
|
||||||
|
int stop = 0;
|
||||||
|
|
||||||
|
tables.upper();
|
||||||
|
while (stop < len && ((tables[stop] >= 'A') && (tables[stop] <= 'Z') || tables[stop] == ','))
|
||||||
|
stop++;
|
||||||
|
if (stop > 0)
|
||||||
|
tables.cut(stop);
|
||||||
|
FOR_EACH_STR_TOKEN(tables, table)
|
||||||
|
{
|
||||||
|
int logic = table2logic(table);
|
||||||
|
|
||||||
|
if (logic > LF_USER)
|
||||||
|
records.add(new TTrec(logic));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TTrec def(LF_EXTERNAL);
|
||||||
|
TToken_string keydef("", '+');
|
||||||
|
int keylen = 0;
|
||||||
|
|
||||||
|
for (unsigned int j = 0; j < columns(); j++)
|
||||||
|
{
|
||||||
|
TRecordset_column_info & c = (TRecordset_column_info &)column_info(j);
|
||||||
|
const TString& name = c._name;
|
||||||
|
|
||||||
|
FOR_EACH_ARRAY_ITEM(records, r, obj)
|
||||||
|
{
|
||||||
|
TTrec & rec = (TTrec &)*obj;
|
||||||
|
const int nfield = rec.field(name);
|
||||||
|
|
||||||
|
if (nfield >= 0)
|
||||||
|
{
|
||||||
|
TToken_string defstr(rec.fielddef(nfield));
|
||||||
|
int dec = defstr.get_int(3);
|
||||||
|
|
||||||
|
c._type = (TFieldtypes)defstr.get_int(1);
|
||||||
|
c._width = defstr.get_int(2);
|
||||||
|
|
||||||
|
if (c._type == _realfld)
|
||||||
|
c._width += dec;
|
||||||
|
def.add_fielddef(c._name, c._type, c._width, dec);
|
||||||
|
if (keylen + c._width < 80)
|
||||||
|
{
|
||||||
|
keydef.add(c._name);
|
||||||
|
keylen += c._width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
def.add_keydef(keydef, true);
|
||||||
|
pisam = new TExternisamfile(table, def);
|
||||||
|
}
|
||||||
if (pisam == nullptr)
|
if (pisam == nullptr)
|
||||||
return error_box("Impossibile creare il file %s", table);
|
return error_box("Impossibile creare il file %s", table);
|
||||||
|
|
||||||
TBaseisamfile& isam = *pisam;
|
TBaseisamfile& isam = *pisam;
|
||||||
TRectype& rec = isam.curr();
|
|
||||||
|
|
||||||
TString_array names;
|
|
||||||
int valid = 0;
|
int valid = 0;
|
||||||
for (unsigned int j = 0; j < columns(); j++)
|
|
||||||
{
|
|
||||||
const TVariant& var = get(j);
|
|
||||||
const TString& name = column_info(j)._name;
|
|
||||||
if (rec.exist(name))
|
|
||||||
{
|
|
||||||
names.add(name);
|
|
||||||
valid++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
names.add(EMPTY_STRING);
|
|
||||||
}
|
|
||||||
|
|
||||||
TProgress_monitor pi(items(), TR("Esportazione in corso..."), true);
|
TProgress_monitor pi(items(), TR("Esportazione in corso..."), true);
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
|
|
||||||
for (bool go = move_first(); go; go = move_next())
|
for (bool go = move_first(); go; go = move_next())
|
||||||
{
|
{
|
||||||
|
TToken_string recval("", ',');
|
||||||
|
|
||||||
if (!pi.add_status())
|
if (!pi.add_status())
|
||||||
break;
|
break;
|
||||||
rec.zero();
|
isam.zero();
|
||||||
FOR_EACH_ARRAY_ROW(names, j, name) if (name->not_empty())
|
for (unsigned int j = 0; j < columns(); j++)
|
||||||
rec.put(*name, get(j).as_string());
|
{
|
||||||
|
const TString& name = column_info(j)._name;
|
||||||
|
|
||||||
|
isam.put(name, get(j).as_string());
|
||||||
|
recval.add(get(j).as_string());
|
||||||
|
}
|
||||||
|
|
||||||
int err = NOERR;
|
int err = NOERR;
|
||||||
bool to_be_written = true;
|
bool to_be_written = true;
|
||||||
|
|
||||||
// Devo solo aggiornare parte dei campi?
|
// Devo solo aggiornare parte dei campi?
|
||||||
if ((mode & 0x2) && valid < rec.items())
|
if (mode & 0x2)
|
||||||
{
|
{
|
||||||
err = isam.read(_isequal, _lock);
|
err = isam.read(_isequal, _lock);
|
||||||
if (err != NOERR)
|
if (err != NOERR)
|
||||||
rec.zero();
|
isam.zero();
|
||||||
FOR_EACH_ARRAY_ROW(names, j, name) if (name->not_empty())
|
for (unsigned int j = 0; j < columns(); j++)
|
||||||
rec.put(*name, get(j).as_string());
|
{
|
||||||
|
const TString& name = column_info(j)._name;
|
||||||
|
|
||||||
|
isam.put(name, get(j).as_string());
|
||||||
|
}
|
||||||
if (err == NOERR)
|
if (err == NOERR)
|
||||||
to_be_written = isam.rewrite() != NOERR;
|
to_be_written = isam.rewrite() != NOERR;
|
||||||
}
|
}
|
||||||
@ -444,11 +502,10 @@ bool TRecordset::save_as_dbf(const char* table, int mode)
|
|||||||
}
|
}
|
||||||
if (err != NOERR)
|
if (err != NOERR)
|
||||||
{
|
{
|
||||||
ok = error_box(FR("Errore %d durante la scrittura del record %s"), err, rec.build_key());
|
ok = error_box(FR("Errore %d durante la scrittura del record %s"), err, recval);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -717,9 +774,11 @@ void TRecordset::parsed_text(TString& sql) const
|
|||||||
{
|
{
|
||||||
TVariant var = get_var(*name);
|
TVariant var = get_var(*name);
|
||||||
int pos = sql.find(*name);
|
int pos = sql.find(*name);
|
||||||
|
|
||||||
for ( ; pos > 0; pos = sql.find(*name, pos+1))
|
for ( ; pos > 0; pos = sql.find(*name, pos+1))
|
||||||
{
|
{
|
||||||
const TString& after = sql.mid(pos+name->len());
|
const TString& after = sql.mid(pos+name->len());
|
||||||
|
|
||||||
sql.cut(pos);
|
sql.cut(pos);
|
||||||
|
|
||||||
if (var.type() == _datefld)
|
if (var.type() == _datefld)
|
||||||
@ -1481,6 +1540,7 @@ TCursor_parser::TCursor_parser(istream& instr, TArray& col)
|
|||||||
{
|
{
|
||||||
TRecordset_column_info* info = (TRecordset_column_info*)obj;
|
TRecordset_column_info* info = (TRecordset_column_info*)obj;
|
||||||
const int arrow = info->_name.find('.');
|
const int arrow = info->_name.find('.');
|
||||||
|
|
||||||
if (arrow > 0)
|
if (arrow > 0)
|
||||||
info->_name = info->_name.mid(arrow+1);
|
info->_name = info->_name.mid(arrow+1);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user