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

View File

@ -394,14 +394,16 @@ bool TRecordset::save_as_dbf(const char* table, int mode)
else else
{ {
const TString & query = query_text(); const TString & query = query_text();
int posfield = query.find("SELECT");
int pos = query.find("FROM"); int pos = query.find("FROM");
TArray records; TAssoc_array records;
if (pos > 0) if (pos > 0)
{ {
TToken_string tables(query.mid(pos + 5), ','); TToken_string tables(query.mid(pos + 5), ',');
const int len = tables.len(); const int len = tables.len();
int stop = 0; int stop = 0;
bool first = true;
tables.upper(); tables.upper();
while (stop < len && ((tables[stop] >= 'A') && (tables[stop] <= 'Z') || tables[stop] == ',')) 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); int logic = table2logic(table);
if (logic > LF_USER) 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); TTrec def(LF_EXTERNAL);
TToken_string keydef("", '+'); TToken_string keydef("", '+');
int keylen = 0; int keylen = 0;
fields.trim();
for (unsigned int j = 0; j < columns(); j++) for (unsigned int j = 0; j < columns(); j++)
{ {
TRecordset_column_info & c = (TRecordset_column_info &)column_info(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); const int nfield = rec.field(name);
if (nfield >= 0) if (nfield >= 0)

View File

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