*** Actualizar el “Front End”, mediante una copia en SLQ SERVER ***

Anuncio
*** 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
Descargar