From a379b353fe4b00c972504125d09cc65542c19bb9 Mon Sep 17 00:00:00 2001 From: bonazzi Date: Thu, 7 Jul 2016 08:37:52 +0000 Subject: [PATCH] Patch level : 10.0 272 Files correlati : ca2.exe Ricompilazione Demo : [ ] Commento : MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Aggiunto esecuzione ripetuta dell' invio a Board. La linea di comando รจ ca2 -4 -M -uADMIN git-svn-id: svn://10.65.10.50/branches/R_10_00@23208 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ca/ca2500.cpp | 545 +++++++++++++++++++++++++++----------------------- 1 file changed, 295 insertions(+), 250 deletions(-) diff --git a/ca/ca2500.cpp b/ca/ca2500.cpp index 6e5134478..0db14c653 100644 --- a/ca/ca2500.cpp +++ b/ca/ca2500.cpp @@ -1,250 +1,295 @@ -#include -#include -#include -#include -#include -#include - -#include "ca2500a.h" - -class TBoard_msk : public TAutomask -{ -protected: - virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); - void update_sheet(); -public: - TBoard_msk(); -}; - -void TBoard_msk::update_sheet() -{ - TSheet_field& s = sfield(F_FILES); - - if (s.empty()) - { - const TPrefix& prf = prefix(); - const TIsam_handle ff[] = { LF_CLIFO, LF_PCON, LF_MOV, LF_RMOV, LF_RMOVIVA, - LF_PCONANA, LF_MOVANA, LF_RMOVANA, LF_RMOVANAC, - LF_COMMESSE, LF_CDC, LF_FASI, 0 }; - for (int i = 0; ff[i]; i++) - { - const TIsam_handle lf = ff[i]; - const TFilename fn = prf.get_filename(lf); - TToken_string& row = s.row(-1); - row.format(" |%d", lf); - row.add(fn.name_only()); - } - } - - TString query; - FOR_EACH_SHEET_ROW(s, r, row) - { - query.format("USE %d", row->get_int(1)); - TISAM_recordset c(query); - row->add(c.items(), 3); - } - s.force_update(); -} - -bool TBoard_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) -{ - switch (o.dlg()) - { - case F_DATA_INI: - case F_DATA_FIN: - if (e == fe_modify) - update_sheet(); - break; - case F_FILES: - if (e == se_query_add || e == se_query_del) - return false; - default: - break; - } - return true; -} - -TBoard_msk::TBoard_msk() : TAutomask("ca2500a") -{ - TDate d(TODAY); - set(F_DATA_FIN, d); - d.set_day(1); - set(F_DATA_INI, d, true); - update_sheet(); -} - -class TBoard_app : public TSkeleton_application -{ -protected: - bool create_table(const TString& DSN, TIsam_handle lf) const; - bool esporta(const TString& DSN, TIsam_handle lf, const TDate& datef, const TDate& datet) const; - -public: - virtual void main_loop(); -}; - -bool TBoard_app::create_table(const TString& DSN, TIsam_handle lf) const -{ - TString query(1024); - TString table = prefix().get_filename(lf).name_only(); table.upper(); - TODBC_recordset set(""); - - if (!set.connect(DSN)) - return false; - -// query.format("SELECT * FROM %s.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='%s'", -// (const char*)recset.dsn(), (const char*)table); - query.format("SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='%s'", - (const char*)table); - set.set(query); - if (set.items()) - return true; - - query.cut(0) << "CREATE TABLE " << table << " (\n"; - const RecDes& rd = prefix().get_recdes(lf); - const bool access = set.driver() == ODBC_access; - - for (int f = 0; f < rd.NFields; f++) - { - const RecFieldDes& fd = rd.Fd[f]; - if (f) query << ','; - query << fd.Name << " "; - switch (fd.TypeF) - { - case _alfafld: query << "varchar(" << fd.Len << ')'; break; - case _realfld: - { - if (access) - query << "currency"; - else - query << "decimal(" << fd.Len << ',' << fd.Dec << ')'; - break; - } - case _datefld: query << "date"; break; - case _boolfld: query << "bit"; break; - case _memofld: - { - if (access) - query << "longtext"; - else - query << "varchar(max)"; - break; - } - default : query << "int"; break; - } - } - //query << ", CONSTRAINT Key0 PRIMARY KEY ("; - query << ", PRIMARY KEY ("; - for (int i = 0; i < rd.Ky[0].NkFields; i++) - { - const RecFieldDes& fd = rd.Fd[rd.Ky[0].FieldSeq[i] % 100]; - - if (i > 0) - query << ", "; - query << " " << fd.Name; - } - query << "));"; - set.exec(query); - set.exec("COMMIT;"); - return true; -} - - -bool TBoard_app::esporta(const TString& DSN, TIsam_handle lf, const TDate& datef, const TDate& datet) const -{ - TString sqlquery, dbfquery; - TToken_string keyexpr; - TODBC_recordset sqlset("", true); - - if (!sqlset.connect(DSN)) - return false; - if (!create_table(DSN, lf)) - return false; - - TString table = prefix().get_filename(lf).name_only(); table.upper(); - - sqlquery.cut(0) << "SELECT * FROM " << table; - dbfquery << "USE " << lf; - - - sqlset.begin(); - - sqlset.set(sqlquery); - sqlset.move_first(); - - TISAM_recordset dbfset(dbfquery); - TString msg("Esportazione tabella "); msg << table; - TProgind p(dbfset.items(), msg); - - if (dbfset.items() == 0) - { - if (sqlset.items() > 0L) - { - TString table = prefix().get_filename(lf).name_only(); table.upper(); - - TString query("DELETE FROM "); query << table << ";"; - sqlset.exec(query); - } - } - else - if (sqlset.items() == 0L) - { - for (bool go = dbfset.move_first(); go&& !p.iscancelled(); go = dbfset.move_next()) - { - p.addstatus(1L); - sqlset.create_rec(dbfset); - } - } - else - { - for (bool go = dbfset.move_first(); go && !p.iscancelled(); go = dbfset.move_next()) - { - int cmp = 1; - - p.addstatus(1L); - if (!sqlset.eof()) - { - cmp = sqlset.compare_key(dbfset); - while (!sqlset.eof() && cmp > 0) - { - sqlset.remove_rec(dbfset); - sqlset.move_next(); - cmp = sqlset.compare_key(dbfset); - } - } - - if (cmp == 0) - { - if (sqlset.compare_rec(dbfset)) // record modificato - sqlset.update_rec(dbfset); - sqlset.move_next(); - } - else - sqlset.create_rec(dbfset); - } - } - sqlset.commit(); - return true; -} - -void TBoard_app::main_loop() -{ - TBoard_msk m; - while (m.run() == K_ENTER) - { - TSheet_field& s = m.sfield(F_FILES); - const TString& DSN = m.get(F_DSN); - const TDate datef = m.get(F_DATA_INI); - const TDate datet = m.get(F_DATA_FIN); - FOR_EACH_SHEET_ROW(s, r, row) if (row->get_char(0) > ' ') - esporta(DSN, row->get_int(1), datef, datet); - } -} - - -int ca2500(int argc, char* argv[]) -{ - TBoard_app app; - app.run(argc, argv, TR("Invio a Board")); - return 0; -} +#include +#include +#include +#include +#include +#include + +#include "ca2500a.h" + +class TBoard_msk : public TAutomask +{ +protected: + virtual long handler(WINDOW task, EVENT* ep); + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + void update_sheet(); +public: + TBoard_msk(); +}; + +void TBoard_msk::update_sheet() +{ + TSheet_field& s = sfield(F_FILES); + + if (s.empty()) + { + const TPrefix& prf = prefix(); + const TIsam_handle ff[] = { LF_CLIFO, LF_PCON, LF_MOV, LF_RMOV, LF_RMOVIVA, + LF_PCONANA, LF_MOVANA, LF_RMOVANA, LF_RMOVANAC, + LF_COMMESSE, LF_CDC, LF_FASI, 0 }; + for (int i = 0; ff[i]; i++) + { + const TIsam_handle lf = ff[i]; + const TFilename fn = prf.get_filename(lf); + TToken_string& row = s.row(-1); + row.format(" |%d", lf); + row.add(fn.name_only()); + } + } + + TString query; + FOR_EACH_SHEET_ROW(s, r, row) + { + query.format("USE %d", row->get_int(1)); + TISAM_recordset c(query); + row->add(c.items(), 3); + } + s.force_update(); +} + +long TBoard_msk::handler(WINDOW task, EVENT* ep) +{ + if (ep->type == E_TIMER) + { + if (is_running()) + stop_run(K_ENTER); + } + return TAutomask::handler(task, ep); +} + +bool TBoard_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case F_DATA_INI: + case F_DATA_FIN: + if (e == fe_modify) + update_sheet(); + break; + case F_FILES: + if (e == se_query_add || e == se_query_del) + return false; + default: + break; + } + return true; +} + +TBoard_msk::TBoard_msk() : TAutomask("ca2500a") +{ + TDate d(TODAY); + set(F_DATA_FIN, d); + d.set_day(1); + set(F_DATA_INI, d, true); + update_sheet(); +} + +class TBoard_app : public TSkeleton_application +{ +protected: + bool create_table(const TString& DSN, TIsam_handle lf) const; + bool esporta(const TString& DSN, TIsam_handle lf, const TDate& datef, const TDate& datet) const; + +public: + virtual void main_loop(); +}; + +bool TBoard_app::create_table(const TString& DSN, TIsam_handle lf) const +{ + TString query(1024); + TString table = prefix().get_filename(lf).name_only(); table.upper(); + TODBC_recordset set(""); + + if (!set.connect(DSN)) + return false; + +// query.format("SELECT * FROM %s.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='%s'", +// (const char*)recset.dsn(), (const char*)table); + query.format("SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='%s'", + (const char*)table); + set.set(query); + if (set.items()) + return true; + + query.cut(0) << "CREATE TABLE " << table << " (\n"; + const RecDes& rd = prefix().get_recdes(lf); + const bool access = set.driver() == ODBC_access; + + for (int f = 0; f < rd.NFields; f++) + { + const RecFieldDes& fd = rd.Fd[f]; + if (f) query << ','; + query << fd.Name << " "; + switch (fd.TypeF) + { + case _alfafld: query << "varchar(" << fd.Len << ')'; break; + case _realfld: + { + if (access) + query << "currency"; + else + query << "decimal(" << fd.Len << ',' << fd.Dec << ')'; + break; + } + case _datefld: query << "date"; break; + case _boolfld: query << "bit"; break; + case _memofld: + { + if (access) + query << "longtext"; + else + query << "varchar(max)"; + break; + } + default : query << "int"; break; + } + } + //query << ", CONSTRAINT Key0 PRIMARY KEY ("; + query << ", PRIMARY KEY ("; + for (int i = 0; i < rd.Ky[0].NkFields; i++) + { + const RecFieldDes& fd = rd.Fd[rd.Ky[0].FieldSeq[i] % 100]; + + if (i > 0) + query << ", "; + query << " " << fd.Name; + } + query << "));"; + set.exec(query); + set.exec("COMMIT;"); + return true; +} + + +bool TBoard_app::esporta(const TString& DSN, TIsam_handle lf, const TDate& datef, const TDate& datet) const +{ + TString sqlquery, dbfquery; + TToken_string keyexpr; + TODBC_recordset sqlset("", true); + + if (!sqlset.connect(DSN)) + return false; + if (!create_table(DSN, lf)) + return false; + + TString table = prefix().get_filename(lf).name_only(); table.upper(); + + sqlquery.cut(0) << "SELECT * FROM " << table; + dbfquery << "USE " << lf; + + + sqlset.begin(); + + sqlset.set(sqlquery); + sqlset.move_first(); + + TISAM_recordset dbfset(dbfquery); + TString msg("Esportazione tabella "); msg << table; + TProgind p(dbfset.items(), msg); + + if (dbfset.items() == 0) + { + if (sqlset.items() > 0L) + { + TString table = prefix().get_filename(lf).name_only(); table.upper(); + + TString query("DELETE FROM "); query << table << ";"; + sqlset.exec(query); + } + } + else + if (sqlset.items() == 0L) + { + for (bool go = dbfset.move_first(); go&& !p.iscancelled(); go = dbfset.move_next()) + { + p.addstatus(1L); + sqlset.create_rec(dbfset); + } + } + else + { + for (bool go = dbfset.move_first(); go && !p.iscancelled(); go = dbfset.move_next()) + { + int cmp = 1; + + p.addstatus(1L); + if (!sqlset.eof()) + { + cmp = sqlset.compare_key(dbfset); + while (!sqlset.eof() && cmp > 0) + { + sqlset.remove_rec(dbfset); + sqlset.move_next(); + cmp = sqlset.compare_key(dbfset); + } + } + + if (cmp == 0) + { + if (sqlset.compare_rec(dbfset)) // record modificato + sqlset.update_rec(dbfset); + sqlset.move_next(); + } + else + sqlset.create_rec(dbfset); + } + } + sqlset.commit(); + return true; +} + +void TBoard_app::main_loop() +{ + TBoard_msk m; + bool batch = false; + + if (argc() > 2) + { + const TFixed_string a(argv(2)); + + batch = toupper(a[1]) == 'M'; + } + + if (batch) + { + const WINDOW task =TASK_WIN; + WINDOW tray = xvt_trayicon_create(task, 10212, name()); // Washing machine + + if (tray != NULL_WIN) + xvt_vobj_set_visible(task, FALSE); + xvt_timer_create(m.win(), 60 * 1000L); + while (m.run() == K_ENTER) + { + TSheet_field& s = m.sfield(F_FILES); + const TString& DSN = m.get(F_DSN); + const TDate datef = m.get(F_DATA_INI); + const TDate datet = m.get(F_DATA_FIN); + + xvt_vobj_set_visible(task, TRUE); + FOR_EACH_SHEET_ROW(s, r, row) if (row->get_char(0) > ' ') + esporta(DSN, row->get_int(1), datef, datet); + xvt_vobj_set_visible(task, FALSE); + } + xvt_trayicon_destroy(tray); + } + else + { + while (m.run() == K_ENTER) + { + TSheet_field& s = m.sfield(F_FILES); + const TString& DSN = m.get(F_DSN); + const TDate datef = m.get(F_DATA_INI); + const TDate datet = m.get(F_DATA_FIN); + FOR_EACH_SHEET_ROW(s, r, row) if (row->get_char(0) > ' ') + esporta(DSN, row->get_int(1), datef, datet); + } + } +} + + +int ca2500(int argc, char* argv[]) +{ + TBoard_app app; + app.run(argc, argv, TR("Invio a Board")); + return 0; +}