SCADA - Problema ODBC y .CDB MonitorPro6.6->7.2

 
Vista:

Problema ODBC y .CDB MonitorPro6.6->7.2

Publicado por Henrik (7 intervenciones) el 23/01/2008 09:37:11
Hola,

Tengo tambien un problema con .CDB y llamadas SQL.

Estoy portando el siguiente codigo (no hecho por mi, probablemente por encima de mi cabeza ;-) de MonitorPro 6.6 a 7.2. El codigo es VB de un boton en una pantalla, para calcular un consumo durante uin periodo en tiempo anteriormente especificado por el operador;

=====

'original para comparar;
conection="DSN=dBASE Files;DefaultDir=C:FLNTin;DriverId=533;FIL=dBase5.0;MaxBufferSize=512;PageTimeout=5;"

'codigo nuevo;
conection="DSN=dBASE Files;DefaultDir=C:;DriverId=533;FIL=dBase5.0;MaxBufferSize=512;PageTimeout=5;"

'la llamada;
dbpath="C:ONDU8LOGDBTN1.CDB"
id=SQLRequest(conection,"Select GASTOT From " & dbpath & " WHERE ((FECHANUM>=" & FECHAINICIALBUSQUEDA & ") AND (FECHANUM<=" & FECHAFINALBUSQUEDA & "))",A,,3,TRUE)

=====

Lo cual resulta en el error "#3129 Invalid SQL statement..." o "#3146 ODB -- Call failed." -depende de como modifico la formacion del var conection.

El programador del codigo original dice que se debe usar los drivers ODBC ver. 3.5 de M.Office 97, lo cual no puedo instalar ahora.
Tambien consta que el fichero DBTN1.CDB no tiene un fichero .MDX, y parece ser el unico fichero que no tiene. Tampoco parece que hace falta, ya que los datos se acumulan correctamente en DBTN1, abriendole con p.e. Excel.
Supongo que será un problema bastante generico, pero hasta ahora he sido incapaz de incontrar la solucion... :-/
(Tambien intendo con la llamada SQLRequest con la parameter "....,1,TRUE)" lo cual abre un dialogo para buscar el fichero manualmente, pero parece que reconoce/accepta NINGUNO de los ficheros .MDX o .CDB (CDB ni siquiere parece como posibilidad de extension... What gives???)

Gracias antemano por cualquier ayuda!

Un saludo
Henrik Hoexbroe
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema ODBC y .CDB MonitorPro6.6->7.2

Publicado por Gustavo A. Valero P. (12 intervenciones) el 23/01/2008 17:27:21
Hola Henrik,

Te doy algunos tips para ayudarte a entender mejor el problema y escojas tú la solución:

1) Los archivos .CDB son archivos (o "ficheros" como lo llaman Uds.) generados por Monitor Pro (o FactoryLink) para almacenar datos en formato dBase. En los tiempos en que FactoryLink era multiplataforma (aún lo es sólo que no están en el mercado oficialmente las versiones para otros sistemas operativos) este era el formato de datos usado por defecto si el usuario no definía su propio manejador de BD externo (Oracle, Sybase, Informix, etc). Los archivos .MDX son los archivos índices de cada .CDB, por lo general, todos los .CDB tienen su archivo .MDX si el programador quizo tener una BD eficiente y que respondiera de manera rápido cualquier query hecho en función a un campo índice.

En la mayoría de los casos los datos históricos en una BD están indexados por un campo de tipo fecha que en MPro (o FL) se llama FLTIME y almacena valores enteros (LONG) expresados en la cantidad de segundos generados desde el "Inico de los Tiempos" (1980 si recuerdo bien).

En el siguiente link puedes tener más info sobre estos archivos:

http://www.lawebdelprogramador.com/news/mostrar_new.php?id=204&texto=SCADA&n1=465072&n2=1&n3=0&n4=0&n5=0&n6=0&n7=0&n8=0&n9=0&n0=0

2) Tienes razón al sospechar que la fuente del error provenga del tipo de manejador ODBC que uses. A partir de una versión que desconozco los driver nativos para soportar base de datos dBase vía ODBC cambiaron y hoy día es difícil conseguir el correcto. Yo he tenido éxito usando el driver ODBC para dBase v5 o el de MS Visual FoxPro, cuando me falló uno el otro pudo hacer el trabajo.

