Patch level : 12.0 1232

Files correlati     : ba8.exe

Commento :
Programma per l'esecuzione di query in interattivo o batch.
Si chiama in questo modo

ba8 -7 <query> <outputfile> <formato> <variabili> -uADMIN

formato=html|txt|excel(csv)|campo|dbf
variabili nel formato VARIABILE=valore,VARIABILE=valore,.....
This commit is contained in:
Alessandro Bonazzi 2023-01-28 08:49:20 +01:00
parent bf77228756
commit 9a38e20534
3 changed files with 60 additions and 19 deletions

View File

@ -1413,6 +1413,13 @@ void TButton_field::create(WINDOW parent)
if (_ctl_data._bmp_up <= 0 && _ctl_data._prompt == BR("~Stampa", _ctl_data._width))
_ctl_data._bmp_up = BMP_PRINT;
break;
case DLG_PREVIEW:
if (_ctl_data._prompt.empty() || _ctl_data._prompt == "Anteprima")
_ctl_data._prompt = BR("~Anteprima", _ctl_data._width);
_exit_key = K_ENTER;
if (_ctl_data._bmp_up <= 0 && _ctl_data._prompt == BR("~Anteprima", _ctl_data._width))
_ctl_data._bmp_up = BMP_PREVIEW;
break;
case DLG_QUIT:
if (_ctl_data._prompt.empty())
_ctl_data._prompt = BR("Fine", _ctl_data._width);
@ -1445,6 +1452,7 @@ void TButton_field::create(WINDOW parent)
_ctl_data._bmp_up, _ctl_data._bmp_dn);
TToken_string* mess = message(0);
if (mess)
{
TToken_string msg(mess->get(0), ',');
@ -1465,6 +1473,7 @@ void TButton_field::create(WINDOW parent)
if (_virtual_key == 0)
{
const char acc = ((TPushbutton_control*)_ctl)->mnemonic();
_virtual_key = (acc > ' ') ? toupper(acc) : _exit_key;
}
}

View File

@ -394,14 +394,16 @@ bool TRecordset::save_as_dbf(const char* table, int mode)
else
{
const TString & query = query_text();
int posfield = query.find("SELECT");
int pos = query.find("FROM");
TArray records;
TAssoc_array records;
if (pos > 0)
{
TToken_string tables(query.mid(pos + 5), ',');
const int len = tables.len();
int stop = 0;
bool first = true;
tables.upper();
while (stop < len && ((tables[stop] >= 'A') && (tables[stop] <= 'Z') || tables[stop] == ','))
@ -413,22 +415,44 @@ bool TRecordset::save_as_dbf(const char* table, int mode)
int logic = table2logic(table);
if (logic > LF_USER)
records.add(new TTrec(logic));
{
if (first)
records.add("*", new TTrec(logic));
records.add(table, new TTrec(logic));
}
first = false;
}
}
if (posfield >= 0)
{
posfield += 6;
while (isspace(query[posfield++]));
}
TToken_string fields(query.mid(posfield - 1, pos - posfield), ',');
TTrec def(LF_EXTERNAL);
TToken_string keydef("", '+');
int keylen = 0;
fields.trim();
for (unsigned int j = 0; j < columns(); j++)
{
TRecordset_column_info & c = (TRecordset_column_info &)column_info(j);
const TString& name = c._name;
const TString& colname = c._name;
const TString fld = fields.get();
int dot = fld.find('.');
TString table;
TString name(colname);
FOR_EACH_ARRAY_ITEM(records, r, obj)
if (dot > 0 && name == fld.mid(dot + 1))
table = fld.left(dot);
const TTrec * tr = (const TTrec *)records.objptr(table);
if (tr == nullptr)
tr = (const TTrec *)records.objptr("*");
if (tr != nullptr)
{
TTrec & rec = (TTrec &)*obj;
TTrec & rec = (TTrec &)*tr;
const int nfield = rec.field(name);
if (nfield >= 0)

View File

@ -105,15 +105,22 @@ void TButton_tool::create(WINDOW toolbar)
_ctl_data._bmp_up = TOOL_DELREC;
break;
case DLG_PRINT:
if (_ctl_data._prompt.blank())
if (_ctl_data._prompt.blank() || _ctl_data._prompt == "Stampa")
_ctl_data._prompt = TR("~Stampa");
set_exit_key(K_ENTER);
if (_ctl_data._bmp_up <= 0)
_ctl_data._bmp_up = TOOL_PRINT;
break;
case DLG_PREVIEW:
if (_ctl_data._prompt.blank() || _ctl_data._prompt.starts_with("Antepr"))
_ctl_data._prompt = TR("~Anteprima");
set_exit_key(M_FILE_PREVIEW);
if (_ctl_data._bmp_up <= 0)
_ctl_data._bmp_up = TOOL_PREVIEW;
break;
case DLG_SETPRINT:
if (_ctl_data._prompt.blank())
_ctl_data._prompt = TR("Imposta");
if (_ctl_data._prompt.blank() || _ctl_data._prompt == "Imposta")
_ctl_data._prompt = TR("~Imposta");
set_exit_key(M_FILE_PG_SETUP);
if (_ctl_data._bmp_up <= 0)
_ctl_data._bmp_up = TOOL_SETPRINT;
@ -136,7 +143,6 @@ void TButton_tool::create(WINDOW toolbar)
_ctl_data._bmp_up = TOOL_MULTISEL;
_virtual_key = K_CTRL + 'T';
break;
case DLG_HELP:
if (_ctl_data._prompt.blank())
_ctl_data._prompt = TR("Help");
@ -158,6 +164,7 @@ void TButton_tool::create(WINDOW toolbar)
if (_virtual_key <= 0)
{
const char acc = _ctl_data._prompt.after("~")[0];
if (acc >= 'A'&& acc <= 'z')
_virtual_key = toupper(acc);
}
@ -169,6 +176,7 @@ void TButton_tool::create(WINDOW toolbar)
_ctl_data._bmp_up, _ctl_data._width, -1);
TToken_string* mess = message(0);
if (mess != NULL)
{
TToken_string msg(mess->get(0), ',');