Patch level : 2.1 nopatch
Files correlati : Ricompilazione Demo : [ ] Commento : Corretti errori di salvataggio query. Ottimizzato il "pagina su" in query molto grandi Iniziato report generator (importa solo le query) git-svn-id: svn://10.65.10.50/trunk@11814 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
57f31a2df8
commit
ac70ddd888
@ -1,14 +1,14 @@
|
||||
#include <xvt.h>
|
||||
|
||||
#include "ba8.h"
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
const int n = argc > 1 ? atoi(argv[1]+1) : 0;
|
||||
const int n = argc > 1 ? (argv[1][1]-'0') : 0;
|
||||
switch (n)
|
||||
{
|
||||
case 1: ba8200(argc, argv); break;
|
||||
default: ba8100(argc, argv); break;
|
||||
case 1: ba8200(argc, argv); break; // Query Generator
|
||||
case 2: ba8300(argc, argv); break; // Report Generator
|
||||
default: ba8100(argc, argv); break; // Record Selector
|
||||
}
|
||||
return 0;
|
||||
}
|
1
ba/ba8.h
1
ba/ba8.h
@ -1,4 +1,5 @@
|
||||
int ba8100(int argc, char* argv[]);
|
||||
int ba8200(int argc, char* argv[]);
|
||||
int ba8300(int argc, char* argv[]);
|
||||
|
||||
|
||||
|
@ -369,7 +369,6 @@ public:
|
||||
bool save_if_needed();
|
||||
bool delete_query();
|
||||
|
||||
void get_sql_path(TFilename& path) const;
|
||||
bool get_qry_path(TFilename& path) const;
|
||||
|
||||
TRelation_node* curr_node();
|
||||
@ -750,7 +749,7 @@ void TQuery_mask::export(TQueryExportFormat fmt)
|
||||
strcpy(fs.type, ext);
|
||||
strcpy(fs.name, get(F_CODICE));
|
||||
strcpy(fs.creator, "AGA");
|
||||
const bool good = xvt_dm_post_file_save(&fs, TR("Esporta")) == FL_OK;
|
||||
const bool good = xvt_dm_post_file_save(&fs, TR("Esportazione")) == FL_OK;
|
||||
xvt_fsys_restore_dir();
|
||||
|
||||
if (good)
|
||||
@ -764,32 +763,24 @@ void TQuery_mask::export(TQueryExportFormat fmt)
|
||||
}
|
||||
}
|
||||
|
||||
void TQuery_mask::get_sql_path(TFilename& path) const
|
||||
{
|
||||
path = firm2dir(-1);
|
||||
path.add("sql");
|
||||
if (!path.exist())
|
||||
make_dir(path);
|
||||
}
|
||||
|
||||
bool TQuery_mask::get_qry_path(TFilename& path) const
|
||||
{
|
||||
const TString& name = get(F_CODICE);
|
||||
if (name.not_empty())
|
||||
const bool ok = name.not_empty();
|
||||
if (ok)
|
||||
{
|
||||
get_sql_path(path);
|
||||
get_sql_directory(path);
|
||||
path.add(name);
|
||||
path.ext("qry");
|
||||
}
|
||||
return name.not_empty();
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool TQuery_mask::select_query()
|
||||
{
|
||||
TEdit_field& fld = efield(F_CODICE);
|
||||
|
||||
TFilename dirname;
|
||||
get_sql_path(dirname);
|
||||
TFilename dirname; get_sql_directory(dirname);
|
||||
|
||||
xvt_fsys_save_dir();
|
||||
|
||||
@ -813,7 +804,6 @@ bool TQuery_mask::select_query()
|
||||
return good;
|
||||
}
|
||||
|
||||
|
||||
static bool xml_save_tree_handler(TTree& tree, void* jolly, word flags)
|
||||
{
|
||||
TXmlItem* rel = (TXmlItem*)jolly;
|
||||
@ -861,9 +851,9 @@ bool TQuery_mask::save_fields_sheet(TXmlItem& xml)
|
||||
TXmlItem& field = fields.AddChild("field");
|
||||
field.SetAttr("Table", row->get(0));
|
||||
field.SetAttr("Name", row->get(1));
|
||||
field.SetAttr("Hidden", *row->get(2) > ' ');
|
||||
field.SetAttr("Sort", *row->get(3) > ' ');
|
||||
field.SetAttr("Group", *row->get(4) > ' ');
|
||||
field.SetAttr("Hidden", tok_get_bool(*row,2));
|
||||
field.SetAttr("Sort", tok_get_bool(*row,3));
|
||||
field.SetAttr("Group", tok_get_bool(*row,4));
|
||||
const char* str = row->get(5);
|
||||
if (str && *str > ' ')
|
||||
field.SetAttr("Expr", str);
|
||||
@ -997,9 +987,8 @@ bool TQuery_mask::load_query()
|
||||
bool ok = path.exist();
|
||||
if (ok)
|
||||
{
|
||||
ifstream qry(path);
|
||||
TXmlItem xml;
|
||||
ok = xml.Read(qry);
|
||||
ok = xml.Load(path);
|
||||
if (ok)
|
||||
{
|
||||
_curr_query = path;
|
||||
@ -1224,40 +1213,25 @@ TQuery_mask::TQuery_mask() : TAutomask("ba8200a"), _curr_num(0), _is_dirty(false
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TSql_app
|
||||
// TSQL_query_app
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TSql_app : public TSkeleton_application
|
||||
class TSQL_query_app : public TSkeleton_application
|
||||
{
|
||||
TQuery_mask* _msk;
|
||||
|
||||
public:
|
||||
virtual bool create();
|
||||
virtual void main_loop();
|
||||
virtual bool destroy();
|
||||
};
|
||||
|
||||
void TSql_app::main_loop()
|
||||
void TSQL_query_app::main_loop()
|
||||
{
|
||||
_msk->run();
|
||||
TQuery_mask* msk = new TQuery_mask;
|
||||
msk->run();
|
||||
delete msk;
|
||||
}
|
||||
|
||||
bool TSql_app::create()
|
||||
{
|
||||
_msk = new TQuery_mask;
|
||||
return TSkeleton_application::create();
|
||||
}
|
||||
|
||||
bool TSql_app::destroy()
|
||||
{
|
||||
delete _msk;
|
||||
return TSkeleton_application::destroy();
|
||||
}
|
||||
|
||||
|
||||
int ba8200(int argc, char* argv[])
|
||||
{
|
||||
TSql_app app;
|
||||
app.run(argc, argv, "Query");
|
||||
TSQL_query_app app;
|
||||
app.run(argc, argv, TR("Query Generator"));
|
||||
return 0;
|
||||
}
|
||||
|
@ -8,6 +8,18 @@
|
||||
|
||||
#include "ba8201.h"
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Utility
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
void get_sql_directory(TFilename& name)
|
||||
{
|
||||
name = firm2dir(-1);
|
||||
name.add("sql");
|
||||
if (!name.exist())
|
||||
make_dir(name);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Private interface
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -49,13 +61,8 @@ public:
|
||||
|
||||
void TSQLite::build_curr_path(TFilename& name) const
|
||||
{
|
||||
name = firm2dir(-1);
|
||||
name.add("sql");
|
||||
if (!name.exist())
|
||||
make_dir(name);
|
||||
|
||||
TString16 firm;
|
||||
firm.format("%05ldA.sql", prefix().get_codditta());
|
||||
TString16 firm; firm.format("%05ldA.sql", prefix().get_codditta());
|
||||
get_sql_directory(name);
|
||||
name.add(firm);
|
||||
}
|
||||
|
||||
@ -386,7 +393,7 @@ TSQLite::~TSQLite()
|
||||
void TSQL_query::reset()
|
||||
{
|
||||
_firstrow = _items = 0;
|
||||
_pagesize = 256;
|
||||
_pagesize = 512;
|
||||
_page.destroy();
|
||||
_column.destroy();
|
||||
}
|
||||
@ -459,6 +466,9 @@ static int query_get_rows(void* jolly, int argc, char** values, char** columns)
|
||||
|
||||
const TString_array* TSQL_query::row(TRecnotype n)
|
||||
{
|
||||
if (n < 0 || n >= items())
|
||||
return NULL;
|
||||
|
||||
if (n < _firstrow || n >= _firstrow+_page.items())
|
||||
{
|
||||
TString sql = _sql;
|
||||
@ -469,7 +479,10 @@ const TString_array* TSQL_query::row(TRecnotype n)
|
||||
sql.cut(semicolon);
|
||||
sql.trim();
|
||||
_page.destroy();
|
||||
_firstrow = n;
|
||||
if (n >= _pagesize)
|
||||
_firstrow = n-_pagesize/8; // Prendo qualche riga dalla pagina precedente, per velocizzare il pagina su
|
||||
else
|
||||
_firstrow = n;
|
||||
sql << "\nLIMIT " << _pagesize << " OFFSET " << _firstrow << ';';
|
||||
}
|
||||
_TheDataBase.exec(sql, query_get_rows, &_page);
|
||||
@ -589,7 +602,7 @@ bool TSQL_query::save_as_silk(const TFilename& path)
|
||||
if (pi.iscancelled())
|
||||
break;
|
||||
const TString_array* arr = row(n);
|
||||
const int last = arr != NULL ? arr->last() : 0;
|
||||
const int last = arr->last();
|
||||
for (int c = 0; c <= last; c++)
|
||||
{
|
||||
out << "C;Y" << (n+2) << ";X" << (c+1) << ";K\"";
|
||||
|
@ -67,5 +67,11 @@ public:
|
||||
TQuery_sheet(TSQL_query& sql);
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Utility
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
void get_sql_directory(TFilename& path);
|
||||
|
||||
#endif
|
||||
|
||||
|
139
ba/ba8300.cpp
Executable file
139
ba/ba8300.cpp
Executable file
@ -0,0 +1,139 @@
|
||||
#include <xi.h>
|
||||
|
||||
#include <applicat.h>
|
||||
#include <automask.h>
|
||||
#include <execp.h>
|
||||
#include <prefix.h>
|
||||
#include <xml.h>
|
||||
|
||||
#include "ba8201.h"
|
||||
#include "ba8300.h"
|
||||
|
||||
class TReport_mask : public TAutomask
|
||||
{
|
||||
protected:
|
||||
virtual void handler(WINDOW win, EVENT* ep);
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
|
||||
protected:
|
||||
bool select_query();
|
||||
bool select_report();
|
||||
|
||||
public:
|
||||
TReport_mask() : TAutomask("ba8300a") { }
|
||||
};
|
||||
|
||||
bool TReport_mask::select_report()
|
||||
{
|
||||
TEdit_field& fld = efield(F_CODICE);
|
||||
|
||||
TFilename dirname; get_sql_directory(dirname);
|
||||
|
||||
xvt_fsys_save_dir();
|
||||
|
||||
FILE_SPEC fs;
|
||||
xvt_fsys_convert_str_to_dir(dirname, &fs.dir);
|
||||
|
||||
strcpy(fs.type, "rep");
|
||||
strcpy(fs.name, "*");
|
||||
strcpy(fs.creator, "AGA");
|
||||
|
||||
const bool good = xvt_dm_post_file_open(&fs, (char*)fld.prompt()) == FL_OK;
|
||||
|
||||
xvt_fsys_restore_dir();
|
||||
|
||||
if (good)
|
||||
{
|
||||
char name[_MAX_FNAME];
|
||||
xvt_fsys_parse_pathname (fs.name, NULL, NULL, name, NULL, NULL);
|
||||
fld.set(name);
|
||||
}
|
||||
return good;
|
||||
}
|
||||
|
||||
bool TReport_mask::select_query()
|
||||
{
|
||||
TFilename path; get_sql_directory(path);
|
||||
|
||||
xvt_fsys_save_dir();
|
||||
|
||||
FILE_SPEC fs;
|
||||
xvt_fsys_convert_str_to_dir(path, &fs.dir);
|
||||
|
||||
strcpy(fs.type, "qry");
|
||||
strcpy(fs.name, "*");
|
||||
strcpy(fs.creator, "AGA");
|
||||
|
||||
bool good = xvt_dm_post_file_open(&fs, "Selezione query") == FL_OK;
|
||||
|
||||
xvt_fsys_restore_dir();
|
||||
|
||||
if (good)
|
||||
{
|
||||
xvt_fsys_convert_dir_to_str(&fs.dir, path.get_buffer(), path.size());
|
||||
path.add(fs.name);
|
||||
TXmlItem item; item.Load(path);
|
||||
const TXmlItem* sql = item.FindFirst("sql");
|
||||
good = sql != NULL;
|
||||
if (good)
|
||||
{
|
||||
TString str; sql->GetEnclosedText(str);
|
||||
set(F_SQL, str);
|
||||
}
|
||||
}
|
||||
return good;
|
||||
}
|
||||
|
||||
void TReport_mask::handler(WINDOW win, EVENT* ep)
|
||||
{
|
||||
TAutomask::handler(win, ep);
|
||||
}
|
||||
|
||||
bool TReport_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
{
|
||||
switch (o.dlg())
|
||||
{
|
||||
case F_CODICE:
|
||||
if (e == fe_button)
|
||||
select_report();
|
||||
break;
|
||||
case F_NEW_QRY:
|
||||
if (e == fe_button)
|
||||
{
|
||||
TExternal_app q("ba8 -1");
|
||||
q.run();
|
||||
}
|
||||
break;
|
||||
case F_IMPORT_QRY:
|
||||
if (e == fe_button)
|
||||
select_query();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TReporter_app
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TReporter_app : public TSkeleton_application
|
||||
{
|
||||
protected:
|
||||
virtual void main_loop();
|
||||
};
|
||||
|
||||
void TReporter_app::main_loop()
|
||||
{
|
||||
TReport_mask* msk = new TReport_mask;
|
||||
msk->run();
|
||||
delete msk;
|
||||
}
|
||||
|
||||
int ba8300(int argc, char* argv[])
|
||||
{
|
||||
TReporter_app app;
|
||||
app.run(argc, argv, TR("Report Generator"));
|
||||
return 0;
|
||||
}
|
6
ba/ba8300.h
Executable file
6
ba/ba8300.h
Executable file
@ -0,0 +1,6 @@
|
||||
#define F_CODICE 101
|
||||
#define F_DESCR 102
|
||||
#define F_SQL 103
|
||||
#define F_IMPORT_QRY 104
|
||||
#define F_NEW_QRY 105
|
||||
|
81
ba/ba8300a.uml
Executable file
81
ba/ba8300a.uml
Executable file
@ -0,0 +1,81 @@
|
||||
#include "ba8300.h"
|
||||
|
||||
TOOLBAR "" 0 -2 0 2
|
||||
|
||||
BUTTON DLG_SAVEREC 10 2
|
||||
BEGIN
|
||||
PROMPT -15 -11 ""
|
||||
PICTURE BMP_SAVEREC
|
||||
PICTURE BMP_SAVERECDN
|
||||
END
|
||||
|
||||
BUTTON DLG_NEWREC 10 2
|
||||
BEGIN
|
||||
PROMPT -25 -11 "~Nuovo"
|
||||
PICTURE BMP_NEWREC
|
||||
PICTURE BMP_NEWRECDN
|
||||
END
|
||||
|
||||
BUTTON DLG_DELREC 10 2
|
||||
BEGIN
|
||||
PROMPT -35 -11 ""
|
||||
PICTURE BMP_DELREC
|
||||
PICTURE BMP_DELRECDN
|
||||
END
|
||||
|
||||
BUTTON DLG_FINDREC 10 2
|
||||
BEGIN
|
||||
PROMPT -45 -11 "Ri~cerca"
|
||||
PICTURE BMP_FINDREC
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 10 2
|
||||
BEGIN
|
||||
PROMPT -55 -11 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Report" -1 -1 78 23
|
||||
|
||||
GROUPBOX DLG_NULL 78 3
|
||||
BEGIN
|
||||
PROMPT 1 0 "Report"
|
||||
END
|
||||
|
||||
STRING F_CODICE 16
|
||||
BEGIN
|
||||
PROMPT 2 1 "Codice "
|
||||
FLAGS "B"
|
||||
WARNING "E' necessario specificare il codice"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_DESCR 50 46
|
||||
BEGIN
|
||||
PROMPT 30 1 ""
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 78 -1
|
||||
BEGIN
|
||||
PROMPT 1 3 "Origine dei dati"
|
||||
END
|
||||
|
||||
BUTTON F_NEW_QRY 20 1
|
||||
BEGIN
|
||||
PROMPT 30 3 "Nuova query"
|
||||
END
|
||||
|
||||
BUTTON F_IMPORT_QRY 20 1
|
||||
BEGIN
|
||||
PROMPT 57 3 "Importa query"
|
||||
END
|
||||
|
||||
MEMO F_SQL 76 -2
|
||||
BEGIN
|
||||
PROMPT 2 3 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
Loading…
x
Reference in New Issue
Block a user