From 9ab30e1bbf3ebff53581abc4ab3c23a447e69e86 Mon Sep 17 00:00:00 2001 From: mtollari Date: Fri, 4 Nov 2016 15:06:37 +0000 Subject: [PATCH] Patch level : 12.0 no-patch Files correlati : Commento : - Sistemati errori connessione, adesso oltre al nome del DSN chiede user e password, (il server del cliente da errore altrimenti) - Sistemate query secondo le ultime richieste di Roberto - Aggiunto salvataggio su ditta.ini nella sezione "Campo_Compass" delle informazioni per il server git-svn-id: svn://10.65.10.50/branches/R_10_00@23396 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- src/ca/ca2600.cpp | 165 +++++++++++++++++++++++++-------------------- src/ca/ca2600a.h | 7 +- src/ca/ca2600a.uml | 13 ++++ 3 files changed, 110 insertions(+), 75 deletions(-) diff --git a/src/ca/ca2600.cpp b/src/ca/ca2600.cpp index 2f16a8196..2be7623a1 100644 --- a/src/ca/ca2600.cpp +++ b/src/ca/ca2600.cpp @@ -48,10 +48,9 @@ bool TCampass_msk::on_field_event(TOperable_field& o, TField_event e, long jolly TCampass_msk::TCampass_msk() : TAutomask("ca2600a") { - TDate d(TODAY); - set(F_DATA_FIN, d); - d.set_day(1); - set(F_DATA_INI, d, true); + set(F_DSN, ini_get_string(CONFIG_DITTA, "Campo_Compass", "DSN")); + set(F_USR, ini_get_string(CONFIG_DITTA, "Campo_Compass", "User")); + set(F_PWD, ini_get_string(CONFIG_DITTA, "Campo_Compass", "Password")); } class TCampass_app : public TSkeleton_application @@ -64,21 +63,20 @@ protected: const TString zeroFill(TString val) const; // Riempe di 0 se non ci sono 6 caratteri //***************************************************************** // Funzioni per segnalare a Compass il trasferimento delle tabelle - TString startExport(const TString& DSN, TString prefixTables) const; - void endExport(const TString& DSN, TString id) const; + TString startExport(const TString& DSN, const TString& usr, const TString& psw, TString prefixTables) const; + void endExport(const TString& DSN, const TString& usr, const TString& psw, TString id) const; //***************************************************************** - bool create_table(const TString& DSN, TIsam_handle lf) const; - bool emptyTables(const TString& DSN) const; - TString esporta(const TString& DSN, const TDate& datef, const TDate& datet) const; + bool emptyTables(const TString& DSN, const TString& usr, const TString& psw) const; + TString esporta(const TString& DSN, const TString& usr, const TString& psw) const; // Funzioni di esportazione - bool a01a(const TString& DSN, const TString id) const; - bool o01a(const TString& DSN, const TString id) const; - bool o02a(const TString& DSN, const TString id) const; - bool o02c(const TString& DSN, const TString id) const; - bool o03a(const TString& DSN, const TString id) const; - bool p01a(const TString& DSN, const TString id) const; - bool p01b(const TString& DSN, const TString id) const; - bool p02a(const TString& DSN, const TString id) const; + bool a01a(const TString& DSN, const TString& usr, const TString& psw, const TString id) const; + bool o01a(const TString& DSN, const TString& usr, const TString& psw, const TString id) const; + bool o02a(const TString CodNum, const TString& DSN, const TString& usr, const TString& psw, const TString id) const; + bool o02c(const TString CodNum, const TString& DSN, const TString& usr, const TString& psw, const TString id) const; + bool o03a(const TString& DSN, const TString& usr, const TString& psw, const TString id) const; + bool p01a(const TString& DSN, const TString& usr, const TString& psw, const TString id) const; + bool p01b(const TString& DSN, const TString& usr, const TString& psw, const TString id) const; + bool p02a(const TString& DSN, const TString& usr, const TString& psw, const TString id) const; //bool o01b(const TString& DSN) const; Messa in pausa public: @@ -113,11 +111,11 @@ const TString TCampass_app::zeroFill(TString val) const return app; } -TString TCampass_app::startExport(const TString& DSN, TString prefixTables) const +TString TCampass_app::startExport(const TString& DSN, const TString& usr, const TString& psw, TString prefixTables) const { TODBC_recordset sqlset("", true); // Controllo la connessione - if (!sqlset.connect(DSN)) + if (!sqlset.connect(DSN, usr, psw)) return ""; //Preparo la query @@ -131,22 +129,22 @@ TString TCampass_app::startExport(const TString& DSN, TString prefixTables) cons return idrunimp.as_string(); } -void TCampass_app::endExport(const TString& DSN, TString id) const +void TCampass_app::endExport(const TString& DSN, const TString& usr, const TString& psw, TString id) const { TODBC_recordset sqlset("", true); - sqlset.connect(DSN); + sqlset.connect(DSN, usr, psw); //Preparo la query TString sqlQuery; sqlQuery << "UPDATE RunImp SET DWEND = CURRENT_TIMESTAMP WHERE IDRUNIMP = '" << id << "'"; sqlset.exec(sqlQuery); sqlset.commit(); } -bool TCampass_app::emptyTables(const TString& DSN) const +bool TCampass_app::emptyTables(const TString& DSN, const TString& usr, const TString& psw) const { TODBC_recordset sqlset(""); TString table; - if (!sqlset.connect(DSN)) + if (!sqlset.connect(DSN, usr, psw)) return false; for (int i = 0; i < tables.size(); i++) @@ -162,7 +160,7 @@ bool TCampass_app::emptyTables(const TString& DSN) const return true; } -TString TCampass_app::esporta(const TString& DSN, const TDate& datef, const TDate& datet) const +TString TCampass_app::esporta(const TString& DSN, const TString& usr, const TString& psw) const { TString errors; // Funzione disabilitata di debug @@ -184,53 +182,60 @@ TString TCampass_app::esporta(const TString& DSN, const TDate& datef, const TDat //endExport(DSN, a01); */ + // Lo so potevo mettere DSN, usr e psw nella classe senza passarli sempre ma me ne sono reso conto dopo + + TODBC_recordset sqlset(""); + if (!sqlset.connect(DSN, usr, psw)) + return "Connessione fallita!"; // INIZIO O01 - TString o01; o01 << startExport(DSN, "O01"); + TString o01; o01 << startExport(DSN, usr, psw, "O01"); - if(!o01a(DSN, o01)) errors << "ERRORE TABELLA: O01A\n"; // O01A + if(!o01a(DSN, usr, psw, o01)) errors << "ERRORE TABELLA: O01A\n"; // O01A - endExport(DSN, o01); + endExport(DSN, usr, psw, o01); // INIZIO O02 - TString o02; o02 << startExport(DSN, "O02"); + TString o02; o02 << startExport(DSN, usr, psw, "O02"); - if(!o02a(DSN, o02)) errors << "ERRORE TABELLA: O02A\n"; // O02A - if(!o02c(DSN, o02)) errors << "ERRORE TABELLA: O02C\n"; // O02C + if(!o02a("ORC", DSN, usr, psw, o02)) errors << "ERRORE TABELLA: O02A\n"; // O02A ORC + if(!o02a("PRC", DSN, usr, psw, o02)) errors << "ERRORE TABELLA: O02A\n"; // O02A PRC + if(!o02c("ORC", DSN, usr, psw, o02)) errors << "ERRORE TABELLA: O02C\n"; // O02C ORC + if(!o02c("PRC", DSN, usr, psw, o02)) errors << "ERRORE TABELLA: O02C\n"; // O02C PRC - endExport(DSN, o02); + endExport(DSN, usr, psw, o02); // INIZIO O03 - TString o03; o03 << startExport(DSN, "O03"); + TString o03; o03 << startExport(DSN, usr, psw, "O03"); - if(!o03a(DSN, o03)) errors << "ERRORE TABELLA: O03A\n"; // O03A + if(!o03a(DSN, usr, psw, o03)) errors << "ERRORE TABELLA: O03A\n"; // O03A - endExport(DSN, o03); + endExport(DSN, usr, psw, o03); // INIZIO p01 - TString p01; p01 << startExport(DSN, "P01"); + TString p01; p01 << startExport(DSN, usr, psw, "P01"); - if(!p01a(DSN, p01)) errors << "ERRORE TABELLA: P01A\n"; // P01A - if(!p01b(DSN, p01)) errors << "ERRORE TABELLA: P01B\n"; // P01B + if(!p01a(DSN, usr, psw, p01)) errors << "ERRORE TABELLA: P01A\n"; // P01A + if(!p01b(DSN, usr, psw, p01)) errors << "ERRORE TABELLA: P01B\n"; // P01B - endExport(DSN, p01); + endExport(DSN, usr, psw, p01); // INIZIO p02 - TString p02; p02 << startExport(DSN, "P02"); + TString p02; p02 << startExport(DSN, usr, psw, "P02"); - if(!p02a(DSN, p02)) errors << "ERRORE TABELLA: P02A\n"; // P02A + if(!p02a(DSN, usr, psw, p02)) errors << "ERRORE TABELLA: P02A\n"; // P02A - endExport(DSN, p02); + endExport(DSN, usr, psw, p02); return errors; } // Non sono molto sicuro del suo funzionamento -bool TCampass_app::a01a(const TString& DSN, const TString id) const +bool TCampass_app::a01a(const TString& DSN, const TString& usr, const TString& psw, const TString id) const { TODBC_recordset sqlset("", true); // Controllo la connessione - if (!sqlset.connect(DSN)) + if (!sqlset.connect(DSN, usr, psw)) return false; TRelation rilprod(LF_RILPROD),rdoc(LF_RIGHEDOC); int items; @@ -256,8 +261,6 @@ bool TCampass_app::a01a(const TString& DSN, const TString id) const filtroFiltro.put("PROVV", rowRilprod.get("PROVV")); filtroFiltro.put("NDOC", rowRilprod.get("NDOC")); TCursor curFiltro(&rdoc, "RIGAEVASA != \"X\"", 1, &filtroFiltro, &filtroFiltro); - if(curFiltro.items() > 1) - bool wtf = true; if(curFiltro.items() > 0) { curFiltro = 0; @@ -289,11 +292,11 @@ bool TCampass_app::a01a(const TString& DSN, const TString id) const } return sqlset.commit() == -1 ? false : true; } -bool TCampass_app::o01a(const TString& DSN, const TString id) const +bool TCampass_app::o01a(const TString& DSN, const TString& usr, const TString& psw, const TString id) const { TODBC_recordset sqlset("", true); // Controllo la connessione - if (!sqlset.connect(DSN)) + if (!sqlset.connect(DSN, usr, psw)) return false; TRelation doc(LF_DOC),rdoc(LF_RIGHEDOC); int items; @@ -366,19 +369,20 @@ bool TCampass_app::o01a(const TString& DSN, const TString id) const } return sqlset.commit() == -1 ? false : true; } -bool TCampass_app::o02a(const TString& DSN, const TString id) const +bool TCampass_app::o02a(const TString CodNum, const TString& DSN, const TString& usr, const TString& psw, const TString id) const { TODBC_recordset sqlset("", true); // Controllo la connessione - if (!sqlset.connect(DSN)) + if (!sqlset.connect(DSN, usr, psw)) return false; TRelation doc(LF_DOC),rdoc(LF_RIGHEDOC); int items; TString msg("Esportazione tabella "); msg << "O02A"; // Creo il filtro per la chiave del cursore, da quel che ho capito le chiavi sono pių veloci di un filtro (come č possibile?) - TRectype filtroRDoc(rdoc.curr()); filtroRDoc.put("CODNUM", "ORC"); + TRectype filtroRDoc(rdoc.curr()); filtroRDoc.put("CODNUM", CodNum); TCursor curRDoc(&rdoc, "", 1, &filtroRDoc, &filtroRDoc); items = curRDoc.items(); + TProgress_monitor p(items, msg); // Adesso inserisco tutta la bella roba for (curRDoc = 0; curRDoc.pos() < items && !p.is_cancelled(); ++curRDoc) @@ -406,7 +410,7 @@ bool TCampass_app::o02a(const TString& DSN, const TString id) const // Inserisco IKRUNIMP, FAZI, CStr, CMAG, CCLIH, CCLIR, CCLI sqlQuery << "INSERT INTO O02A ( IKRUNIMP, FAZI, CStr, CMAG, CCLIH, CCLIR, CCLI, FLGSTA, XRIFCLI, XNOTE, CART, QCORD, QCSPE, DCCONF ) \ - VALUES('" << id << "','U','DBS','" << rowRDoc.get("CODMAG") << "','" << zeroFill(rowRDoc.get("NDOC")) << "','" << rowRDoc.get("NRIGA") << "','" << zeroFill(rowDoc.get("CODCF")) << "','"; + VALUES('" << id << "','U','DBS','" << rowRDoc.get("CODMAG") << "','" << rowRDoc.get("ANNO") << "." << zeroFill(rowRDoc.get("NDOC")) << "','" << rowRDoc.get("NRIGA") << "','" << zeroFill(rowDoc.get("CODCF")) << "','"; // Inserisco FLGSTA sqlQuery << (rowRDoc.get("RIGAEVASA") == "X" ? "C" : "A"); // Inserisco XRIFCLI, XNOTE, CART, QCORD, QCSPE, DCCONF @@ -418,11 +422,11 @@ bool TCampass_app::o02a(const TString& DSN, const TString id) const } return sqlset.commit() == -1 ? false : true; } -bool TCampass_app::o02c(const TString& DSN, const TString id) const +bool TCampass_app::o02c(const TString CodNum, const TString& DSN, const TString& usr, const TString& psw, const TString id) const { TODBC_recordset sqlset("", true); // Controllo la connessione - if (!sqlset.connect(DSN)) + if (!sqlset.connect(DSN, usr, psw)) return false; TRelation doc(LF_DOC),rdoc(LF_RIGHEDOC); int items; @@ -431,6 +435,7 @@ bool TCampass_app::o02c(const TString& DSN, const TString id) const TRectype filtroRDoc(rdoc.curr()); filtroRDoc.put("CODNUM", "ORP1"); TCursor curRDoc(&rdoc, "", 1, &filtroRDoc, &filtroRDoc); items = curRDoc.items(); + TProgress_monitor p(items, msg); // Adesso inserisco tutta la bella roba for (curRDoc = 0; curRDoc.pos() < items && !p.is_cancelled(); ++curRDoc) @@ -444,7 +449,7 @@ bool TCampass_app::o02c(const TString& DSN, const TString id) const // Vado a prendere la riga di riferimento TRectype filtroFiltro(rdoc.curr()); - if(rowRDoc.get("DACODNUM") == "ORC") + if(rowRDoc.get("DACODNUM") == CodNum) { filtroFiltro.put("CODNUM", rowRDoc.get("DACODNUM")); filtroFiltro.put("ANNO", rowRDoc.get("DAANNO")); @@ -468,11 +473,11 @@ bool TCampass_app::o02c(const TString& DSN, const TString id) const } return sqlset.commit() == -1 ? false : true; } -bool TCampass_app::o03a(const TString& DSN, const TString id) const +bool TCampass_app::o03a(const TString& DSN, const TString& usr, const TString& psw, const TString id) const { TODBC_recordset sqlset("", true); // Controllo la connessione - if (!sqlset.connect(DSN)) + if (!sqlset.connect(DSN, usr, psw)) return false; TRelation clifo(LF_CLIFO); int items; @@ -502,11 +507,11 @@ bool TCampass_app::o03a(const TString& DSN, const TString id) const } return sqlset.commit() == -1 ? false : true; } -bool TCampass_app::p01a(const TString& DSN, const TString id) const +bool TCampass_app::p01a(const TString& DSN, const TString& usr, const TString& psw, const TString id) const { TODBC_recordset sqlset("", true); // Controllo la connessione - if (!sqlset.connect(DSN)) + if (!sqlset.connect(DSN, usr, psw)) return false; TRelation anamag(LF_ANAMAG), rdist(LF_RDIST), umart(LF_UMART); int items; @@ -527,8 +532,8 @@ bool TCampass_app::p01a(const TString& DSN, const TString id) const // Prendo la riga di ANAMAG TRectype rowAna = curAna.curr(); // Inserisco IKRUNIMP,CART,RPART,CFAM - sqlQuery << "INSERT INTO P01A (IKRUNIMP,CART,RART,CFAM,CTART,CUDMP,CUDMM,CUDMA,CUDMV,PCONVPMN,PCONVPMD,PCONVPVN,PCONVPVD,PCONVPAN,PCONVPAD,FOBS) \ - VALUES('" << id << "','" << toEscape(rowAna.get("CODART")) << "','" << toEscape(rowAna.get("DESCR")) << "','" << getFam(rowAna.get("CODART")) <<"','"; + sqlQuery << "INSERT INTO P01A (IKRUNIMP,FAZI,CStr,CART,RART,CFAM,CTART,CUDMP,CUDMM,CUDMA,CUDMV,PCONVPMN,PCONVPMD,PCONVPVN,PCONVPVD,PCONVPAN,PCONVPAD,FOBS) \ + VALUES('" << id << "','U','DBS','" << toEscape(rowAna.get("CODART")) << "','" << toEscape(rowAna.get("DESCR")) << "','" << getFam(rowAna.get("CODART")) <<"','"; /**************************************************************************** @@ -605,11 +610,11 @@ bool TCampass_app::p01a(const TString& DSN, const TString id) const } return sqlset.commit() == -1 ? false : true; } -bool TCampass_app::p01b(const TString& DSN, const TString id) const +bool TCampass_app::p01b(const TString& DSN, const TString& usr, const TString& psw, const TString id) const { TODBC_recordset sqlset("", true); // Controllo la connessione - if (!sqlset.connect(DSN)) + if (!sqlset.connect(DSN, usr, psw)) return false; TRelation anamag(LF_ANAMAG); int items; @@ -639,11 +644,11 @@ bool TCampass_app::p01b(const TString& DSN, const TString id) const } return sqlset.commit() == -1 ? false : true; } -bool TCampass_app::p02a(const TString& DSN, const TString id) const +bool TCampass_app::p02a(const TString& DSN, const TString& usr, const TString& psw, const TString id) const { TODBC_recordset sqlset("", true); // Controllo la connessione - if (!sqlset.connect(DSN)) + if (!sqlset.connect(DSN, usr, psw)) return false; TRelation tab(LF_TAB); int items; @@ -704,12 +709,19 @@ void TCampass_app::main_loop() while (m.run() == K_ENTER) { const TString& DSN = m.get(F_DSN); - const TDate datef = m.get(F_DATA_INI); - const TDate datet = m.get(F_DATA_FIN); + const TString& usr = m.get(F_USR); + const TString& psw = m.get(F_PWD); // Non ho la pių pallida idea di cosa siano ste robe xvt_vobj_set_visible(task, TRUE); - TString errors; errors << esporta(DSN, datef, datet); - if(errors = "") message_box("Esportazione effettuata correttamente!"); + TString errors; errors << esporta(DSN, usr, psw); + if(errors == "") + { + message_box("Esportazione effettuata correttamente!"); + // Salvo i parametri + ini_set_string(CONFIG_DITTA, "Campo_Compass", "DSN", DSN); + ini_set_string(CONFIG_DITTA, "Campo_Compass", "User", usr); + ini_set_string(CONFIG_DITTA, "Campo_Compass", "Password", psw); + } else message_box(errors); xvt_vobj_set_visible(task, FALSE); } @@ -720,11 +732,18 @@ void TCampass_app::main_loop() while (m.run() == K_ENTER) { const TString& DSN = m.get(F_DSN); - const TDate datef = m.get(F_DATA_INI); - const TDate datet = m.get(F_DATA_FIN); + const TString& usr = m.get(F_USR); + const TString& psw = m.get(F_PWD); // Chiamo la funzione globale esporta - TString errors; errors << esporta(DSN, datef, datet); - if(errors = "") message_box("Esportazione effettuata correttamente!"); + TString errors; errors << esporta(DSN, usr, psw); + if(errors == "") + { + message_box("Esportazione effettuata correttamente!"); + // Salvo i parametri + ini_set_string(CONFIG_DITTA, "Campo_Compass", "DSN", DSN); + ini_set_string(CONFIG_DITTA, "Campo_Compass", "User", usr); + ini_set_string(CONFIG_DITTA, "Campo_Compass", "Password", psw); + } else message_box(errors); } } @@ -747,7 +766,7 @@ bool TCampass_app::o01b(const TString& DSN) const { TODBC_recordset sqlset("", true); // Controllo la connessione - if (!sqlset.connect(DSN)) + if (!sqlset.connect(DSN, usr, psw)) return false; TRelation rdoc(LF_RIGHEDOC), rdist(LF_RDIST), tab(LF_TAB); int items; diff --git a/src/ca/ca2600a.h b/src/ca/ca2600a.h index ec6ba4335..de39351c9 100644 --- a/src/ca/ca2600a.h +++ b/src/ca/ca2600a.h @@ -1,3 +1,6 @@ #define F_DSN 250 -#define F_DATA_INI 251 -#define F_DATA_FIN 252 +#define F_USR 251 +#define F_PWD 252 +#define F_DATA_INI 253 +#define F_DATA_FIN 254 + diff --git a/src/ca/ca2600a.uml b/src/ca/ca2600a.uml index 391cbbe68..c3722e91e 100644 --- a/src/ca/ca2600a.uml +++ b/src/ca/ca2600a.uml @@ -14,6 +14,19 @@ BEGIN CHECKTYPE REQUIRED END +STRING F_USR 16 +BEGIN + PROMPT 1 2 "User " + CHECKTYPE REQUIRED +END + +STRING F_PWD 16 +BEGIN + PROMPT 1 3 "Password " + CHECKTYPE REQUIRED + FLAGS "*" +END + DATE F_DATA_INI BEGIN PROMPT 1 2 "Data iniziale "