Ripristino EOD ed EOX originali in caso di conversione con errore.

git-svn-id: svn://10.65.10.50/trunk@1562 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
angelo 1995-07-05 14:56:36 +00:00
parent 094e90a18d
commit f0a7a654b7

View File

@ -10,7 +10,6 @@
#define DAYYEAR 365
extern "C" {
int CGetFieldBuff(char *, RecDes *, char *, char *);
int findfld(RecDes *, const char *);
};
@ -64,6 +63,7 @@ HIDDEN int CGetField(const char *fieldname,RecDes* recd,RecType recin,long* d)
class TIsam_date_converter : public TApplication
{
TFilename _logfile;
protected:
virtual bool create () ;
@ -83,7 +83,9 @@ bool TIsam_date_converter::create() // initvar e arrmask
{
TApplication::create();
_logfile.temp("convlog");
FILE * fp = fopen((const char*)_logfile,"w");
fclose(fp);
update();
return FALSE;
}
@ -130,6 +132,9 @@ void TIsam_date_converter::update()
else prefix().set(pref);
set_autoload_new_files(TRUE);
end_wait();
TString80 s;
s << "Esaminare il file di log " << _logfile << " in caso di errori." ;
message_box(s);
}
void TIsam_date_converter::update_dir()
@ -199,9 +204,10 @@ int TIsam_date_converter::convert_file(int logicnum)
TDir dir;
TTrec r;
int err = NOERR;
bool restore_original=FALSE;
r.get(logicnum);
RecDes *rd=r.rec();
TRecnotype i;
const int nflds = r.fields();
const int nkeys = r.keys();
@ -230,7 +236,6 @@ int TIsam_date_converter::convert_file(int logicnum)
TLocalisamfile newfile(logicnum);
TToken_string ts(128); // Build token_string with the names of date fields and logical fields
TToken_string tslog(128);
TRecnotype i;
for (int j=0; j<r.fields(); j++)
if (rd->Fd[j].TypeF == _datefld)
@ -270,6 +275,7 @@ int TIsam_date_converter::convert_file(int logicnum)
}
p.setstatus((long)nitems);
f.close();
err=newfile.status();
if (newfile.good())
{
old.ext("dta");
@ -278,8 +284,11 @@ int TIsam_date_converter::convert_file(int logicnum)
::remove(old);
}
else
error_box("Errore nella conversione dell' archivio %s record %ld : n.ro %d",
fp, i, newfile.status());
{
error_box("Errore n.ro %d nella conversione dell' archivio %s:\n %ld records non convertiti.",
err, fp, nitems - i + 2);
restore_original=TRUE;
}
}
else
{
@ -305,6 +314,28 @@ int TIsam_date_converter::convert_file(int logicnum)
}
}
}
if (restore_original)
{
// Remove files partially converted
old.ext("dbf");
::remove(old);
TToken_string t(10);
get_idx_names(logicnum,t);
for (const char * name=t.get(0); name != NULL; name=t.get())
::remove(name);
if (t.items() > 1) // A .cgp must be removed too!
{
old.ext("cgp");
::remove(old);
}
// Put dir to restore original EOD and EOX.
dir.put(logicnum);
FILE *fp = fopen((const char*)_logfile,"a");
old.ext("dta");
fprintf(fp,"File: %s (%d). %ld records non convertiti. Errore %d.\n",
(const char*) old, logicnum, nitems-i+2, err);
fclose(fp);
}
return err;
}