Etiqueta

Mostrando entradas con la etiqueta OMSQLDAM. Mostrar todas las entradas
Mostrando entradas con la etiqueta OMSQLDAM. Mostrar todas las entradas

22 enero 2020

La librería de conversión de DML a SQLite

Recientemente Omnis Studio proporciona la utilidad denominada "Convert Datafile to RDBMS", la cual está soportada por la librería "omsqlconv.lbs" bajo el directorio "startup", pero no debemos pasar por alto, que ésta, no sólo se encarga del proceso de conversión, sino que también funciona en segundo plano, realizando el trabajo de emular los antiguos comandos DML, traduciéndolos y ejecutándolos contra SQLite, así como del comportamiento de semáforos (semaphores) y bloques reversibles (reversible blocks) cuando son usados.


La librería "omsqlconv.lbs", se apoya también en tablas creadas sobre la base de datos resultante de la conversión, las cuales no deberán ser modificadas o eliminadas, a continuación mostramos una lista de los comandos DML que son emulados:

Close datafile, Close lookup file, Create datafile, Floating default datafile, Open datafile, Open lookup file, Prompt for datafile, Set current datafile, Set default datafile, lookup(), Build indexes, Delete data, Drop indexes, Open runtime datafile browser, Rename data, Cancel prepare for update, Delete, Delete with confirmation, Do not flush data, Do not wait for semaphores, Flush data, Flush data now, Prepare for edit, Prepare for insert, Prepare for insert with current values, Test for only one user, Update files, Update files if flag set, Wait for semaphores, Clear all files, Clear main & connected, Clear main file, Clear range of fields, Clear selected files, Set main file, Clear find table, Disable relational finds, Enable relational finds, Find, Find first, Find last, Load connected records, Next, Previous, Prompted find, Single file find, Test for a current record, Test for a unique index value, Clear search class, Reinitialize search class, Set search as calculation, Set search name, Test data with search class, Clear sort fields, Set sort field, Build list from file, Begin reversible block, End reversible block, Quit all methods, $root.$getodbfilelist(), y alguna funciones de sys(), como: sys(11), sys(139), sys(3000) & sys(3001)

Para habilitar la emulación de comandos DML, es necesario establecer la preferencia de librería "$mapdmltodam" para SQLite. No obstante aún habrá que hacer un pequeño cambio en el código de nuestra librería, que tiene que ver con el modo en que se abrimos o accedemos a la base de datos, antes un fichero con extensión .df1 y ahora con extensión .db. El comando para SQLite sería:

Open datafile sdb://192.168.0.10:5743/SQLiteTest

Pero si queremos también podemos optar por cambiar éste comando y hacer uso de la sintaxis de notación del modo siguiente:

Do omsqlSess.$logon(‘sdb://192.168.0.10:5743/SQLiteTest’,’’,’’) Returns #F

28 diciembre 2018

Nueva herramienta de migración de Omnis DF1 a SQLite o PostgreSQL

Otra de las novedades que incluye Omnis Studio 10, supone una garantía de estabilidad y longevidad para nuestras aplicaciones, especialmente en lo que al uso de la base de datos nativa (los llamados df1) se refiere. La gran ventaja que supondrá el uso de ésta herramienta es, que tras su conversión a una base de datos SQLite o PostgreSQL, los antiguos comandos denominados "Omnis DML" permanecerán en la biblioteca convertida, pero, (y este es el importante detalle) se ejecutarán contra la base de datos seleccionada (SQLite o PostgreSQL), sin problemas y automáticamente, en lugar del antiguo fichero de datos Omnis. Por ejemplo, comandos como "Prepare for edit" o "Update files" se ejecutaran contra la nueva base de datos (SQLite o PostgreSQL). 



Sin duda ésta opción, es muy bien recibida por todos aquellos que hemos deseado por mucho tiempo, disponer de un almacenamiento de datos más robusto, proporcionándonos a la vez, una cómoda puerta de salida, en la migración de nuestras antiguas aplicaciones hacia el soporte de código SQL. Un mejorado "OmnisSQL DAM" será el encargado de producir el "milagro" de acceder a un fichero SQLite como si se tratase de un antiguo fichero .df1

Se han realizado pruebas con el nuevo "OmnisSQL DAM" contra archivos de datos SQLite y Omnis, tanto directamente como utilizando "Data Bridge". Las pruebas se han realizado insertando ~ 2.5MB y leyendo ~ 20MB de un archivo de datos. Los tiempos de finalización de la prueba se muestran en segundos.


06 febrero 2012

Error. Code # 801: , in worng place


El título de ésta entrada, obedece a un problema que se presenta cuando usamos OMSQLDAM, consultando una tabla, que contiene a su vez una columna numérica con decimales (usando "," como separador de decimales) y al ejecutar sobre ella la sentencia SQL indicada a continuación desde la ventana del "Interactive SQL":

SELECT SUM(ColumnaDecimal) FROM Tabla

El resultado de ésta consulta es el descrito, como título de ésta entrada ¿Cuál es la solución?

En un principio podría pensarse, que cambiando el parámetro de sesión $sqldecimalseparator sería suficiente, pero cual será nuestra sorpresa al ver que, tras cambiar éste parámetro obtenemos el mismo mensaje de error.

La solución nos llega por gentileza de un avezado desarrollador Omnis, Elías Gil de Caceres (España), la solución reside en el uso del método $root.$prefs.$separators.

Este método nos permite conocer o fijar los caracteres de separación que OMNIS deberá usar, su único parámetro será una cadena de 5 caracteres (dp,thou,func,imdp,imsep), si se omite el parámetro el método nos devolverá su estado actual, de otro modo se fijaran los que especifiquemos.

Método: $separators([cSeps])

Parámetro:

Carácter 1 (dp): carácter usado como separador de decimales
Carácter 2 (thou): carácter usado como separador de miles
Carácter 3 (func): carácter usado como separador entre los parámetros de una función 
Carácter 4 (imdp): carácter usado a la hora de importar/exportar cifras decimales 
Carácter 5 (imsep): carácter usado como delimitador durante una importación/exportación


De modo que: $root.$prefs.$separators('.,,.,') nos permitirá, fijar el modo de uso anglosajón y evitar así que se produzca el error ya mencionado. Usaríamos: $root.$prefs.$separators(',.,,,') para fijar de nuevo el modo español, donde la "," es usada como separador de decimales.


Los argumentos de éste método serán guardados en el archivo omnis.cfg, desde el cual Omnis tomará su estado inicial. Damos las gracias, en especial a Elías Gil de Caceres (España) por su aportación a éste blog.