Intenta con el de Visual FoxPro a ver, quizás el query generado por tu código VB si lo soporte. Desde luego, estoy asumiendo que tu query SQL está correcto!.

3) Como plan B (o consejo general para quienes hacen una migración a las versiones 7.x), es que modifiquen su aplicación MPro referente a las tareas de bases de datos (tareas Database Logging e Historians) para que en vez de usar dBase como su manejador de BD usen ahora MS SQL Server 200x que viene gratis con el producto.

Si dominas bien MPro o FL, ésto tomará unos 10-15 min, básicamente es completar los datos de la tarea Historian for ODBC y deshabilitar todo lo referente a dBase IV.

Una vez hecho esto, podrás consultar tus datos via VBA usando el driver ODBC para MS SQL Server que es algo más común y conocido.

3) Como plan C, puedes consultar esos datos desde el servidor y usando tags propios usando la tarea Database Browser o Power SQL (más recomentable). Con esto, no hace falta crear códigos VBA, con sólo leer los tags que guardan el resultado de tu consulta es suficiente.

Espero que todo esto te sirva.

Saludos desde Venezuela.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema ODBC y .CDB MonitorPro6.6->7.2

Publicado por Henrik (7 intervenciones) el 25/01/2008 10:35:49
Primero; Muchas gracias por tus consejos, Gustavo!!!

Desde luego me has dado muchas cosas para probar, y estoy en ello.
Por desgracia va muy mal la cosa.
Aunque conseguia que el FoxPro driver podria abrir el fichero .cdb, y pasar el query sin para, el resultado es nil/zero.
Entre mulititudes de intentos, entre ellos mirando "On Error" para trapar cualquier fallo, me dicen que el fichero .cdb "no es un database". -aunque sé con bastante seguridad que funciona bien y no está corrupto ni nada...

Ahora mismo estoy instalando el SQL que viene con el MPro 7.2, pero con este me falta aun más (si es posbile) conocimiento...

Buscando en internet, sigue encontrando textos que dicen que la fuincion SQLRequest que uso, ya está obsoleto. Supongo que tengo que corrigir este tambien, cuando pasa este database a SQL¿?

Vale pues, solo quieria informarte que tu contestacion está siendo usado y scrutinizado profundamente, y que estoy agradecido!

Un saludo
Henrik
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema ODBC y .CDB MonitorPro6.6->7.2

Publicado por Gustavo A. Valero P. (12 intervenciones) el 25/01/2008 16:17:02
De nada Henrik, estamos para ayudarte.

Si me dices por ejemplo, cuál el el propósito del query que quieres hacer y que hoy día no funciona, yo pudiera probar aquí en mi oficina con otras bases de datos dBase y FL y buscar otro query alternativo con comandos distintos para solucionar tu problema definitivamente (claro, dependiendo de lo ocupado que éste en la oficina). Por ejemplo: Es un query para buscar datos entre un rango de fechas?, es un query que entrelaza 2 BDs para luego buscar datos en base a la fecha o un dato específico?.

Si por el contrario, puedes hacerlo tu mismo, trata de realizar un query usando estas 2 alternativas para descartar que el "SQLRequest" ya no trabaja:

1) Con una conexión ODBC ya hecha para esa BD dBase (.cdb), utiliza el Microsoft Query que viene con Excel para probar el query en otro entorno distinto a VBA. En Excel lo puedes ver en el menú "DataImport External DataNew Database Query"

2) Importa esa BD hacia el MS SQL Server y trabaja en ese entorno probando ese comando para ver si aún trabaja o no.

Espero que resuelvas el problema entonces.

Suerte.

Saludos desde Venezuela.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema ODBC y .CDB MonitorPro6.6->7.2

Publicado por Henrik (7 intervenciones) el 28/01/2008 09:28:36
Estimado Gustavo,

Efectivemente es un query que busca uno solo tag, entre dos fechas, y suma todo los valores. Es un consumo de geas, que se registra cada 10 minutos.
Abriendole desde Excel, se abre perfectamente. Parece que Excel reconoce el version dBASE en que está hecho, aunque yo no soy capaz de abrirlo desde un VB script de una pantalla MPro.

En total el codigo es este;

