Attribute VB_Name = "ModuloAGG_DB"
Option Explicit

Public Function VerificaSeAggDB(CodAzienda As String, prDisallineamento As Boolean) As Boolean
'               Dim RS As ADODB.Recordset
'
'               On Error GoTo GestErr
'
'               'Prendo la versione in cui si trova il database dal Campo AZVERDB...
'               Set RS = New ADODB.Recordset
'               RS.Open "SELECT AZVERDB FROM ANA_AZIENDE WHERE AZCODAZI = '" & CodAzienda & "'", ConnessioneGenerale, adOpenStatic
'
'               'e la confronto con quella dell'eseguibile
'               If Replace(NonNullo(RS!AZVERDB), ".", "") < Replace(VersionePRG, ".", "") Then
'                  VerificaSeAggDB = True
'               End If
'
'               VersioneDB = NonNullo(RS!AZVERDB)
'
'               RS.Close
'               Set RS = Nothing
'               Exit Function

   Dim RS As ADODB.Recordset
   Dim vArr() As String
   Dim vVal1 As String
   Dim vVal2 As String
   
   'Dim vVerAz As String
   On Error GoTo GestErr

   'Prendo la versione in cui si trova il database dal Campo AZVERDB...
   Set RS = New ADODB.Recordset
   RS.Open "SELECT AZVERDB FROM ANA_AZIENDE WHERE AZCODAZI = '" & CodAzienda & "'", ConnessioneGenerale, adOpenStatic
   
'QUI COSTRUISCO IL NUMERO DELLA VERSIONE PRESENTE NEL DATABASE
   Erase vArr
   ReDim vArr(3) 'Dimensiono la matrice a 3 Indici
   vArr = Split(RS!AZVERDB, ".")
   If Len(Trim(vArr(0))) = 1 Then vArr(0) = "9" & Trim(vArr(0))
   If Len(Trim(vArr(1))) = 1 Then vArr(1) = "0" & Trim(vArr(1))
   If Len(Trim(vArr(2))) = 1 Then vArr(2) = "0" & Trim(vArr(2))
   vVal1 = vArr(0) & vArr(1) & vArr(2)
   
'QUI COSTRUISCO IL NUMERO DELLA VERSIONE DEL PROGRAMMA
   Erase vArr
   ReDim vArr(3) 'Dimensiono la matrice a 3 Indici
   vArr = Split(VersionePRG, ".")
   If Len(Trim(vArr(0))) = 1 Then vArr(0) = "9" & Trim(vArr(0))
   If Len(Trim(vArr(1))) = 1 Then vArr(1) = "0" & Trim(vArr(1))
   If Len(Trim(vArr(2))) = 1 Then vArr(2) = "0" & Trim(vArr(2))
   vVal2 = vArr(0) & vArr(1) & vArr(2)
   
   'e la confronto con quella dell'eseguibile
   'If CLng(Replace(NonNullo(RS!AZVERDB, True), ".", "")) < CLng(Replace(VersionePRG, ".", "")) Then
   If CLng(vVal1) < CLng(vVal2) Then
      VerificaSeAggDB = True
      
   ElseIf CLng(vVal1) > CLng(vVal2) Then
      'Se la release del DB č MAGGIORE dell'Eseguibile BLOCCO TUTTO
      prDisallineamento = True
   End If
   
   VersioneDB = NonNullo(RS!AZVERDB)
   
   RS.Close
   Set RS = Nothing
   Exit Function
   

GestErr:
   'se il campo non c'e' lo creo (questo lo fara' solo la prima volta, chiaramente!
   If Err.Number = -2147217900 Then
      ConnessioneGenerale.Execute "ALTER TABLE ANA_AZIENDE ADD [AZVERDB] [varchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL"
   Else
      MsgBox Err.Number & " - " & Err.Description
   End If
   Err = 0
   Resume
End Function


Public Sub AggiornaDB()
   Dim strCreaTab As String
   Dim strSelect As String
   Dim strString As String
   
