Patch level : 10.0 pers
Files correlati : ca2.exe ca2500a.msk Ricompilazione Demo : [ ] Commento : Aggiunto programma di invio a Board git-svn-id: svn://10.65.10.50/branches/R_10_00@23199 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
158582aa86
commit
9f9e20f560
@ -10,6 +10,7 @@ int main(int argc, char** argv)
|
||||
case 1: ca2200(argc, argv); break; // ripartizione movimenti analitica
|
||||
case 2: ca2300(argc, argv); break; // ricalcolo saldi
|
||||
case 3: ca2400(argc, argv); break; // ricalcolo righe competenza
|
||||
case 4: ca2500(argc, argv); break; // esportazione a Board
|
||||
default: ca2100(argc, argv); break; // gestione movimenti
|
||||
}
|
||||
return 0;
|
||||
|
1
ca/ca2.h
1
ca/ca2.h
@ -5,5 +5,6 @@ int ca2100(int argc, char* argv[]);
|
||||
int ca2200(int argc, char* argv[]);
|
||||
int ca2300(int argc, char* argv[]);
|
||||
int ca2400(int argc, char* argv[]);
|
||||
int ca2500(int argc, char* argv[]);
|
||||
|
||||
#endif // __CA2_H
|
||||
|
228
ca/ca2500.cpp
Normal file
228
ca/ca2500.cpp
Normal file
@ -0,0 +1,228 @@
|
||||
#include <applicat.h>
|
||||
#include <automask.h>
|
||||
#include <progind.h>
|
||||
#include <odbcrset.h>
|
||||
#include <relation.h>
|
||||
#include <utility.h>
|
||||
|
||||
#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(TODBC_recordset& recset, 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(TODBC_recordset& recset, TIsam_handle lf) const
|
||||
{
|
||||
TString query(1024);
|
||||
TString table = prefix().get_filename(lf).name_only(); table.upper();
|
||||
|
||||
// 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);
|
||||
recset.set(query);
|
||||
if (recset.items())
|
||||
return true;
|
||||
|
||||
query.cut(0) << "CREATE TABLE " << table << " (\n";
|
||||
const RecDes& rd = prefix().get_recdes(lf);
|
||||
const bool access = recset.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 << "));";
|
||||
recset.exec(query);
|
||||
recset.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("");
|
||||
if (!sqlset.connect(DSN))
|
||||
return false;
|
||||
|
||||
if (!create_table(sqlset, lf))
|
||||
return false;
|
||||
|
||||
TString table = prefix().get_filename(lf).name_only(); table.upper();
|
||||
|
||||
sqlquery.cut(0) << "SELECT * FROM " << table;
|
||||
dbfquery << "USE " << lf;
|
||||
// switch (lf)
|
||||
// {
|
||||
// default: break;
|
||||
// }
|
||||
|
||||
sqlset.begin();
|
||||
|
||||
sqlset.set(sqlquery);
|
||||
sqlset.move_first();
|
||||
|
||||
TISAM_recordset dbfset(dbfquery);
|
||||
TString msg("Esportazione tabella "); msg << table;
|
||||
TProgind p(dbfset.items(), msg);
|
||||
|
||||
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 (cmp > 0)
|
||||
{
|
||||
sqlset.remove_rec(dbfset);
|
||||
sqlset.move_next();
|
||||
sqlset.compare_key(dbfset);
|
||||
}
|
||||
}
|
||||
|
||||
if (cmp == 0)
|
||||
{
|
||||
if (sqlset.compare_rec(dbfset)) // record modificato
|
||||
sqlset.update_rec(dbfset);
|
||||
}
|
||||
else
|
||||
sqlset.create_rec(dbfset);
|
||||
sqlset.move_next();
|
||||
}
|
||||
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;
|
||||
}
|
4
ca/ca2500a.h
Normal file
4
ca/ca2500a.h
Normal file
@ -0,0 +1,4 @@
|
||||
#define F_DSN 250
|
||||
#define F_DATA_INI 251
|
||||
#define F_DATA_FIN 252
|
||||
#define F_FILES 253
|
77
ca/ca2500a.uml
Normal file
77
ca/ca2500a.uml
Normal file
@ -0,0 +1,77 @@
|
||||
#include "ca2500a.h"
|
||||
|
||||
TOOLBAR "topbar" 0 0 0 2
|
||||
|
||||
#include <elabar.h>
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Invio a Board" 0 2 0 0
|
||||
|
||||
STRING F_DSN 260 40
|
||||
BEGIN
|
||||
PROMPT 1 0 "ODBC DSN "
|
||||
END
|
||||
|
||||
DATE F_DATA_INI
|
||||
BEGIN
|
||||
PROMPT 1 2 "Data iniziale "
|
||||
END
|
||||
|
||||
DATE F_DATA_FIN
|
||||
BEGIN
|
||||
PROMPT 1 3 "Data finale "
|
||||
END
|
||||
|
||||
SPREADSHEET F_FILES 78 -1
|
||||
BEGIN
|
||||
PROMPT 1 5 ""
|
||||
ITEM "Selezione"
|
||||
ITEM "Numero"
|
||||
ITEM "Denominazione@40"
|
||||
ITEM "Record@8"
|
||||
END
|
||||
|
||||
STRING DLG_PROFILE 260 50
|
||||
BEGID
|
||||
PROMPT 1 -1 "Profilo "
|
||||
PSELECT
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
||||
PAGE "Riga" -1 -1 60 5
|
||||
|
||||
BOOLEAN 101
|
||||
BEGIN
|
||||
PROMPT 1 1 "Selezionato per invio"
|
||||
END
|
||||
|
||||
NUMBER 102 2
|
||||
BEGIN
|
||||
PROMPT 1 3 "File "
|
||||
FLAGS "L"
|
||||
END
|
||||
|
||||
STRING 103 32
|
||||
BEGIN
|
||||
PROMPT 10 2 ""
|
||||
FLAGS "L"
|
||||
END
|
||||
|
||||
NUMBER 104 8
|
||||
BEGIN
|
||||
PROMPT 30 1 ""
|
||||
FLAGS "L"
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 8 2
|
||||
BEGIN
|
||||
PROMPT -11 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
Loading…
x
Reference in New Issue
Block a user