====

Sub DataManagement
'Definición de variables
Dim conection As String
Dim dbpath As String
Dim A() as Variant
Dim b() As Variant
dim rchx as integer
dim xhx as integer
dim shx as string

On Error Goto Trap
'Inicialización de variables (La primera línea debe ser verificada in situ)
' conection="Driver=" & chr(123) & "Microsoft Visual FoxPro Driver};SourceDB=c:/ONDU8/log/DBTN1.CDB;SourceType=DBC;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes"
dbpath="C:/ONDU8/LOG/DBTN1.CDB"

id=SQLRequest(conection,"Select GASTOT From " & dbpath & " WHERE ((FECHANUM>=" & FECHAINICIALBUSQUEDA & ") AND (FECHANUM<=" & FECHAFINALBUSQUEDA & "))",A,shx,3,TRUE)

mindex=Ubound(A,1)
MsgBox "mindex: " & mindex
if mindex>0 then

PETICION.TEXT="PROCESANDO"
ACUGASTOT=0.0
For Counter=1 to mindex
ACUGASTOT=ACUGASTOT+CDbl(A(Counter,id-1))*0.001
Next Counter

PETICION.TEXT="STAND BY"
Else
MsgBox "La búsqueda no ha producido resultados."
End If
Exit Sub

Trap:
rchx = SQLError(b)
MsgBox "Trap Errores: " & rchx
If (rchx>0) Then
For xhx = 0 To (rchx - 1)
MsgBox "The SQLState returned was: " & b(xhx,0)
MsgBox "The native error code returned was: " & b(xhx,1)
MsgBox b(xhx,2)
Next xhx
End If
End Sub

====

Por desgracia no se pega de todo bien en esta vgentana, pero creo que se entiende...

Estoy ententando pasarlo a SQL, pero no he sido capaz de importar ninguna tabla o datos de MPro en SQL. Este ya es territorio desconocido por mi parte, ya que lo poco que he trabajado con MPro, siempre he usado su propio dBASE interno.

Intentar usar los querys desde Excel me parece una idea escelente, y lo voy a hacer ahora. Seria una buena manera de verificar la definicion del link ODBC que uso.
Estoy usando el link ODBC de Archivos, aunque tambien se puede definir en "Sistema" y "Usuario".

El codigo mostrado arriba solo contiene la ultima version de mi conection-string. Estoy probando con variaciones miles, y tambien con otros drivers que el FoxPro Visual. Me sigue mosqueando que Excel abre el fichero sin problemas, mientras no encuentro absolutemente NINGUN driver capaz de leerlo¿?¿?

Un saludo
Henrik
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema ODBC y .CDB MonitorPro6.6->7.2

Publicado por Henrik (7 intervenciones) el 28/01/2008 17:34:55
...
Intentando importar los datos desde Excel no ha sido posible. No hay ninguna manera que puedo hacer una coneccion ODBC con ninguno de los archivos de MPro, aunque por separado Excel les abre bien.
Deduzco entonces que el ordenador no tiene instalado ningun driver ODBC que es compatible. -Y eso que hay bastantes para elegir!
La majoria de los drivers tiene la fecha 02/03/2006, (Version 4.xxx), -aunque los de FoxPro tiene 07/12/1999.

Tengo los drivers ODBC del Office 97 (version 3.5xx) en un disco, pero no encuentro ninguna manera de instalarles. (o mas bien; desinstalar los otros primero).
Ni siquiere sé si se puede hacer?

Un saludo
Henrik
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema ODBC y .CDB MonitorPro6.6->7.2

Publicado por Gustavo A. Valero P. (12 intervenciones) el 31/01/2008 15:37:01
Hola Henrik,

Hay algo que obvié en tu problema y que indudablemente afecta tu código VBA en el Monitor Pro 7.2.

Las versiones ECS 6.x de MPro no usan el lenguaje Visual Basic for Application puro y nativo de Microsoft sino que emulaban sus comandos y resultados. Este entorno se llamaba "PowerVB" y desde luego, la mayoría de sus comandos son incompatibles en el entorno VBA de la versión 7.2 y superiores.

Esto hace que el comando "SQLRequest" no exista en la librería de comandos del VBA y por consiguiente, tu código nunca se ejecute correctamente.