'AGGIORNAMENTO ALLA VERSIONE 0.0.20 (COMPLETO DEL MODULO "VENDITE")
   On Error GoTo GestErr
   
   If VerificaSeAggiornare("0.0.20") = True Then
      'Campi del Database GENERALE
         Call ImpostaAggiornamentoDB(0, "ANA_AZIENDE", "ADD", "AZCAUTRA", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(0, "ANA_AZIENDE", "ADD", "AZCODPOR", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(0, "ANA_AZIENDE", "ADD", "AZCODARTACC", "varchar (23) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
      
      'Campi del Database AZIENDA
         'CONTI
         Call ImpostaAggiornamentoDB(1, "CONTI", "ADD", "ANCODSPE", "varchar (3) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "CONTI", "ADD", "ANCAUTRA", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "CONTI", "ADD", "AN_PORTO", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         
         'DOC_MAST
         Call ImpostaAggiornamentoDB(1, "DOC_MAST", "ADD", "MVCODSPE", "varchar (3) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "DOC_MAST", "ADD", "MVTARRIM", "varchar (15) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "DOC_MAST", "ADD", "MVCODCOL", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "DOC_MAST", "ADD", "MVNUMCON", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "DOC_MAST", "ADD", "MVTIPDOCPRG", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "DOC_MAST", "ADD", "MVCODATT", "smallint", "0")
         Call ImpostaAggiornamentoDB(1, "DOC_MAST", "ADD", "MVCODCAUTRA", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "DOC_MAST", "ADD", "MVCONBAN", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "DOC_MAST", "MOD", "MVCODDES", "varchar (15) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "DOC_MAST", "MOD", "MVCODPOR", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         
         'DOC_DETT
         Call ImpostaAggiornamentoDB(1, "DOC_DETT", "ADD", "MVCODPRO", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "DOC_DETT", "ADD", "MVMANPRO", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "DOC_DETT", "ADD", "MVMASVOL", "decimal(18, 4)", "0")
         Call ImpostaAggiornamentoDB(1, "DOC_DETT", "ADD", "MVFACRIF", "int", "0")
         Call ImpostaAggiornamentoDB(1, "DOC_DETT", "ADD", "MVCAMPAG", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "DOC_DETT", "MOD", "MVGRADO", "smallmoney", "0")
         
         'ART_ICOL
         Call ImpostaAggiornamentoDB(1, "ART_ICOL", "ADD", "ARCODPRO", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "ART_ICOL", "ADD", "ARMASVOLOBB", "tinyint", "0")
         
         'DOC_ACCO
         Call ImpostaAggiornamentoDB(1, "DOC_ACCO", "ADD", "ACDATVER", "datetime", "")
         
         'TIP_DOC
         Call ImpostaAggiornamentoDB(1, "TIP_DOC", "MOD", "TDFLVEAC", "char (1) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "TIP_DOC", "MOD", "TDTIPDOC", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "TIP_DOC", "MOD", "TDDESDOC", "varchar (35) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "TIP_DOC", "MOD", "TDNUMERA", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "TIP_DOC", "MOD", "TDFATDIF", "varchar (2) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "TIP_DOC", "MOD", "TDCAUMAG", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "TIP_DOC", "MOD", "TDCODMAG", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "TIP_DOC", "MOD", "TDREPORT", "varchar (20) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "TIP_DOC", "MOD", "TDCATDOC", "varchar (2) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "TIP_DOC", "MOD", "TDMOVQTA", "varchar (1) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "TIP_DOC", "MOD", "TDMOVVAL", "varchar (1) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "TIP_DOC", "MOD", "TDCODSEZ", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "TIP_DOC", "MOD", "TDSTMRIG", "varchar (3) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "TIP_DOC", "MOD", "TDGENRIG", "varchar (3) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "TIP_DOC", "MOD", "keyrecord", "varchar (10) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
      
         'Creo la tabella CLI_SPED
         strCreaTab = "CREATE TABLE [dbo].[CLI_SPED] (" & _
                      "[SPTIPCON] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ," & _
                      "[SPCODCON] [varchar] (15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ," & _
                      "[SPCODICE] [varchar] (3) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ," & _
                      "[SPDESCRI] [varchar] (40) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ," & _
                      "[SPDESCR2] [varchar] (40) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ," & _
                      "[SPINDIRI] [varchar] (40) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ," & _
                      "[SP___CAP] [varchar] (5) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ," & _
                      "[SPLOCALI] [varchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ," & _
                      "[SPPROVIN] [varchar] (2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ," & _
                      "[SPNAZION] [varchar] (3) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ," & _
                      "[SPTELEFO] [varchar] (25) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ," & _
                      "[SPTELFAX] [varchar] (25) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ," & _
                      "[SPNUMCEL] [varchar] (25) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ," & _
                      "[SP__NOME] [varchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ," & _
                      "[SP_EMAIL] [varchar] (254) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ," & _
                      "[SP__NOTE] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NULL ," & _
                      "[UTCC] [int] NULL ," & _
                      "[UTCV] [int] NULL ," & _
                      "[UTDC] [datetime] NULL ," & _
                      "[UTDV] [datetime] NULL ," & _
                      "[keyrecord] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL" & _
                      ") ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]"
         Call EseguiAggiornamentoDB(1, strCreaTab)
            'Qui Imposto le CHIAVI (PRIMARY KEY)
            strCreaTab = "ALTER TABLE [dbo].[CLI_SPED] ADD " & _
                         "CONSTRAINT [PK_CLI_SPED] PRIMARY KEY  CLUSTERED " & _
                         "([SPTIPCON],[SPCODCON],[SPCODICE]) ON [PRIMARY]"
            Call EseguiAggiornamentoDB(1, strCreaTab)
      
      
      
         'Creo la tabella CLI_SPED
         strCreaTab = "CREATE TABLE [dbo].[TAB_ATTIVITA] (" & _
                      "[ATCODICE] [smallint] NOT NULL , " & _
                      "[ATDESCRI] [varchar] (20) COLLATE Latin1_General_CI_AS NOT NULL ," & _
                      "[ATSPUNTA] [char] (2) COLLATE Latin1_General_CI_AS NULL ," & _
                      "[keyrecord] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL" & _
                      ") ON [PRIMARY]"
         Call EseguiAggiornamentoDB(1, strCreaTab)
            'Qui Imposto le CHIAVI (PRIMARY KEY)
            strCreaTab = "ALTER TABLE [dbo].[TAB_ATTIVITA] ADD " & _
                         "CONSTRAINT [PK_TAB_ATTIVITA] PRIMARY KEY  CLUSTERED " & _
                         "([ATCODICE],[ATDESCRI])  ON [PRIMARY]"
            Call EseguiAggiornamentoDB(1, strCreaTab)
            'Qui Imposto i valori predefiniti
            strCreaTab = "ALTER TABLE [TAB_ATTIVITA] WITH NOCHECK ADD " & _
                         "CONSTRAINT [DF_TAB_ATTIVITA_ATCODICE] DEFAULT (0) FOR [ATCODICE]"
            Call EseguiAggiornamentoDB(1, strCreaTab)
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("0.0.24") = True Then
         'DOC_MAST
         Call ImpostaAggiornamentoDB(1, "DOC_MAST", "ADD", "MVANNULL", "smallint", "0", True, "UPDATE DOC_MAST SET MVANNULL = 0 WHERE MVANNULL IS NULL") 'Indica se un documento e' stato ANNULLATO o no (0=NO; 1=SI)
         Call ImpostaAggiornamentoDB(1, "DOC_MAST", "ADD", "UTCA", "int", "0", True, "UPDATE DOC_MAST SET UTCA = 0 WHERE UTCA IS NULL") 'Codice Utente che Annulla il Documento
         Call ImpostaAggiornamentoDB(1, "DOC_MAST", "ADD", "UTDA", "datetime", "")                 'Data di Annullamento Documento
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("0.0.25") = True Then
      'Campi del Database GENERALE
         Call ImpostaAggiornamentoDB(0, "ANA_AZIENDE", "ADD", "AZSPEDIZ", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "", True, "UPDATE ANA_AZIENDE SET AZSPEDIZ = 'VET'")
         Call ImpostaAggiornamentoDB(0, "ANA_AZIENDE", "ADD", "AZMODDOC", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "", True, "UPDATE ANA_AZIENDE SET AZMODDOC = 'B'")
   
      'Campi del Database AZIENDA
         'DOC_MAST
         Call ImpostaAggiornamentoDB(1, "DOC_MAST", "ADD", "MVSPEDIZ", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "", True, "UPDATE DOC_MAST SET MVSPEDIZ = 'VET' WHERE MVTIPDOC = 'DDTVE'")
         Call ImpostaAggiornamentoDB(1, "DOC_MAST", "ADD", "MVMODDOC", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "", True, "UPDATE DOC_MAST SET MVMODDOC = 'B' WHERE MVTIPDOC = 'DDTVE'")
         
         'Qui Inserisco i record in TABGEN che mi servono per le SPEDIZIONI
         Call EseguiAggiornamentoDB(1, "INSERT INTO TAB_GEN (TGCHIAVE,TGCODICE,TGDESCR) values ('SPEDIZ','VET','VETTORE')")
         Call EseguiAggiornamentoDB(1, "INSERT INTO TAB_GEN (TGCHIAVE,TGCODICE,TGDESCR) values ('SPEDIZ','MIT','MITTENTE')")
         Call EseguiAggiornamentoDB(1, "INSERT INTO TAB_GEN (TGCHIAVE,TGCODICE,TGDESCR) values ('SPEDIZ','DES','DESTINATARIO')")
   
         'Qui Inserisco i record in TABGEN che mi servono per i Modelli Documento
         Call EseguiAggiornamentoDB(1, "INSERT INTO TAB_GEN (TGCHIAVE,TGCODICE,TGDESCR) values ('MODDOC','A','MOD. A')")
         Call EseguiAggiornamentoDB(1, "INSERT INTO TAB_GEN (TGCHIAVE,TGCODICE,TGDESCR) values ('MODDOC','B','MOD. B')")
         Call EseguiAggiornamentoDB(1, "INSERT INTO TAB_GEN (TGCHIAVE,TGCODICE,TGDESCR) values ('MODDOC','D','MOD. D')")
         Call EseguiAggiornamentoDB(1, "INSERT INTO TAB_GEN (TGCHIAVE,TGCODICE,TGDESCR) values ('MODDOC','I','MOD. I')")
         
         'CONTI
         Call ImpostaAggiornamentoDB(1, "CONTI", "ADD", "ANSPEDIZ", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
         Call ImpostaAggiornamentoDB(1, "CONTI", "ADD", "ANMODDOC", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("0.0.30") = True Then
         'CONTI
         Call ImpostaAggiornamentoDB(1, "CONTI", "MOD", "ANPARIVA", "varchar (15) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("0.0.32") = True Then
         'ART_ICOL
         Call ImpostaAggiornamentoDB(1, "ART_ICOL", "ADD", "ARCARPRO", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "") 'Caratteristiche Prodotto (inserito per distinguere l'Uva Biologica)
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("0.0.33") = True Then
         'AGGIUNGO LA COLONNA "TDSERIAL" NELLA TABELLA "TIP_DOC" che funge da Serile Predefinito per il Tipo Documento               'Qui aggiorno il TD_SERIE del DDTVE
         Call ImpostaAggiornamentoDB(1, "TIP_DOC", "ADD", "TD_SERIE", "varchar (3) COLLATE SQL_Latin1_General_CP1_CI_AS", "", True, "UPDATE TIP_DOC SET TD_SERIE = 'IT' WHERE TDTIPDOC = 'DDTVE'")
         'Qui aggiorno il TD_SERIE anche della FADIF
         Call EseguiAggiornamentoDB(1, "UPDATE TIP_DOC SET TD_SERIE = '1V' WHERE TDTIPDOC = 'FADIF'")
         'Aggiorno il valore negli INDICI inerente al TipoDoc DDTVE
         Call EseguiAggiornamentoDB(1, "UPDATE INDICI SET DESPROGRESSIVO = 'TIPDOC_DDTVE_V_IT' WHERE DESPROGRESSIVO = 'TIPDOC_DDTVE_V'")
         'Aggiorno il valore negli INDICI inerente al TipoDoc FADIF
         Call EseguiAggiornamentoDB(1, "UPDATE INDICI SET DESPROGRESSIVO = 'TIPDOC_FADIF_V_1V' WHERE DESPROGRESSIVO = 'TIPDOC_FADIF_V'")
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("0.0.34") = True Then
         'Creo la tabella BAR_PERS 'per la ToolBar Personalizzata
         strCreaTab = "CREATE TABLE [dbo].[BAR_PERS] (" & _
                      "[BPCODICE] [smallint] NOT NULL , " & _
                      "[BP__MENU] [varchar] (40) COLLATE Latin1_General_CI_AS NOT NULL ," & _
                      "[BPDESCRI] [varchar] (50) COLLATE Latin1_General_CI_AS NOT NULL ," & _
                      "[BP_ICONA] [smallint] NOT NULL ," & _
                      "[BPCODUTE] [smallint] NOT NULL " & _
                      ") ON [PRIMARY]"
         Call EseguiAggiornamentoDB(0, strCreaTab)
            'Qui Imposto le CHIAVI (PRIMARY KEY)
            strCreaTab = "ALTER TABLE [dbo].[BAR_PERS] ADD " & _
                         "CONSTRAINT [PK_BAR_PERS] PRIMARY KEY  CLUSTERED " & _
                         "([BPCODICE],[BPCODUTE])  ON [PRIMARY]"
            Call EseguiAggiornamentoDB(0, strCreaTab)
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("0.0.35") = True Then
         'Creo la tabella per i SILOS
         strCreaTab = "CREATE TABLE [dbo].[TAB_SILOS] (" & _
                      "[SLCODICE] [int] NOT NULL," & _
                      "[SLDESCRI] [varchar] (5) COLLATE Latin1_General_CI_AS NOT NULL ," & _
                      "[SL_SERIE] [varchar] (1) COLLATE Latin1_General_CI_AS NOT NULL ," & _
                      "[SLCAPACI] [int] NULL ," & _
                      "[SLGIACEN] [decimal] (18, 2) NULL ," & _
                      "[SLMARMIN] [smallint] NULL ," & _
                      "[SLMARMAX] [smallint] NULL ," & _
                      "[SLFLFERM] [smallint] NULL ," & _
                      "[SLFLMANU] [smallint] NULL " & _
                      ") ON [PRIMARY]"
         Call EseguiAggiornamentoDB(1, strCreaTab)
            'Qui Imposto le CHIAVI (PRIMARY KEY)
            strCreaTab = "ALTER TABLE [dbo].[TAB_SILOS] ADD " & _
                         "CONSTRAINT [PK_TAB_SILOS] PRIMARY KEY  CLUSTERED " & _
                         "([SLCODICE])  ON [PRIMARY]"
            Call EseguiAggiornamentoDB(1, strCreaTab)
   
   
    
         'Creo la tabella per l'IDENTIFICATIVO PROGRESSIVO DELL'USO DEI SILOS _
          (NOTE: Per il momento salvo tutti gli IDENT. creati ma probabilmente č inutile ed in futuro _
          questa tabella conterrą sempre l'ULTIMO ID per SILOS! <DA VALUTARE>)
         strCreaTab = "CREATE TABLE [dbo].[IDE_SILOS] (" & _
                      "[ISIDESIL] [int] NOT NULL," & _
                      "[ISCODSIL] [int] NOT NULL," & _
                      "[ISDATIDE] [datetime] " & _
                      ") ON [PRIMARY]"
         Call EseguiAggiornamentoDB(1, strCreaTab)
            'Qui Imposto le CHIAVI (PRIMARY KEY)
            strCreaTab = "ALTER TABLE [dbo].[IDE_SILOS] ADD " & _
                         "CONSTRAINT [PK_IDE_SILOS] PRIMARY KEY  CLUSTERED " & _
                         "([ISIDESIL])  ON [PRIMARY]"
            Call EseguiAggiornamentoDB(1, strCreaTab)
   
   
         'Creo la tabella dei MOVIMENTI DI CANTINA
         strCreaTab = "CREATE TABLE [dbo].[MOV_CANT] (" & _
                      "[MCSERIAL] [int] NOT NULL ," & _
                      "[MCNUMREG] [int] NOT NULL ," & _
                      "[MCDATREG] [datetime] ," & _
                      "[MCANNREG] [varchar] (4) COLLATE Latin1_General_CI_AS NOT NULL ," & _
                      "[MCTIPMOV] [varchar] (5) COLLATE Latin1_General_CI_AS NOT NULL ," & _
                      "[MCOPECAN] [varchar] (5) COLLATE Latin1_General_CI_AS NULL ," & _
                      "[MCSILSCA] [int] NULL ," & _
                      "[MCIDESCA] [int] NULL ," & _
                      "[MCSILCAR] [int] NULL ," & _
                      "[MCIDECAR] [int] NULL ," & _
                      "[MCQTAMOV] [decimal] (18, 2) NULL ," & _
                      "[MCGRUMER] [varchar] (5) COLLATE Latin1_General_CI_AS NOT NULL ," & _
                      "[UTCC] [int] NULL ," & _
                      "[UTDC] [datetime] NULL ," & _
                      "[UTCV] [int] NULL ," & _
                      "[UTDV] [datetime] NULL ," & _
                      "[MCFLGIAC] [smallint] NULL " & _
                      ") ON [PRIMARY]"
         Call EseguiAggiornamentoDB(1, strCreaTab)
            'Qui Imposto le CHIAVI (PRIMARY KEY)
            strCreaTab = "ALTER TABLE [dbo].[MOV_CANT] ADD " & _
                         "CONSTRAINT [PK_MOV_CANT] PRIMARY KEY  CLUSTERED " & _
                         "([MCSERIAL])  ON [PRIMARY]"
            Call EseguiAggiornamentoDB(1, strCreaTab)
            'Qui Imposto i valori predefiniti
            strCreaTab = "ALTER TABLE [TAB_ATTIVITA] WITH NOCHECK ADD " & _
                         "CONSTRAINT [DF_TAB_ATTIVITA_ATCODICE] DEFAULT (0) FOR [ATCODICE]"
            Call EseguiAggiornamentoDB(1, strCreaTab)
   
         'DOC_DETT
         Call ImpostaAggiornamentoDB(1, "DOC_DETT", "ADD", "MVCODSIL", "int", "0", True, "UPDATE DOC_DETT SET MVCODSIL = 0 WHERE MVCODSIL IS NULL") 'Codice Silos
         Call ImpostaAggiornamentoDB(1, "DOC_DETT", "ADD", "MVIDESIL", "int", "0", True, "UPDATE DOC_DETT SET MVIDESIL = 0 WHERE MVIDESIL IS NULL") 'Codice IDENTIFICATIVO_Progressivo Silos
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("0.0.38") = True Then
         'TAB_GEN
         Call ImpostaAggiornamentoDB(1, "TAB_GEN", "ADD", "TGTESTO5", "varchar (50) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("0.0.40") = True Then
         'TAB_GEN
         Call EseguiAggiornamentoDB(1, "UPDATE TAB_GEN SET TGVALORE = (TGVALORE/100) WHERE (TGCHIAVE = 'GRUMER') AND (TGSPUNTA1 IS NULL)")
         Call EseguiAggiornamentoDB(1, "UPDATE TAB_GEN SET TGSPUNTA1 = 0 WHERE (TGCHIAVE = 'GRUMER') AND (TGSPUNTA1 IS NULL)")
   
         'DOC_DETT
         Call ImpostaAggiornamentoDB(1, "DOC_DETT", "ADD", "MVQTASIL", "decimal(18, 2)", "0", True, "UPDATE DOC_DETT SET MVQTASIL = 0 WHERE MVQTASIL IS NULL") 'Peso (Q.li) attribuito al primo Silos
         Call ImpostaAggiornamentoDB(1, "DOC_DETT", "ADD", "MVCODSI2", "int", "0", True, "UPDATE DOC_DETT SET MVCODSI2 = 0 WHERE MVCODSI2 IS NULL") 'Codice secondo Silos
         Call ImpostaAggiornamentoDB(1, "DOC_DETT", "ADD", "MVIDESI2", "int", "0", True, "UPDATE DOC_DETT SET MVIDESI2 = 0 WHERE MVIDESI2 IS NULL") 'Codice IDENTIFICATIVO_Progressivo secondo Silos
         Call ImpostaAggiornamentoDB(1, "DOC_DETT", "ADD", "MVQTASI2", "decimal(18, 2)", "0", True, "UPDATE DOC_DETT SET MVQTASI2 = 0 WHERE MVQTASI2 IS NULL") 'Peso (Q.li) attribuito al secondo Silos
   
         Call ImpostaAggiornamentoDB(1, "DOC_DETT", "ADD", "MVOPERAT", "varchar (1) COLLATE SQL_Latin1_General_CP1_CI_AS", "*", True, "UPDATE DOC_DETT SET MVOPERAT = '*'") 'Segno di Operazione per il calcolo della II Unitą di Misura (Resa) ( '*' = Moltiplicaz.; '/' = Divisione)
   
         strSelect = "SELECT    dbo.TAB_GEN.TGVALORE " & _
                     "FROM      dbo.ART_ICOL INNER JOIN " & _
                     "dbo.TAB_GEN ON dbo.ART_ICOL.ARGRUMER COLLATE Latin1_General_CI_AS = dbo.TAB_GEN.TGCODICE AND dbo.TAB_GEN.TGCHIAVE = 'GRUMER' " & _
                     "WHERE     (dbo.ART_ICOL.ARTIPART = 'ART') AND (dbo.ART_ICOL.ARCODICE = dbo.DOC_DETT.MVCODART)"
         Call ImpostaAggiornamentoDB(1, "DOC_DETT", "ADD", "MVMOLTIP", "decimal(18, 2)", "0", True, "UPDATE DOC_DETT Set [MVMOLTIP] = (" & Replace(strSelect, ",", ".") & ") WHERE (MVTIPRIG = 'R') AND (MVMOLTIP IS NULL)") 'Moltiplicatore (Valore da usare nel calcolo della II Unitą di Misura)
         Call EseguiAggiornamentoDB(1, "UPDATE DOC_DETT Set [MVMOLTIP] = 0 WHERE (MVMOLTIP IS NULL)") 'Inserisco lo "0" negli altri campi non interessati dall'UPDATE precedente (quella che ha inserito il valore Moltiplicatore dei Gruppi Merceologici)
   
         'Call ImpostaAggiornamentoDB(1, "DOC_DETT", "ADD", "MVRESAS1", "decimal(18, 4)", "0", True, "UPDATE DOC_DETT Set [MV__RESA] = (MVPESRIS * MVMOLTIP) WHERE (MVTIPRIG = 'R') AND (MVMOLTIP <> 0)") 'RESA (Valore da usare nel calcolo della II Unitą di Misura)
   
   
         'Creo la tabella del QUADERNO DI CANTINA
         strCreaTab = "CREATE TABLE [dbo].[QUA_CANT] (" & _
                      "[QCCODICE] [varchar] (8) COLLATE Latin1_General_CI_AS NOT NULL ," & _
                      "[QC__RIGA] [smallint] NOT NULL DEFAULT (0)," & _
                      "[QC__DATA] [datetime] NOT NULL," & _
                      "[QC_TARGA] [varchar] (10) COLLATE Latin1_General_CI_AS NOT NULL ," & _
                      "[QCFORNIT] [varchar] (50) COLLATE Latin1_General_CI_AS NULL ," & _
                      "[QCPRODOT] [varchar] (50) COLLATE Latin1_General_CI_AS NULL ," & _
                      "[QC_GRADO] [smallmoney] NOT NULL DEFAULT (0)," & _
                      "[QCQTASIL] [decimal] (18, 2) NOT NULL DEFAULT (0)," & _
                      "[QCCODSIL] [int] NOT NULL DEFAULT (0)," & _
                      "[QCIDESIL] [int] NULL DEFAULT (0)," & _
                      "[QCQTASI2] [decimal] (18, 2) NULL DEFAULT (0)," & _
                      "[QCCODSI2] [int] NULL DEFAULT (0)," & _
                      "[QCIDESI2] [int] NULL DEFAULT (0)," & _
                      "[UTCC] [int] NULL DEFAULT (0)," & _
                      "[UTDC] [datetime] NULL ," & _
                      "[UTCV] [int] NULL DEFAULT (0)," & _
                      "[UTDV] [datetime] NULL ," & _
                      ") ON [PRIMARY]"
         Call EseguiAggiornamentoDB(1, strCreaTab)
            'Qui Imposto le CHIAVI (PRIMARY KEY)
            strCreaTab = "ALTER TABLE [dbo].[QUA_CANT] ADD " & _
                         "CONSTRAINT [PK_QUA_CANT] PRIMARY KEY  CLUSTERED " & _
                         "([QCCODICE],[QC__RIGA])  ON [PRIMARY]"
            Call EseguiAggiornamentoDB(1, strCreaTab)
            
            
      'QUI SISTEMO LA TABELLA MOV_CANT (LA RIMUOVO E LA RICREO SECONDO LE NUOVE ESIGENZE)
         strCreaTab = "DROP TABLE [dbo].[MOV_CANT]" 'RIMUOVO LA TABELLA MOV_CANT
         Call EseguiAggiornamentoDB(1, strCreaTab)
   
         'Creo la tabella dei MOVIMENTI DI CANTINA
         strCreaTab = "CREATE TABLE [dbo].[MOV_CANT] (" & _
                      "[MCSERIAL] [int] NOT NULL DEFAULT (0)," & _
                      "[MCFLMOVI] [smallint] NULL DEFAULT (0)," & _
                      "[MCNUMREG] [int] NOT NULL DEFAULT (0)," & _
                      "[MCDATREG] [datetime] ," & _
                      "[MCANNREG] [varchar] (4) COLLATE Latin1_General_CI_AS NOT NULL ," & _
                      "[MCTIPMOV] [varchar] (5) COLLATE Latin1_General_CI_AS NOT NULL ," & _
                      "[MCOPECAN] [varchar] (5) COLLATE Latin1_General_CI_AS NULL ," & _
                      "[MCSILSCA] [int] NULL DEFAULT (0)," & _
                      "[MCIDESCA] [int] NULL DEFAULT (0)," & _
                      "[MCSILCAR] [int] NULL DEFAULT (0)," & _
                      "[MCIDECAR] [int] NULL DEFAULT (0)," & _
                      "[MCQTAMOV] [decimal] (18, 2) NULL DEFAULT (0)," & _
                      "[MCGRUMER] [varchar] (5) COLLATE Latin1_General_CI_AS NOT NULL ," & _
                      "[MCQTARET] [decimal] (18, 2) NULL DEFAULT (0)," & _
                      "[UTCC] [int] NULL DEFAULT (0)," & _
                      "[UTDC] [datetime] NULL ," & _
                      "[UTCV] [int] NULL DEFAULT (0)," & _
                      "[UTDV] [datetime] NULL" & _
                      ") ON [PRIMARY]"
         Call EseguiAggiornamentoDB(1, strCreaTab)
            'Qui Imposto le CHIAVI (PRIMARY KEY)
            strCreaTab = "ALTER TABLE [dbo].[MOV_CANT] ADD " & _
                         "CONSTRAINT [PK_MOV_CANT] PRIMARY KEY  CLUSTERED " & _
                         "([MCSERIAL])  ON [PRIMARY]"
            Call EseguiAggiornamentoDB(1, strCreaTab)
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("0.0.41") = True Then
         Call ImpostaAggiornamentoDB(1, "MOV_CANT", "ADD", "MCOPERAT", "varchar (1) COLLATE SQL_Latin1_General_CP1_CI_AS", "*", False) 'Segno di Operazione per il calcolo della II Unitą di Misura (Resa) ( '*' = Moltiplicaz.; '/' = Divisione)
         Call ImpostaAggiornamentoDB(1, "MOV_CANT", "ADD", "MCMOLTIP", "decimal(18, 2)", "0", False) 'Moltiplicatore (Valore da usare nel calcolo della II Unitą di Misura)
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("0.0.44") = True Then
      'Campi del Database GENERALE
         Call ImpostaAggiornamentoDB(0, "ANA_AZIENDE", "ADD", "AZVALGRADBE", "decimal(18, 2)", "0", True, "UPDATE ANA_AZIENDE SET AZVALGRADBE = 0.65 WHERE AZVALGRADBE IS NULL")
         Call ImpostaAggiornamentoDB(0, "ANA_AZIENDE", "ADD", "AZVALMASVOL", "decimal(18, 2)", "0", True, "UPDATE ANA_AZIENDE SET AZVALMASVOL = 144.33 WHERE AZVALMASVOL IS NULL")
   
         'DOC_DETT
         strString = "(144.33 / (144.33 - (MVGRADO * 0.65)))"
         Call EseguiAggiornamentoDB(1, "UPDATE DOC_DETT SET MVMASVOL = " & Replace(strString, ",", ".") & " WHERE (MVMASVOL IS NULL AND MVGRADO > 0 AND MVMOVQTA = '+') OR (MVMASVOL = 0 AND MVGRADO > 0 AND MVMOVQTA = '+')")  'Calcolo della Massa Volumica sui documenti di ACQUISTO
         Call ImpostaAggiornamentoDB(1, "DOC_DETT", "ADD", "MV_HLSIL", "decimal(18, 2)", "0", True, "UPDATE DOC_DETT SET MV_HLSIL = ((MVQTASIL * MVMOLTIP) / MVMASVOL) WHERE MV_HLSIL IS NULL AND MVQTASIL > 0 AND MVMASVOL > 0") 'Peso in Ettolitri per il Silos1
         Call ImpostaAggiornamentoDB(1, "DOC_DETT", "ADD", "MV_HLSI2", "decimal(18, 2)", "0", True, "UPDATE DOC_DETT SET MV_HLSI2 = ((MVQTASI2 * MVMOLTIP) / MVMASVOL) WHERE MV_HLSI2 IS NULL AND MVQTASI2 > 0 AND MVMASVOL > 0") 'Peso in Ettolitri per il Silos2
   
         'MOV_CANT
         Call ImpostaAggiornamentoDB(1, "MOV_CANT", "ADD", "MCMASVOL", "decimal(18, 4)", "0", True, "UPDATE MOV_CANT SET MCMASVOL = 0 WHERE MCMASVOL IS NULL")
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("0.0.46") = True Then
         'IDE_SILOS
         Call ImpostaAggiornamentoDB(1, "IDE_SILOS", "ADD", "ISGRUMER", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "", False) 'campo dove salvare il Gruppo merceologico dei SILOS per ogni singolo ID
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("0.0.50") = True Then
         'QUA_CANT
         Call ImpostaAggiornamentoDB(1, "QUA_CANT", "ADD", "QCCODART", "varchar (20) COLLATE SQL_Latin1_General_CP1_CI_AS", "")  'Aggiungo Codice Articolo
         Call ImpostaAggiornamentoDB(1, "QUA_CANT", "ADD", "QCDESART", "varchar (60) COLLATE SQL_Latin1_General_CP1_CI_AS", "", True, "UPDATE QUA_CANT SET QCDESART = QCPRODOT") 'Aggiungo Descrizione Articolo e sposto il contenuto del campo QCPRODOT
         Call ImpostaAggiornamentoDB(1, "QUA_CANT", "DEL", "QCPRODOT", "", "") 'Elimino il vecchio campo Descrizione Prodotto QCPRODOT
         Call ImpostaAggiornamentoDB(1, "QUA_CANT", "ADD", "QCTIPART", "varchar (1) COLLATE SQL_Latin1_General_CP1_CI_AS", "")  'Aggiungo il TIPO di ARTICOLO (Se BIANCO o NERO)
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("0.0.57") = True Then
         'NOTE: ESEGUITA GIA' NELLA 0.0.44 L'HO DOVUTA RIPETERE PERCHE' SU RICHIESTA DI GIANNI HO EFFETTUATO UNA PULIZIA DELLA SITUAZIONE _
                SILOS SUI DOCUMENTI DI ACQUISTO ED ERRONEAMENTE HO CANCELLATO ANCHE LA MASSA VOLUMICA!!!
   
         'DOC_DETT
         strString = "(144.33 / (144.33 - (MVGRADO * 0.65)))"
         Call EseguiAggiornamentoDB(1, "UPDATE DOC_DETT SET MVMASVOL = " & Replace(strString, ",", ".") & " WHERE (MVMASVOL IS NULL AND MVGRADO > 0 AND MVMOVQTA = '+') OR (MVMASVOL = 0 AND MVGRADO > 0 AND MVMOVQTA = '+')")  'Calcolo della Massa Volumica sui documenti di ACQUISTO
         Call EseguiAggiornamentoDB(1, "UPDATE DOC_DETT SET MV_HLSIL = ((MVQTASIL * MVMOLTIP) / MVMASVOL) WHERE MV_HLSIL = 0 AND MVQTASIL > 0 AND MVMASVOL > 0") 'Peso in Ettolitri per il Silos1
         Call EseguiAggiornamentoDB(1, "UPDATE DOC_DETT SET MV_HLSI2 = ((MVQTASI2 * MVMOLTIP) / MVMASVOL) WHERE MV_HLSI2 = 0 AND MVQTASI2 > 0 AND MVMASVOL > 0") 'Peso in Ettolitri per il Silos2
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("0.0.60") = True Then
         'CONTI
         Call ImpostaAggiornamentoDB(1, "CONTI", "ADD", "ANGENTRAOBB", "smallint", "0", True, "UPDATE CONTI SET ANGENTRAOBB = 0 WHERE ANGENTRAOBB IS NULL")
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("0.0.64") = True Then
         'ARTICOLI
         Call ImpostaAggiornamentoDB(1, "ART_ICOL", "ADD", "AR_MV_TA", "varchar (2) COLLATE SQL_Latin1_General_CP1_CI_AS", "", True, "UPDATE ART_ICOL SET AR_MV_TA = 'MV' WHERE ARMASVOLOBB = 1")
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("0.0.70") = True Then
         'CONTI (numero iscrizione all'albo dei trasportatori)
         Call ImpostaAggiornamentoDB(1, "CONTI", "ADD", "ANISCALB", "varchar (30) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("0.0.71") = True Then
         'CONTI (numero iscrizione all'albo dei trasportatori)
         Call ImpostaAggiornamentoDB(1, "DOC_MAST", "ADD", "MVAUTIST", "varchar (50) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("0.0.73") = True Then
      Call ImpostaAggiornamentoDB(1, "TAB_GEN", "MOD", "TGDESCR", "varchar (100) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("1.0.0") Then
         'Creo la tabella del QUADERNO DI CANTINA
         strCreaTab = "CREATE TABLE [dbo].[LETT_INTENTO_MAST] (" & _
                      "[LISERIAL] [int] NOT NULL UNIQUE DEFAULT (0)," & _
                      "[LINUMREG] [int] NOT NULL DEFAULT (0)," & _
                      "[LIDATREG] [datetime] NOT NULL," & _
                      "[LIANNREG] [varchar] (4) COLLATE Latin1_General_CI_AS NOT NULL," & _
                      "[LITIPCON] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL," & _
                      "[LICODCON] [varchar] (15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL," & _
                      "[LINRLETT] [varchar] (10) COLLATE Latin1_General_CI_AS NOT NULL," & _
                      "[LIDATEMI] [datetime] NOT NULL," & _
                      "[LIDATREV] [datetime] NULL," & _
                      "[LIVALDAL] [datetime] NOT NULL," & _
                      "[LIVAL_AL] [datetime] NOT NULL," & _
                      "[LIIMPORT] [decimal] (18, 2) NOT NULL DEFAULT (0)," & _
                      "[LIIMPUSA] [decimal] (18, 2) NULL DEFAULT (0)," & _
                      "[LICODIVA] [varchar] (5) COLLATE Latin1_General_CI_AS NULL ," & _
                      "[LI__NOTE] [varchar] (100) COLLATE Latin1_General_CI_AS NULL ," & _
                      "[UTCC] [int] NULL DEFAULT (0), [UTDC] [datetime] NULL ," & _
                      "[UTCV] [int] NULL DEFAULT (0), [UTDV] [datetime] NULL ," & _
                      ") ON [PRIMARY]"
         Call EseguiAggiornamentoDB(1, strCreaTab)
            'Qui Imposto le CHIAVI (PRIMARY KEY)
            strCreaTab = "ALTER TABLE [dbo].[LETT_INTENTO_MAST] ADD " & _
                         "CONSTRAINT [PK_LETT_INTENTO_MAST] PRIMARY KEY  CLUSTERED " & _
                         "([LINUMREG],[LIANNREG])  ON [PRIMARY]"
            Call EseguiAggiornamentoDB(1, strCreaTab)
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("1.0.1") Then
      Call ImpostaAggiornamentoDB(1, "TAB_SILOS", "MOD", "SLDESCRI", "varchar (20) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
      Call ImpostaAggiornamentoDB(1, "TAB_SILOS", "ADD", "SLGRUMER", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "", False) 'campo dove salvare il Gruppo merceologico dei SILOS
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("1.0.4") Then
      'Massa Volumica ricavata dopo la variazione di Grado eseguito dalla Form "Aggiorna Prezzo/Grado". _
       Di default ha lo stesso valore di MVMASVOL
      Call ImpostaAggiornamentoDB(1, "DOC_DETT", "ADD", "MVMASVO2", "decimal(18, 4)", "0", True, "UPDATE DOC_DETT SET MVMASVO2 = MVMASVOL WHERE (MVMASVO2 IS NULL) OR (MVMASVO2 = 0) ")
      'Aggiorno il campo MV_HLSI2 con lo stesso valore di MV_HLSIL dove MV_HLSI2 = 0
      Call EseguiAggiornamentoDB(1, "UPDATE DOC_DETT SET MV_HLSI2 = MV_HLSIL WHERE (MV_HLSI2 IS NULL) OR (MV_HLSI2 = 0)") 'Qui popolo con lo stesso valore del campo MV_HLSIL perchč questo campo con dalla relese 1.0 riporta o lo stesso valore oppure il nuovo valore calcolato dopo la variazioen di GRADO (valido per le vendite. mentre per gli acquisti corrisponde sempre)
      
      'Modifico la voce di INDICE "CONTRA" e la trasformo in CONTRA_A (per ACQUISTI). Mi pč stato chiesto di avre due progressivi separati tra Acquisti e Vendite ma sempre UNICI e NON per ANNO
      Call EseguiAggiornamentoDB(1, "UPDATE INDICI SET DESPROGRESSIVO = 'CONTRA_A' WHERE DESPROGRESSIVO = 'CONTRA'")
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("1.0.8") Then
      'campo che indica se si tratta di una Fattura di Acquisto di Mosto
      Call ImpostaAggiornamentoDB(1, "DOC_MAST", "ADD", "MVCARMOS", "tinyint", "0", True, "UPDATE DOC_MAST SET MVCARMOS = 0 WHERE (MVCARMOS IS NULL)")
      'Se flaggato significa che č specifico per il MOSTO (l'ho creato per i Carichi di MOSTO)
      Call ImpostaAggiornamentoDB(1, "TIP_DOC", "ADD", "TDFLMOST", "tinyint", "0", True, "UPDATE TIP_DOC SET TDFLMOST = 0 WHERE (TDFLMOST IS NULL)")
         'Carico la Causale per il Carico di MOSTO
         Call CreaCausalePerCaricoMosto
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("1.0.10") Then
      'Se flaggato significa che č specifico per il MOSTO (l'ho creato per i Carichi di MOSTO)
      Call ImpostaAggiornamentoDB(1, "TIP_DOC", "ADD", "TDCODIVA", "varchar (5) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("1.0.11") Then
         'Creo la tabella degli AZZERAMENTI DEI SILOS
         strCreaTab = "CREATE TABLE [dbo].[MOV_AZZERA] (" & _
                      "[MA____ID] int identity (1,1)," & _
                      "[MADATAZZ] [datetime] NOT NULL," & _
                      "[UTCC] [int] NULL DEFAULT (0), [UTDC] [datetime] NULL ," & _
                      "[UTCV] [int] NULL DEFAULT (0), [UTDV] [datetime] NULL " & _
                      ") ON [PRIMARY]"
         Call EseguiAggiornamentoDB(1, strCreaTab)
'            'Qui Imposto le CHIAVI (PRIMARY KEY)
'            strCreaTab = "ALTER TABLE [dbo].[MOV_AZZERA] ADD " & _
'                         "CONSTRAINT [PK_MOV_AZZERA] PRIMARY KEY  CLUSTERED " & _
'                         "([LINUMREG])  ON [PRIMARY]"
'            Call EseguiAggiornamentoDB(1, strCreaTab)
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("1.0.17") Then
      'Call ImpostaAggiornamentoDB(1, "TAB_GEN", "MOD", "TGCODICE", "varchar (10) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
      Call ImpostaAggiornamentoDB(1, "ART_ICOL", "MOD", "ARCARPRO", "varchar (10) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
      Call ImpostaAggiornamentoDB(1, "ART_ICOL", "ADD", "ARVITIGN", "varchar (10) COLLATE SQL_Latin1_General_CP1_CI_AS", "")
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("1.0.18") Then
      Call ImpostaAggiornamentoDB(1, "TAB_SILOS", "ADD", "SLCARPRO", "varchar (10) COLLATE SQL_Latin1_General_CP1_CI_AS", "", False) 'campo dove salvare la Caratteristica Prodotto dei SILOS
      
      
      'Creo la tabella del FASCICOLI AZIENDALI PRODUTTORI (Fornitori)
      strCreaTab = "CREATE TABLE [dbo].[TAB_FASCICOLI] (" & _
                   "[FASERIAL] [int] NOT NULL UNIQUE DEFAULT (0)," & _
                   "[FADATREG] [datetime] NOT NULL," & _
                   "[FATIPCON] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL," & _
                   "[FACODCON] [varchar] (15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL," & _
                   "[FAVITIGN] [varchar] (10) COLLATE Latin1_General_CI_AS NOT NULL," & _
                   "[FAETTARI] [decimal] (12, 2) NOT NULL DEFAULT (0)," & _
                   "[FA__RESA] [decimal] (12, 2) NOT NULL DEFAULT (0)," & _
                   "[FAMAXQLI] [decimal] (12, 2) NOT NULL DEFAULT (0)," & _
                   "[FA__NOTE] [varchar] (100) COLLATE Latin1_General_CI_AS NULL ," & _
                   "[UTCC] [int] NULL DEFAULT (0), [UTDC] [datetime] NULL ," & _
                   "[UTCV] [int] NULL DEFAULT (0), [UTDV] [datetime] NULL ," & _
                   ") ON [PRIMARY]"
      Call EseguiAggiornamentoDB(1, strCreaTab)
         'Qui Imposto le CHIAVI (PRIMARY KEY)
         strCreaTab = "ALTER TABLE [dbo].[TAB_FASCICOLI] ADD " & _
                      "CONSTRAINT [PK_TAB_FASCICOLI] PRIMARY KEY  CLUSTERED " & _
                      "([FASERIAL])  ON [PRIMARY]"
         Call EseguiAggiornamentoDB(1, strCreaTab)
   End If
'~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
   If VerificaSeAggiornare("1.0.21") Then
      Call ImpostaAggiornamentoDB(1, "TAB_FASCICOLI", "ADD", "FACARPRO", "varchar (10) COLLATE SQL_Latin1_General_CP1_CI_AS", "", False) 'campo dove salvare la Caratteristica Prodotto dei Fascicoli
   
   End If


GestErr:
   If Err.Number = -2147217900 Or Err.Number = -2147217873 Or Err.Number = -2147217865 Then
      Err = 0
      Resume Next
   ElseIf Err.Number <> 0 Then
      MsgBox Err.Number & " - " & Err.Description & vbNewLine & vbNewLine & "Errore in fase di allineamento Archivi!" & vbNewLine & "IMPOSSIBILE CONTINUARE", vbCritical
      Call TerminaApplicazione
   End If
   On Error GoTo 0
End Sub

Private Sub ImpostaAggiornamentoDB(v_TipoConn As Byte, v_Tabella As String, v_Azione, v_Campo As String, v_TipoCampo, v_Default As String, Optional AggiornaRecordOld As Boolean, Optional ComandoPerRecordOld As String)
   Dim RS As ADODB.Recordset
   
   On Error GoTo GestErr
   
'Comando per la Creazione/Modifica/Eliminazione del Campo
   Select Case v_Azione
   Case "ADD"
      Call EseguiAggiornamentoDB(v_TipoConn, "ALTER TABLE " & v_Tabella & " ADD " & v_Campo & " " & v_TipoCampo & " NULL")
   Case "MOD"
      Call EseguiAggiornamentoDB(v_TipoConn, "ALTER TABLE " & v_Tabella & " ALTER COLUMN " & v_Campo & " " & v_TipoCampo & " NULL")
   Case "DEL"
      Call EseguiAggiornamentoDB(v_TipoConn, "ALTER TABLE " & v_Tabella & " DROP COLUMN " & v_Campo)
   End Select
   

'Comando per l'eventuale valore prefenito
   If Len(v_Default) > 0 Then
      Call EseguiAggiornamentoDB(v_TipoConn, "ALTER TABLE [" & v_Tabella & "] WITH NOCHECK ADD " & _
                                             "CONSTRAINT [DF_" & v_Tabella & "_" & v_Campo & "] DEFAULT (" & v_Default & ") FOR [" & v_Campo & "]")
   End If
   
   
'Qui verifico se devo aggiornare il valore del nuovo campo che sto inserendo per i record gia' presenti _
 (operazione utile per i campi numerici dove e' indespensabile che i record vecchi abbiano un valore)
   If AggiornaRecordOld = True Then
      Call EseguiAggiornamentoDB(v_TipoConn, ComandoPerRecordOld)
   End If
   
      
   
GestErr:
   If Err.Number = -2147217900 Then
      Err = 0
      Resume Next
   ElseIf Err.Number <> 0 Then
      MsgBox Err.Number & " - " & Err.Description & vbNewLine & vbNewLine & "Errore in fase di allineamento Archivi!" & vbNewLine & "IMPOSSIBILE CONTINUARE", vbCritical
      Call TerminaApplicazione
   End If
   On Error GoTo 0
End Sub

Private Sub EseguiAggiornamentoDB(v_TipoConn As Byte, Comando As String)
   
   FormLogIn.LblMsgAggDb.Caption = Comando
   'FormLogIn.LblMsgAggDb.Refresh
   
   If v_TipoConn = 0 Then
      ConnessioneGenerale.Execute Comando
   Else
      ConnessioneAzienda.Execute Comando
   End If
   
End Sub

Private Function VerificaSeAggiornare(VersioneBloccoIstruzione As String) As Boolean
   'Questa funzione restituisce TRUE se il numero di versione passato come _
    parametro e' SUPERIORE alla versione del database. Quindi il blocco di _
    istruzioni della VersioneBloccoIstruzione deve essere eseguito!
   
   Dim vArr() As String
   Dim vVal1 As String
   Dim vVal2 As String
   
   'Qui li confronto!
   'If Replace(VersioneBloccoIstruzione, ".", "") > Replace(VersioneDB, ".", "") Then
   If Len(Trim(VersioneBloccoIstruzione)) > 0 Then
      
      'mReleaseInUpdate = VersioneBloccoIstruzione
      
      'QUI COSTRUISCO IL NUMERO DELLA VERSIONE PRESENTE NEL DATABASE
         Erase vArr
         ReDim vArr(3) 'Dimensiono la matrice a 3 Indici
         vArr = Split(VersioneBloccoIstruzione, ".")
         If Len(Trim(vArr(0))) = 1 Then vArr(0) = "9" & Trim(vArr(0))
         If Len(Trim(vArr(1))) = 1 Then vArr(1) = "0" & Trim(vArr(1))
         If Len(Trim(vArr(2))) = 1 Then vArr(2) = "0" & Trim(vArr(2))
         vVal1 = vArr(0) & vArr(1) & vArr(2)
         
      'QUI COSTRUISCO IL NUMERO DELLA VERSIONE DEL PROGRAMMA
         Erase vArr
         ReDim vArr(3) 'Dimensiono la matrice a 3 Indici
         vArr = Split(VersioneDB, ".")
         If Len(Trim(vArr(0))) = 1 Then vArr(0) = "9" & Trim(vArr(0))
         If Len(Trim(vArr(1))) = 1 Then vArr(1) = "0" & Trim(vArr(1))
         If Len(Trim(vArr(2))) = 1 Then vArr(2) = "0" & Trim(vArr(2))
         vVal2 = vArr(0) & vArr(1) & vArr(2)
   
         If CLng(vVal1) > CLng(vVal2) Then
            VerificaSeAggiornare = True
         End If
   
   Else
   
      VerificaSeAggiornare = True
   
   End If
'''   'Questa funzione restituisce TRUE se il numero di versione passato come _
'''    parametro e' SUPERIORE alla versione del database. Quindi il blocco di _
'''    istruzioni della VersioneBloccoIstruzione deve essere eseguito!
'''
'''   'Qui li confronto!
'''   'If Replace(VersioneBloccoIstruzione, ".", "") > Replace(VersioneDB, ".", "") Then
'''   If Len(Trim(VersioneBloccoIstruzione)) > 0 Then
'''
'''      If CLng(Replace(VersioneBloccoIstruzione, ".", "")) > CLng(Replace(VersioneDB, ".", "")) Then
'''         VerificaSeAggiornare = True
'''      End If
'''
'''   Else
'''
'''      VerificaSeAggiornare = True
'''
'''   End If
End Function


Private Sub CreaCausalePerCaricoMosto()
   Dim StrCampi As String
   Dim StrValori As String
   Dim StrIns As String
   
'CREO IL SEZIONALE
   If Not VerificaBOOLEANA("SELECT * FROM TAB_GEN WHERE (TGCHIAVE = 'SEZION') AND (TGCODICE = 'CM') ") Then
      StrCampi = "TGCHIAVE"
      StrValori = "'SEZION'"
      StrCampi = StrCampi & ",TGCODICE"
      StrValori = StrValori & ",'CM'"
      StrCampi = StrCampi & ",TGDESCR"
      StrValori = StrValori & ",'CARICO MOSTO'"
      
      StrIns = "INSERT INTO TAB_GEN (" & StrCampi & ") values (" & StrValori & ")"
      ConnessioneAzienda.Execute (StrIns)
   End If
   
'CREO LA CAUSALE
   If Not VerificaBOOLEANA("SELECT * FROM TIP_DOC WHERE TDTIPDOC = 'DDTCM'") Then
      StrCampi = "TDFLVEAC"
      StrValori = "'A'"
      StrCampi = StrCampi & ",TDPREDEF"
      StrValori = StrValori & ",1"
      StrCampi = StrCampi & ",TDPRGSUG"
      StrValori = StrValori & ",0"
      StrCampi = StrCampi & ",TDTIPDOC"
      StrValori = StrValori & ",'DDTCM'"
      StrCampi = StrCampi & ",TDDESDOC"
      StrValori = StrValori & ",'Carico di Mosto'"
      StrCampi = StrCampi & ",TDCAUMAG"
      StrValori = StrValori & ",'ACQ'"
      StrCampi = StrCampi & ",TDCATDOC"
      StrValori = StrValori & ",'DT'"
      StrCampi = StrCampi & ",TDMOVQTA"
      StrValori = StrValori & ",'+'"
      StrCampi = StrCampi & ",TDCODSEZ"
      StrValori = StrValori & ",'CM'"
      StrCampi = StrCampi & ",UTCC"
      StrValori = StrValori & ",1"
      StrCampi = StrCampi & ",UTDC"
      StrValori = StrValori & ",CONVERT(DATETIME, '" & Format(Date, "yyyy/mm/dd") & "',102)"
      StrCampi = StrCampi & ",TDFLMOST"
      StrValori = StrValori & ",1"
      StrCampi = StrCampi & ",TDREPORT"
      StrValori = StrValori & ",''"
      
      StrIns = "INSERT INTO TIP_DOC (" & StrCampi & ") values (" & StrValori & ")"
      ConnessioneAzienda.Execute (StrIns)
   End If
End Sub

