Patch level : 2.0 552
Files correlati : cg2.exe Ricompilazione Demo : [ ] Commento : Aggiunti flag necessari per segnalre in prima nota i movimenti gia' inviati durante la navigazione tramite la nuova toolbar git-svn-id: svn://10.65.10.50/trunk@11385 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									c2098e7eab
								
							
						
					
					
						commit
						65eb669bfb
					
				@ -31,7 +31,6 @@
 | 
			
		||||
#include <codeb.h>
 | 
			
		||||
#include <rectypes.h>
 | 
			
		||||
#include <progind.h>
 | 
			
		||||
#include <checks.h>
 | 
			
		||||
 | 
			
		||||
/*--------------------------------------------------------------------------
 | 
			
		||||
  numero massimo di database aperti contemporaneamente
 | 
			
		||||
@ -96,7 +95,7 @@ void DB_exit(void)
 | 
			
		||||
  apertura del file 'filename'. Il parametro mode consente se != 0 l'apertura
 | 
			
		||||
  esclusiva. Il parametro index consente se == 0 l'apertura senza indici
 | 
			
		||||
  --------------------------------------------------------------------------*/
 | 
			
		||||
int  DB_open(const char *filename,int mode,int index)
 | 
			
		||||
int DB_open(const char *filename,int mode,int index)
 | 
			
		||||
{
 | 
			
		||||
  int i,found;
 | 
			
		||||
 | 
			
		||||
@ -133,7 +132,7 @@ int  DB_open(const char *filename,int mode,int index)
 | 
			
		||||
  chiusura del database inviduato da handle
 | 
			
		||||
  torna -1 se il database non puo essere chiuso
 | 
			
		||||
  --------------------------------------------------------------------------*/
 | 
			
		||||
int  DB_close(int handle)
 | 
			
		||||
int DB_close(int handle)
 | 
			
		||||
{
 | 
			
		||||
  if(!handle_ok(handle)) return(-1);
 | 
			
		||||
  d4close(dbdata[handle]);
 | 
			
		||||
@ -382,13 +381,8 @@ int DB_recall(int handle)
 | 
			
		||||
int DB_flush(int handle)
 | 
			
		||||
{
 | 
			
		||||
  int rt;
 | 
			
		||||
 | 
			
		||||
  while ((rt = d4flush(dbdata[handle])) == r4locked)
 | 
			
		||||
#ifdef DBG
 | 
			
		||||
    yesnofatal_box("Sono in attesa nella DB_flush");
 | 
			
		||||
#else
 | 
			
		||||
  u4delaySec();
 | 
			
		||||
#endif
 | 
			
		||||
    u4delaySec();
 | 
			
		||||
  return rt;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -400,25 +394,19 @@ int DB_rewrite(int handle)
 | 
			
		||||
  int rt;
 | 
			
		||||
  if(!handle_ok(handle)) return(-1);
 | 
			
		||||
  while ((rt=d4write(dbdata[handle],d4recNo(dbdata[handle]))) == r4locked)
 | 
			
		||||
#ifdef DBG
 | 
			
		||||
    yesnofatal_box("Sono in attesa nella DB_rewrite");
 | 
			
		||||
#else
 | 
			
		||||
  u4delaySec();
 | 
			
		||||
#endif
 | 
			
		||||
    u4delaySec();
 | 
			
		||||
  if (rt == 0)
 | 
			
		||||
  {
 | 
			
		||||
    while ((rt = d4flush(dbdata[handle])) == r4locked)
 | 
			
		||||
#ifdef DBG
 | 
			
		||||
      yesnofatal_box("Sono in attesa nella DB_rewrite (d4flush)");
 | 
			
		||||
#else
 | 
			
		||||
    u4delaySec();
 | 
			
		||||
#endif
 | 
			
		||||
      u4delaySec();
 | 
			
		||||
  }
 | 
			
		||||
  if (rt == e4unique)
 | 
			
		||||
  {
 | 
			
		||||
    char msg[256];
 | 
			
		||||
    DB_get_error();
 | 
			
		||||
    fatal_box("Errore in DB_rewrite(): chiave  duplicata nel record %ld, file %s",
 | 
			
		||||
    sprintf(msg, "Errore in DB_rewrite(): chiave  duplicata nel record %ld, file %s",
 | 
			
		||||
              d4recNo(dbdata[handle]) + 1, d4fileName(dbdata[handle]));
 | 
			
		||||
    xvt_dm_post_fatal_exit(msg);
 | 
			
		||||
  }
 | 
			
		||||
  rt=DB_unlock(handle);
 | 
			
		||||
  return (rt);
 | 
			
		||||
@ -439,35 +427,27 @@ int DB_add(int handle)
 | 
			
		||||
  if (is_locked == 0)   /* Se non e' stato gia' bloccato in modo esclusivo */
 | 
			
		||||
  {
 | 
			
		||||
    while (d4lockAll(data) == r4locked)
 | 
			
		||||
#ifdef DBG
 | 
			
		||||
      yesnofatal_box("Sono in attesa nella DB_add");
 | 
			
		||||
#else
 | 
			
		||||
    u4delaySec();
 | 
			
		||||
#endif
 | 
			
		||||
      u4delaySec();
 | 
			
		||||
  }
 | 
			
		||||
  while ((rt = d4appendStart(data,0)) == r4locked)
 | 
			
		||||
#ifdef DBG
 | 
			
		||||
    yesnofatal_box("Sono in attesa nella DB_add (d4append_start)");
 | 
			
		||||
#else
 | 
			
		||||
  u4delaySec();
 | 
			
		||||
#endif
 | 
			
		||||
    u4delaySec();
 | 
			
		||||
  if (rt == 0)
 | 
			
		||||
  {
 | 
			
		||||
    d4recall(data);
 | 
			
		||||
    while ((rt = d4append(data)) == r4locked)
 | 
			
		||||
#ifdef DBG
 | 
			
		||||
      yesnofatal_box("Sono in attesa nella DB_add (d4append)");
 | 
			
		||||
#else
 | 
			
		||||
    u4delaySec();
 | 
			
		||||
#endif
 | 
			
		||||
      u4delaySec();
 | 
			
		||||
    if (rt == e4unique)
 | 
			
		||||
    {
 | 
			
		||||
      long rec_num = d4recNo(data);
 | 
			
		||||
 | 
			
		||||
      DB_get_error();
 | 
			
		||||
      if (rec_num > 0)
 | 
			
		||||
        fatal_box("Errore in DB_add(): chiave duplicata nell' indice %ld, file %s",
 | 
			
		||||
                   rec_num + 1, d4fileName(data));
 | 
			
		||||
      {
 | 
			
		||||
        char msg[256];
 | 
			
		||||
        sprintf(msg, "Errore in DB_add(): chiave duplicata nell' indice %ld, file %s",
 | 
			
		||||
                     rec_num + 1, d4fileName(data));
 | 
			
		||||
        xvt_dm_post_fatal_exit(msg);
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
        rt = _isreinsert;
 | 
			
		||||
    }
 | 
			
		||||
@ -475,11 +455,7 @@ int DB_add(int handle)
 | 
			
		||||
      if (rt == 0)
 | 
			
		||||
      {
 | 
			
		||||
        while ((rt = d4flush(data)) == r4locked)
 | 
			
		||||
#ifdef DBG
 | 
			
		||||
          yesnofatal_box("Sono in attesa nella DB_add (d4flush)");
 | 
			
		||||
#else
 | 
			
		||||
        u4delaySec();
 | 
			
		||||
#endif
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
  DB_unlock(handle);
 | 
			
		||||
@ -745,6 +721,12 @@ int DB_clean_file(int handle, char * filename, char * ff, RecDes * r, short vis)
 | 
			
		||||
/*-------------------------------------------------------------------------
 | 
			
		||||
  Compatta gli indici
 | 
			
		||||
  --------------------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
int DB_yesnobox(const char* msg)
 | 
			
		||||
{
 | 
			
		||||
  return xvt_dm_post_ask("Si", "No", NULL, msg) == RESP_DEFAULT;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int DB_packindex(short vis, const char * filename, RecDes *r, long *peod, bool ask)
 | 
			
		||||
{
 | 
			
		||||
  int rt=0,handle;
 | 
			
		||||
@ -760,7 +742,7 @@ int DB_packindex(short vis, const char * filename, RecDes *r, long *peod, bool a
 | 
			
		||||
  if (handle >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    int i;
 | 
			
		||||
    char *ff = find_slash_backslash((char *)filename);
 | 
			
		||||
    char *ff = find_slash_backslash(filename);
 | 
			
		||||
    if (vis)
 | 
			
		||||
      progind_create((long)r->NKeys,s,0,1,60);
 | 
			
		||||
    if ((ff == NULL) || *ff == '\0')
 | 
			
		||||
@ -778,7 +760,7 @@ int DB_packindex(short vis, const char * filename, RecDes *r, long *peod, bool a
 | 
			
		||||
    if (rt == e4unique || rt == r4unique)
 | 
			
		||||
    {
 | 
			
		||||
      rt = 0;
 | 
			
		||||
      if (!ask || yesno_box("Sono stati rilevati alcuni records duplicati nel file %s. Devo eliminarli ?",filename)) 
 | 
			
		||||
      if (!ask || DB_yesnobox("Sono stati rilevati alcuni records duplicati:\nsi desidera eliminarli?")) 
 | 
			
		||||
        rt = DB_clean_file(handle, (char*) filename, ff, r, vis);
 | 
			
		||||
      else
 | 
			
		||||
        tags[0].unique = r4unique_continue;
 | 
			
		||||
@ -839,7 +821,7 @@ int DB_build(const char * filename, RecDes *r)
 | 
			
		||||
  TAG4INFO   tag_info[MaxKeys+1];     /* Numero di chiavi in un file  */
 | 
			
		||||
  DATA4      *dbuilded;
 | 
			
		||||
  int rt=0,i;
 | 
			
		||||
  char *ff = find_slash_backslash((char *)filename);
 | 
			
		||||
  char *ff = find_slash_backslash(filename);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  for (i=0; ((i<r->NFields) && (i<MaxFields)); i++) /* Construct field_info */
 | 
			
		||||
@ -940,7 +922,11 @@ int DB_recinfo(const char * filename, FileDes *d, RecDes *r, char* keys)
 | 
			
		||||
    field_info = d4fieldInfo(data_file);
 | 
			
		||||
    index_file = d4index(data_file,"" /*(char*)filename */);
 | 
			
		||||
    if (index_file == NULL)
 | 
			
		||||
      fatal_box("Il file %s e' senza indici.",filename);
 | 
			
		||||
    {
 | 
			
		||||
      char msg[256];
 | 
			
		||||
      sprintf(msg, "Il file %s e' senza indici.",filename);
 | 
			
		||||
      xvt_dm_post_fatal_exit(msg);
 | 
			
		||||
    }
 | 
			
		||||
    tag_info   = i4tagInfo(index_file);
 | 
			
		||||
    d->EOD = d->EOX = d4recCount(data_file);
 | 
			
		||||
    d->LenR = (word)d4recWidth(data_file);
 | 
			
		||||
@ -1221,7 +1207,7 @@ bool handle_ok(int handle)
 | 
			
		||||
  return handle >=0 && handle < CB4FILES && dbdata[handle] !=0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static char * find_slash_backslash(char * str)
 | 
			
		||||
static char * find_slash_backslash(const char * str)
 | 
			
		||||
{
 | 
			
		||||
  static char* xstr = NULL;
 | 
			
		||||
  int l=strlen(str);
 | 
			
		||||
@ -2014,7 +2000,7 @@ int DB_packindex(short vis, const char * filename, RecDes *r, long *peod, bool a
 | 
			
		||||
  if (handle > -1)
 | 
			
		||||
  {
 | 
			
		||||
    int i;
 | 
			
		||||
    char *ff = find_slash_backslash((char *)filename);
 | 
			
		||||
    char *ff = find_slash_backslash(filename);
 | 
			
		||||
    if (vis)
 | 
			
		||||
      progind_create((long)r->NKeys,s,0,1,60);
 | 
			
		||||
    if ((ff == NULL) || *ff == '\0')
 | 
			
		||||
@ -2099,7 +2085,7 @@ int DB_build(const char * filename, RecDes *r)
 | 
			
		||||
  TAG4INFO   tag_info[MaxKeys+1];     /* Numero di chiavi in un file  */
 | 
			
		||||
  DATA4      *dbuilded;
 | 
			
		||||
  int rt=0,i;
 | 
			
		||||
  char *ff = find_slash_backslash((char *)filename);
 | 
			
		||||
  char *ff = find_slash_backslash(filename);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  for (i=0; ((i<r->NFields) && (i<MaxFields)); i++) /* Construct field_info */
 | 
			
		||||
 | 
			
		||||
@ -14,8 +14,8 @@
 | 
			
		||||
///////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
TRelation_application::TRelation_application()
 | 
			
		||||
                     : _mask(NULL), _search_id(-1), _lnflag(FALSE),
 | 
			
		||||
                       _autodelete(FALSE)
 | 
			
		||||
                     : _mask(NULL), _search_id(-1), _lnflag(0),
 | 
			
		||||
                       _autodelete(0), _navigating(false)
 | 
			
		||||
{ }
 | 
			
		||||
 | 
			
		||||
TRelation_application::~TRelation_application()
 | 
			
		||||
@ -483,8 +483,11 @@ bool TRelation_application::modify_mode()
 | 
			
		||||
{
 | 
			
		||||
  TRelation* rel = get_relation();
 | 
			
		||||
  if (!user_can_read(rel))
 | 
			
		||||
    return warning_box("I dati non sono accessibili per l'utente %s",
 | 
			
		||||
                       (const char*)user());
 | 
			
		||||
  {
 | 
			
		||||
    warning_box(TR("I dati non sono accessibili per l'utente %s"), (const char*)user());
 | 
			
		||||
    query_mode();
 | 
			
		||||
    return FALSE;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const TReclock block = user_can_write(rel) ? _testandlock : _nolock;
 | 
			
		||||
  int err = rel->read(_isequal, block);
 | 
			
		||||
@ -522,6 +525,7 @@ bool TRelation_application::modify_mode()
 | 
			
		||||
  init_modify_mode(*_mask);
 | 
			
		||||
 | 
			
		||||
  // ....possibilmente spostare questa chiamata .....
 | 
			
		||||
  // Forse deve essere fatta prima della init_modify_mode()!
 | 
			
		||||
  if (_curr_transaction == TRANSACTION_MODIFY)
 | 
			
		||||
    ini2insert_mask(); 
 | 
			
		||||
  return TRUE;
 | 
			
		||||
@ -1164,7 +1168,11 @@ bool TRelation_application::relation_remove()
 | 
			
		||||
    if (ok || is_transaction())
 | 
			
		||||
      set_limits();
 | 
			
		||||
    else
 | 
			
		||||
      return error_box(FR("Errore di cancellazione %d"), r.status());
 | 
			
		||||
    {
 | 
			
		||||
      const int err = r.status();
 | 
			
		||||
      if (err != NOERR) // Succede nei remove con richiesta di conferma all'utente
 | 
			
		||||
        return error_box(FR("Errore di cancellazione %d"), err);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
@ -1392,7 +1400,11 @@ void TRelation_application::main_loop()
 | 
			
		||||
            break;
 | 
			
		||||
          }
 | 
			
		||||
          if (err == NOERR || err == _islocked) 
 | 
			
		||||
          {
 | 
			
		||||
            _navigating = true;
 | 
			
		||||
            modify_mode();
 | 
			
		||||
            _navigating = false;
 | 
			
		||||
          }
 | 
			
		||||
          else 
 | 
			
		||||
            query_mode();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -71,6 +71,8 @@ class TRelation_application : public TSkeleton_application
 | 
			
		||||
  TString _curr_trans_from;
 | 
			
		||||
  // @cmember:(INTERNAL) Flag di cancellazione automatica veloce
 | 
			
		||||
  int _autodelete;
 | 
			
		||||
  // @cmember:(INTERNAL) Flag di navigazione tramite toolbar
 | 
			
		||||
  bool _navigating;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
  // @cmember:(INTERNAL) Carica la transazione corrente (protocollo via .ini)
 | 
			
		||||
@ -220,6 +222,7 @@ protected:
 | 
			
		||||
  void set_search_field(short id) 
 | 
			
		||||
  { _search_id = id;}  
 | 
			
		||||
  byte autodeleting() const { return _autodelete; }
 | 
			
		||||
  bool navigating() const { return _navigating; }
 | 
			
		||||
  bool parse_command_line();
 | 
			
		||||
  void ini2query_mask();
 | 
			
		||||
  void ini2insert_mask();
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user