Mitra Global Services

Navimania 54 – Ejecutar SQL

Hola otra vez!

Rebuscando en mi baúl de recursos he encontrado una funcionalidad que llevé a cabo hace mucho tiempo y a la que en su momento le saqué mucho jugo.

Es una manera de que desde NAV podamos ejecutar sentencias de SQL. Imaginad las posibilidades que tiene esto:

Rescatar datos complejos y hacer cargas masivas, visualizar datos de una BBDD que no sea de Nav o que esté en otro servidor dentro de nuestra red…😊

Bueno, os parece si vamos manos a la obra? 😎

Lo primero es crear las variables globales:

La primera es la dotnet que vamos a usar en todo el desarrollo.

Las otras 2 son datos que vamos a requerir como el nombre del servidor y la base de datos.

La primera función que crearemos es la de inicializar, que necesitaremos en todas nuestras conexiones.

Rellenamos las variables globales e inicializamos la conexión con el SQL.

Después, cómo no, la función de cerrar la conexión.

Vamos a la primera de las dos funciones para ejecutar las querys.

Lo primero son las variables que vamos a necesitar:

La variable SQLCommand es para poder ejecutar nuestro sentencia SQL

Como podéis ver, lo que haremos es añadir la sentencia SQL y la conexión SQL a nuestro comando de SQL y haremos que nos devuelva las filas afectadas si las hubiera.

Esta función la suelo utilizar para update o delete de datos.

Vale, ahora vamos a ir a la compleja, la que hace un select y lo añade a una tabla temporal para poder recorrerla posteriormente y tener los datos directamente desde el SQL

Se compone de tres funciones y vamos a ir desde la de más abajo hasta la que usaremos para rellenar todos los datos. Las primeras son de formateo de datos de inserción o de conversión de datos.

En esta función lo que haremos es añadir a la variable Value, el valor rescatado de nuestra conexión de SQL. Le pasamos el nombre del campo y por referencia nos devolverá ese valor.

Ahora para poder entender las siguientes funciones tengo que poner las dos juntas:

La segunda función lo que hace es hacer llamadas al SQl para encontrar datos que requeriremos en la primera función.

La primera función lo que hace es básicamente mirar si tenemos que hacer conversión de datos y recoger cuáles son los valores a convertir. Después convertirlos si hace falta para no tener errores en el SQL ni en nuestras sentencias, porque los campos se llaman diferente en nuestro Nav y en el SQL.

Ahora por fin vamos a la función para convertir los datos en datos de una rec de Nav.

Lo primero es inicializar nuestras variables y ejecutar el comando para que nos retorne todo en un Reader que lo iremos recorriendo.

La sentencia ‘SQL SELECT TOP 1 [CONVERTIDENTIFIERS] FROM [$NDO$DBPROPERTY]’ es utilizada para recuperar el valor de la propiedad CONVERTIDENTIFIERS de la tabla de propiedades de la base de datos en NDO (Network Data Objects). Esta tabla almacena información sobre las propiedades y configuraciones de una base de datos NDO, y el valor de la propiedad CONVERTIDENTIFIERS determina si los identificadores en las consultas SELECT deben ser convertidos a mayúsculas o minúsculas antes de ser enviados al motor de base de datos. Al recuperar solo el primer registro (TOP 1) se asegura que se devuelva solo un resultado

Ahora recorremos el reader y por cada registro que ha devuelto, añadiremos ese mismo numero de registro en nuestra tabla. Recorreremos todos los campos de la tabla y añadiremos los datos que necesitamos, pero como el dato nos vendrá en formatos diferentes a veces tendremos que formatearlos para que los podamos añadir en nuestra tabla temporal.

Después como he dicho, tendremos que validar cada tipo de campo por separado.

Al final daremos error, si no estuviera el tipo de campo contemplado, y por ultimo insertaremos.

Para poder ejecutar todo el proceso, solo requeriremos unas pocas líneas como os muestro a continuación:

Como siempre este ejemplo entero lo tenéis colgado en GitHub en el link.

Esperamos que esta explicación os resulte de utilidad y os emplazamos a nuestra próxima publicación.

CAT