//AB2100.CPP: Ricezione-Trasferimetno tabelle #include #include #include #include "ab2100a.h" #include "ab2.h" #include "ab2100.h" /* ********************************************************************************************************* */ /* TTrasfer */ /*********************************************************************************************************** */ TObject_reception *TRicezione::set_transfer(int tipo_ricezione ,const TFilename & percorso, const TString & config_name) { if (_rice != NULL) delete _rice; switch (tipo_ricezione) { case RICEZIONE_INTERNA: _rice = new TObject_reception(percorso); break; case RICEZIONE_AS400: _rice = new TRicezione_AS400(percorso); break; case RICEZIONE_USER_DEFINED: _rice = new TRicezione_userdef(config_name,percorso); break; } return _rice; } int ab2100(int argc, char **argv) { char *rt = argv[2]+1; //Leggo se è richiesta la ricezine (r/R) o il trasferimento (t/T) *rt=toupper(*rt); switch (*rt) { case 'R': //Ricezione { ab2101(argc,argv); break; } case 'T': //Trasferimento { ab2102(argc,argv); break; } default: error_box (TR("Sintassi: \n -0 -R - per ricezione \n -0 -T - per trasferimenTo")); } return 0; } TAdditional_car::TAdditional_car() : TRectype(LF_CARADD) { } void TAdditional_car::put_str(const char* fieldname, const char* val) { if (strcmp(fieldname,ABCA_ID)==0) { static TString16 id; CHECK(length(ABCA_ID)<=16,"ID in CARADD deve essere max lungo 16"); id = val; id.right_just(length(ABCA_ID)); TRectype::put_str(fieldname, (const char *)id); } else TRectype::put_str(fieldname, val); } bool TAdditional_car::same_as(real other_id) { bool r; //TLocalisamfile ca(LF_CARADD); TAdditional_cars ca; ca.put(ABCA_ID,other_id); ca.read(); real id = get_real(ABCA_ID); put(ABCA_ID,ca.get(ABCA_ID)); r= (*this == ca.curr()); put(ABCA_ID,id); return r; } TAdditional_cars::TAdditional_cars(TFilelock lockmode) : TLocalisamfile (LF_CARADD) { set_curr(new TAdditional_car()); if (lockmode==_excllock) { lock(); //Il file è già aperto: gli faccio un lock if (last()==NOERR) _lastid=get_long(ABCA_ID); else _lastid=0; } else _lastid=-1; } long TAdditional_cars::lastid() { if (_lastid>=0) { return _lastid; } else { TLocalisamfile ca(LF_CARADD); if (ca.last()==NOERR) return atol(get(ABCA_ID)); else return 0; } } int TAdditional_cars::write() { int err; if (_lastid>=0) { curr().put(ABCA_ID,++_lastid); err=TLocalisamfile::write(); } else { do { curr().put(ABCA_ID,lastid()+1); err=TLocalisamfile::write(); } while (err==_isdupkey); } return err; } /***********************/ long TAdditional_cols::_lastid = 0; int TAdditional_cols::write() { int err = NOERR; bool scrivo = FALSE; for (int i = curr().items(); (i > 1) && (!scrivo); i--) //Estraggo il campo { const char * name_field = curr().fieldname(i); const char * str = ""; if (name_field) //Inizializzo la stringa solo se il puntatore non è nullo str = curr().get(name_field); if (strlen(str) > 0) //Se la stringa è stata inizilizzata a qualcosa entro per controllare { for (int ii = 0; str[ii]; ii++) {//scorro il contenuto del campo per controllare se è vuoto if ((str[ii] != ' ') && (str[ii] != '0')) { scrivo = TRUE; //se trovo qualcosa di "non vuoto" setto il flag di scrittura break; } } } } if (scrivo) { do { curr().put(ABCD_ID,++_lastid); err=TLocalisamfile::write(); } while (err==_isdupkey); err=TLocalisamfile::write(); } else curr().put(ABCD_ID,0); //Il record non è stato scritto ma devo inserire nella chiave del rocord //l'indice (=0) poichè questo andrà inserito in RELANA return err; }