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:
guy 2004-03-08 16:16:28 +00:00
parent 57f31a2df8
commit ac70ddd888
8 changed files with 278 additions and 58 deletions

View File

@ -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;
}

View File

@ -1,4 +1,5 @@
int ba8100(int argc, char* argv[]);
int ba8200(int argc, char* argv[]);
int ba8300(int argc, char* argv[]);

View File

@ -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;
}

View File

@ -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\"";

View File

@ -67,5 +67,11 @@ public:
TQuery_sheet(TSQL_query& sql);
};
///////////////////////////////////////////////////////////
// Utility
///////////////////////////////////////////////////////////
void get_sql_directory(TFilename& path);
#endif

139
ba/ba8300.cpp Executable file
View 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
View 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
View 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