*** Actualizar el “Front End”, mediante una copia en SLQ SERVER *** USE [dbPBA] GO /****** Object: Table [dbo].[tbSGVersion] SET ANSI_NULLS ON GO Script Date: 10/07/2013 16:27:12 ******/ SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[tbSGVersion]( [sgFileName] [nvarchar](18) NOT NULL, [sgFile] [image] NULL, [sgVersion] [int] NOT NULL, ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO 21/01/2013 Sistemas de Gestión H. www.sgh.com.mx Página 1 de 9 *** Actualizar el “Front End”, mediante una copia en SLQ SERVER *** 21/01/2013 Sistemas de Gestión H. www.sgh.com.mx Página 2 de 9 *** Actualizar el “Front End”, mediante una copia en SLQ SERVER *** o o Private Sub cmdCarga_Click() Dim strFileName As String Dim rs As ADODB.Recordset Dim fso As New Scripting.FileSystemObject Dim Conect As ADODB.Connection On Error GoTo CtrlErr '-- El archivo que vamos a subir strFileName = sArchivo If strFileName <> "" Then Set fso = New Scripting.FileSystemObject Set Conect = New ADODB.Connection Set rs = New ADODB.Recordset Conect.ConnectionString = sCadena '-- La cadena de conexión tomada desde el texbox. Conect.Open rs.Open "SELECT * FROM tbSGVersion ", Conect, adOpenKeyset, adLockOptimistic rs!sgFilename = fso.GetBaseName(strFileName) & fso.GetExtensionName(strFileName) rs!sgVersion = Nz(nVersion, 0) '—La versión que se lleva está copia! fFileToBlob strFileName, rs!sgfile '-- Subimos el archivo!!! rs.Update End If MsgBox "Archivo arriba!" CtlSalir: 21/01/2013 Sistemas de Gestión H. www.sgh.com.mx Página 3 de 9 *** Actualizar el “Front End”, mediante una copia en SLQ SERVER *** On Error Resume Next Exit Sub CtrlErr: MsgBox Err.Description & " en la carga del archivo", vbExclamation Resume CtlSalir End Sub Public Function fFileToBlob(ByVal Filename As String, fld As ADODB.Field) As Boolean Dim bResult As Boolean Dim intIdArchivo As Integer Dim fso As Object Dim B() As Byte Dim fLen& On Error GoTo CtrlErr bResult = False Set fso = VBA.CreateObject("Scripting.FileSystemObject") fLen = VBA.FileLen(Filename) ReDim B(fLen - 1) intIdArchivo = VBA.FreeFile Open Filename For Binary Access Read As #intIdArchivo Get #intIdArchivo, , B fld.AppendChunk B bResult = True CtlSalir: On Error Resume Next Close intIdArchivo fFileToBlob = bResult Exit Function CtlSalir: MsgBox Err.Description, vbExclamation bResult = False Resume ExitHere End Function If fCheckVersion(DLookup("pmtLocal_Version", "tbpmt_Local")) = True Then MsgBox "Hay disponible una nueva versión del sistema. Se procederá a descargarla e instalarla" & _ vbNewLine & "Por favor espera a que el proceso termine, se volverá a pedir que vuelvas a iniciar sesión.", vbInformation, "Nueva versión del sistema." ' -- Obtenemos la versión más reciente sGetFile 21/01/2013 Sistemas de Gestión H. www.sgh.com.mx Página 4 de 9 *** Actualizar el “Front End”, mediante una copia en SLQ SERVER *** End If Function fCheckVersion(nThisVersion As Integer) Dim rs As ADODB.Recordset Dim fso As New Scripting.FileSystemObject Dim Conect As ADODB.Connection On Error GoTo HandleErr fCheckVersion = False Set fso = New Scripting.FileSystemObject Set Conect = New ADODB.Connection Set rs = New ADODB.Recordset Conect.ConnectionString = “ **** Cadena de Conexión a SQL SERVER ***” Conect.Open rs.Open "SELECT top 1 sgVersion FROM tbSGVersion ", Conect, adOpenForwardOnly, adLockReadOnly ' -- La versión que tenemos es menor a la versión que hay en la tabla If nThisVersion < rs!sgVersion Then fCheckVersion = True End If ' If nVersion < rs!sgVersion Then ' -- Cerramos las conexiones Conect.Close Set rs = Nothing ExitHere: On Error Resume Next Exit Function HandleErr: MsgBox Err.Description & " en fCheckVersionSG ", vbExclamation Resume ExitHere End Function '-- Obtiene desde el servidor una versión de SG actualizada Sub sGetFile() Dim RetVal As Variant Dim rs As ADODB.Recordset Dim fso As New Scripting.FileSystemObject Dim Conect As ADODB.Connection Dim sFileNvo As String 21/01/2013 Sistemas de Gestión H. www.sgh.com.mx Página 5 de 9 *** Actualizar el “Front End”, mediante una copia en SLQ SERVER *** On Error GoTo HandleErr Set fso = New Scripting.FileSystemObject Set Conect = New ADODB.Connection Set rs = New ADODB.Recordset Conect.ConnectionString = TempVars("sConect") Conect.Open '-- Seleccionamos todos los registros de SG rs.Open "SELECT * FROM tbSGVersion ", Conect, adOpenForwardOnly, adLockReadOnly sFileNvo = fAppPath & rs!sgFilename & "." & rs!sgExtension ' -- Si existe el archivo lo eliminamos!!! If Dir(sFileNvo) <> "" Then Kill sFileNvo End If 'Obtenemos el archivo, en la ruta de la app fBlobToFile rs!sgfile, sFileNvo 'El archivo debe de estar en formato Zip, lo descompacatamos sUnZip sFileNvo, , True ******* NOTA ******** **** Si su archivo es muy grande aquí deben de hacer una pausa, con la finalidad de darle tiempo al sistema que extraiga el zip. Pueden ser 5 o 10 segundos ****** RetVal = Shell(fAppPath & "Reinicia.cmd " & fAppPath & " sgMiApp.accde sgMiApp1.accde ") 'Salimos de la aplicación Application.Quit acQuitSaveNone ' -- Cerramos las conexiones Conect.Close Set rs = Nothing ExitHere: On Error Resume Next Exit Sub HandleErr: MsgBox Err.Description & " en la carga del archivo", vbExclamation Resume ExitHere End Sub '========================================================== 'Almacena y extrae un archivo cualquiera usando recordset's DAO y arrays de bytes '-- Lo utilizamos para extraer datos desde SQL server Public Function fBlobToFile(fld As ADODB.Field, Filename As String) As Boolean Dim bResult As Boolean Dim bArray() As Byte Dim lngTotalSize As Double Dim intIdArchivo As Integer On Error GoTo CtrlErr bResult = False lngTotalSize = fld.ActualSize ReDim B(lngTotalSize - 1) 21/01/2013 Sistemas de Gestión H. www.sgh.com.mx Página 6 de 9 *** Actualizar el “Front End”, mediante una copia en SLQ SERVER *** bArray = fld.Value intIdArchivo = VBA.FreeFile Open Filename For Binary Access Write As #intIdArchivo Put #intIdArchivo, , bArray bResult = True ctrlSalir: On Error Resume Next Close intIdArchivo fBlobToFile = bResult Exit Function CtrlErr: MsgBox Err.Description, vbExclamation Resume ctrlSalir End Function '========================================================== ' -- Finalidad: Extrae un archivo zip Public Sub sUnZip(ZipFile As String, Optional TargetFolderPath As String = vbNullString, _ Optional OverwriteFile As Boolean = False) On Error GoTo ErrHandler Dim oApp As Object Dim fso As Object Dim fil As Object Dim DefPath As String Set fso = CreateObject("Scripting.FileSystemObject") If Len(TargetFolderPath) = 0 Then DefPath = CurrentProject.Path & "\" Else If fso.folderexists(TargetFolderPath) Then DefPath = TargetFolderPath & "\" Else Err.Raise 53, , "Carpeta no encontrada" End If End If If fso.FileExists(ZipFile) = False Then MsgBox "No se pudo encontrar " & ZipFile & ".", vbInformation, "Error" Exit Sub Else 'Extract the files into the newly created folder Set oApp = CreateObject("Shell.Application") With oApp.NameSpace(ZipFile & "\") If OverwriteFile Then For Each fil In .Items If fso.FileExists(DefPath & fil.Name) Then Kill DefPath & fil.Name End If Next End If oApp.NameSpace(CVar(DefPath)).CopyHere .Items End With On Error Resume Next Kill Environ("Temp") & "\Temporary Directory*" 21/01/2013 Sistemas de Gestión H. www.sgh.com.mx Página 7 de 9 *** Actualizar el “Front End”, mediante una copia en SLQ SERVER *** 'Eliminamos el archivo que se extrajo ' Kill ZipFile End If ExitProc: On Error Resume Next Set oApp = Nothing Exit Sub ErrHandler: Select Case Err.Number Case Else MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical, "Unexpected error" End Select Resume ExitProc Resume End Sub RetVal = Shell(fAppPath & "Reinicia.cmd " & fAppPath & " sgMiApp.accde sgMiApp1.accde ") o o o o o o @ECHO OFF CLS REM *********** bloque para hacer la pausa ************ REM *********** Esperando que cierre el programa que llamo al bat ************ set Counter=500 21/01/2013 Sistemas de Gestión H. www.sgh.com.mx Página 8 de 9 *** Actualizar el “Front End”, mediante una copia en SLQ SERVER *** set nVeces=1 :sBucle set /a nVeces=%nVeces%+1 echo nVeces if %nVeces% == 1000 (goto sSigue) else (goto sBucle) goto sBucle REM *********** Fin del ciclo ************ :sSigue cd %1 del %2 ren %3 %2 START %2 cls @EXIT 21/01/2013 Sistemas de Gestión H. www.sgh.com.mx Página 9 de 9