Ya hemos visto este mismo ejemplo con AVEVA Intouch-System PlatformWinCC y ahora por simpatia le ha tocado a Factory Talk View SE.
Pues al igual que anteriormente para Factory Talk View vamos a necesitar los mismos requisitos que para WinCC , con lo cual copia y pega del artículo anterior

Que necesitamos?

  • Vamos a necesitar los drivers para crear la conexión

Donde lo descargo?

  • Aqui tenemos toda la información SQLite ODBC Driver que nos interesa y enlace directo para su descarga

Aquí directamente ya he instalado los drivers de 32bits , porque Factory Talk View Studio, donde voy a realizar las pruebas está instalado en C:\Program Files (x86) , pero para agregar algo diferente al artículo, si tienes curiosidad de saber si un ejecutable que tengas es de x32/x64 puedes probar el siguiente PowerShell.

Es mas , Factory Talk View SE , con la versión 13 sino me equivoco incorporo la novedad de ejecutar Scripting PowerShell en el HMIServer , es decir del lado de Servidor , no del Cliente. Solo se pueden ejecutar los script en el HMIServer.

Cambia la ruta del archivo que quieras comprobar , abre una consola de powershell como administrador y pega el código

function Get-PEHeader {
    param (
        [string]$Path
    )

    $buffer = New-Object byte[] 4096
    [System.IO.File]::Open($Path, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read).Read($buffer, 0, $buffer.Length) | Out-Null

    # Check for 'MZ' signature
    if ($buffer[0] -ne 0x4D -or $buffer[1] -ne 0x5A) {
        Write-Error "Not a valid PE file"
        return
    }

    # Get PE header offset
    $peOffset = [System.BitConverter]::ToInt32($buffer, 0x3C)

    # Check for 'PE\0\0' signature
    if ($buffer[$peOffset] -ne 0x50 -or $buffer[$peOffset+1] -ne 0x45 -or $buffer[$peOffset+2] -ne 0x00 -or $buffer[$peOffset+3] -ne 0x00) {
        Write-Error "Not a valid PE file"
        return
    }

    # Get Machine field
    $machine = [System.BitConverter]::ToUInt16($buffer, $peOffset + 4)

    switch ($machine) {
        0x014C { "x86 (32-bit)" }
        0x8664 { "x64 (64-bit)" }
        default { "Unknown or not a PE file" }
    }
}

$archivo = "C:\Program Files (x86)\Rockwell Software\RSView Enterprise\VStudio.exe"
$resultado = Get-PEHeader -Path $archivo
Write-Output "El archivo $archivo es de arquitectura: $resultado"

Siguiendo con la instalación del drivers, ya lo tenemos listo.

Y pasamos al código que vamos a ejecutar. Que es el mismo 🙂 , solo he modificado para ver en la consola el formateo del resultado, pero está vez se ejecuta en Visual Basic for Applications (VBA)

Para quien se incorpore o sea nuevo en Factory Talk View, vamos a escribir el código como hemos mencionado en VBA , pero en las propiedades del botón, debes exponerlo a VBA, tienes que cambiar esa propiedad para que sea visible y accesible desde VBA

Y si quieres probarlo tu mismo aquí tienes el código

    Dim conn, rst, strSQL, results, i
    Set conn = CreateObject("ADODB.Connection")
    Set rst = CreateObject("ADODB.Recordset")
    
    LogDiagnosticsMessage "--> Start"
    
    ' ABRIR CONEXIÓN
    conn.Open "DRIVER=SQLite3 ODBC Driver;Database=C:\Resources\PHS.db;LongNames=0;Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;"
    
    strSQL = "SELECT * FROM Configuration"
    
    ' ABRIR RECORDSET
    rst.Open strSQL, conn
    
    ' MOSTRAR RESULTADOS EN MSGBOX
    results = ""
    'Do Until rst.EOF
    '    For i = 0 To rst.Fields.Count - 1
    '        results = "   " & rst.Fields(i).Name & ": " & rst.Fields(i).Value
    '        LogDiagnosticsMessage results
    '    Next
    '    rst.MoveNext
    'Loop
    
    Do Until rst.EOF
        results = "   " & rst.Fields(0).Name & ": " & rst.Fields(0).Value & " " & rst.Fields(1).Name & ": " & rst.Fields(1).Value
        LogDiagnosticsMessage results
        rst.MoveNext
    Loop
    
    ' CERRAR RECORDSET
    rst.Close

    LogDiagnosticsMessage "--> End"
    ' LIBERAR RECURSOS
    Set rst = Nothing
    Set conn = Nothing	

Y aquí nuestro resultado.

NOTA: Si trabajas con una arquitectura distribuida, recuerda que el Driver lo debes instalar en todos los clientes, que vayan a conectarse a la base de datos SQLite.