Te sugiero entonces que utilices y programes en base a la tecnología ADO (ActiveX Data Objects) dentro del editor VBA para que puedas leer o manipular BDs sin problemas. Esto es lo que yo he hecho en proyectos previos usando BDs de dBase via VBA.

En la web hay muchos ejemplos de cómo conectarse y leer datos de una BD via ADO, con este link puedes empezar:

http://es.wikipedia.org/wiki/ADO_(inform%C3%A1tica)

Disculpa esta omisión mía sobre este aspecto pero fue hasta ayer que recordé la existencia del "PowerVB" y sus implicaciones posteriores en versiones nuevas (esto aplcia también para FactoryLink obviamente). Estoy 90% seguro que el problema es la incompatibilidad de los comandos/entornos VB de ambas versiones y que todo se solucionará si rehaces el código en función del ADO.

Espero resuelvas con esto tu problema.

Saludos desde Venezuela.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema ODBC y .CDB MonitorPro6.6->7.2

Publicado por Henrik (7 intervenciones) el 06/02/2008 10:46:05
Hola,

Gracias otra vez por tu ayuda!

> Disculpa esta omisión mía sobre este aspecto pero fue hasta ayer que recordé
> la existencia del "PowerVB" y sus implicaciones posteriores en versiones
> nuevas (esto aplcia también para FactoryLink obviamente). Estoy 90% seguro
> que el problema es la incompatibilidad de los comandos/entornos VB de
> ambas versiones y que todo se solucionará si rehaces el código en función del
> ADO.

De acuerdo. Entiendo. Pero el codigo se "valida" desde el editor VB, asi que la funcion debe estar permetido?!
Pero lo que NO entiendo es porque NO es posible realizar una simple consulta desde Excel, con ninguno de los drivers ODBC instalados?!?!

Cero que no solo habra que migrar de dBASE a SQL, pero tambien modificar el codigo para usar ADO, como dices arriba...

Un saludo
Henrik
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema ODBC y .CDB MonitorPro6.6->7.2

Publicado por Henrik (7 intervenciones) el 05/03/2008 13:30:04
Solicionado;

Estimado Gustavo, por tus repetidas contestaciones, creo que te debo una aclaracion final;

Funciona con el Visual Foxpro driver.
El database (fichero .CDB) original estaba dañado, aunque Excel solo no tenia ningun problema con ello. Re-estableciendo la tabla funciona el ODBC/DNS.
La funcion SQLRequest si funciona, pero el programa no estaba pasando bien las fechas entre cuales buscar. (Los valores de los campos con los limites se perdieron a mostrar un MsgBox en pantalla...)
Creo que tambien havia algun problema con la respuestea del request; que el indice ahora es uno mas o menos de antes...

Un saludo
Henrik
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema ODBC y .CDB MonitorPro6.6->7.2

Publicado por Gustavo A. Valero P. (10 intervenciones) el 05/03/2008 22:30:52
Hola Henrik,

Me alegra que hayas resuelto tu problema.

Sólo una pregunta final para aclarar algo que escribí en una nota previa sobre este problema: Cuál editor gráfico estás utilizando en tu aplicación 7.2: El Application Editor (AE) o el Client Builder?.

Como recordaras, te indiqué que la funcion "SQLRequest" no existe en el ambiente VBA del Client Builder sólo en el "PowerVB" del Application Editor
por lo que me confundes cuando dices que "La funcion SQLRequest si funciona..".

De ser así, entonces estás usando el viejo editor de gráficos (AE) en tu nueva aplicación 7.2, cierto?.

Saludos desde Venezuela.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema ODBC y .CDB MonitorPro6.6->7.2

Publicado por Henrik (7 intervenciones) el 06/03/2008 15:36:23
Si, asi es; Usamos el viejo Application Editor.
El otro ni lo conozco.
(Ten en cuenta que el trabajo es una migracion de 6.6. a 7.2!)

Ahora estoy con SG2, para un proyecto nuevo...

Saludos desde Epaña
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema ODBC y .CDB MonitorPro6.6->7.2

Publicado por rurururu (1 intervención) el 06/06/2008 14:36:50
joer que rooolllloooooooooooooooo............
anda y k te follen..pesaoooooooooooooo...........
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar