Programar aplicaciones de bases de datos sin sentencias SQL
- Publicado por [N1] jarboleya.velneo.gmail
- Velneo
¿No usar sentencias SQL al programar mis aplicaciones contra una base de datos?
La mayorÃa de las herramientas del mercado requieren el uso de sentencias SQL para atacar bases de datos y realizar consultas o modificar la información.
En los últimos años se ha trabajado en la búsqueda de alternativas que faciliten la labor de programación de acceso a la información, como ejemplo pongo a continuación un extracto sacado de una página de MSDN del proyecto LINQ:
Consultas integradas en los lenguajes .NET
Después de dos décadas, la industria ha alcanzado un punto estable en la evolución de las tecnologÃas de programación orientada a objetos. Los programadores ahora están familiarizados con conceptos como las clases, objetos y métodos. Analizando la generación de tecnologÃas actual y siguiente, se hace evidente que el siguiente gran reto para la tecnologÃa de la programación es reducir la complejidad del acceso e integrar la información que no se define de manera nativa utilizando la tecnologÃa orientada a objetos. Las dos fuentes de información no orientadas a objetos más comunes son las bases de datos relacionales y XML.
En vez de añadir caracterÃsticas especÃficas para el tratamiento de datos relacionales o XML a nuestros lenguajes de programación y motor de ejecución, con el proyecto LINQ hemos seguido un enfoque más general, y estamos añadiendo a .NET Framework facilidades de consulta de propósito general aplicables a todas las fuentes de información, y no solo a los datos relacionales o XML. Esta facilidad se llama ‘Consultas integradas en los lenguajes’ (Language Integrated Query – LINQ).
En Velneo ahora y desde 1996 cuando vió la luz el proyecto “Velázquez Visual” los programadores han desarrollado aplicaciones empresariales sin necesidad de utilizar sentencias SQL.
La base de datos modelo real de Velneo en este sentido se comporta de forma diferente a las bases de datos relacionales ya que todos los enlaces que se definen en la estructura de la base de datos entre las tablas tienen las siguientes caracterÃsticas:
- Son permanentes
- Sólo se definen una vez
- Permiten el acceso a todas las tablas enlazadas.
- Dispone de enlaces en todas las direcciones:
- A maestros: Enlace a tabla maestra.
- A históricos: Singular de plural por Ãndice, singular de plural por posición.
- A registros de la propia tabla: Enlace a si misma, enlace a registros contiguos.
- A cualquier tabla: Resolviendo cualquiera de sus Ãndices de clave única.
A continuación podemos ver como tras una definición de estructura de base de datos, acceder a la información resulta sencillo, intuitivo y rápido. Sin escribir código, visualmente. En la siguientes imágenes vemos a la izquierda el esquema de tablas de una aplicación de facturación y a la derecha como visualmente un programador selecciona el nombre del paÃs, de la marca, del artÃculo de la lÃnea de una factura, es decir, atrapa el valor de un campo correspondiente a una tabla que esta a nivel de enlaces a 3 maestros o lecturas de distancia, en este caso ya que Velneo no pone lÃmites al número de niveles.
![]() |
![]() |
Cuando se gestionan datos en los procesos, el programador dispone de sentencias especializadas que no requieren el uso de sentencias SQL y que facilitan la programación. En las siguientes imágenes podemos observar como el editor de procesos en función de si la instrucción tiene origen ficha de tabla o lista de tabla permite seleccionar funciones especificas asistiendo al programador en todo momento y evitando errores.
![]() |
![]() |
En la imagen siguiente podemos ver un ejemplo de un proceso desarrollado en Velneo:

Con esto no quiero indicar que SQL no tenga ventajas, al contrario, tiene y muchas, tal vez el problema haya sido la evolución de su implentación en los lenguajes de programación que durante mucho tiempo ha seguido requiriendo el uso de las sentencias WHERE y un mayor esfuerzo por parte del programador.
Cuando conoces Velneo por primera vez y estás acostumbrado al uso de SQL te puede resultar extraño no tener que crear ninguna sentencia para programar el acceso a la información, pero es fácil acostumbrarse a Velneo y sus ventajas.
Etiquetas: base de datos, bbdd, linq, modelo real, modelo relacional, relacionales, sentencias, sin código, sql, visual











Julio 29, 2008 - 19:53 #
Muy, muy bueno este post Sr. Arboleya. En serio, he aprendido muchas cosas, bueno más bien he aclarado muchos conceptos que tenia algo difusos. ¡Muchas gracias, en serio!
Julio 30, 2008 - 07:26 #
Poderosa herramienta. Con razón se podrÃa decir que Velneo es antes que nada (y entre otras cosas) una base de datos que facilita objetos visuales para su administración y explotación. Todas las bases de datos hacen más o menos lo mismo, pero en todas hay que conocer el SQL, lo cual requiere de un esfuerzo inicial además que todos los motores no siguen la misma sintaxis en las instrucciones. Sin embargo creo que conocer bien SQL es casi un lenguaje de programación por si mismo y de una tremenda utilidad. En ese sentido, si no disponemos en Velneo de SQL ¿qué ocurre en un caso como el que detallo a continuación?
Me llama la atención una caracterÃstica de Velneo mencionada en el artÃculo: los enlaces son permanentes.
En ese sentido se me presenta una duda: Hay ocasiones en que una determinada consulta es circunstancial: responde a una necesidad muy puntual de un usuario (quizás algo caprichoso o “descerebrado”), por ejemplo, alguien solicita la relación de los productos vendidos por cliente pero consolidados por producto (el total de las unidades vendidas de cada producto) y ordenados de forma decreciente por el número de unidades vendidas en un periodo. A casi nadie se le ocurre armar una tabla de acumulados ni siquiera crear indices en las tablas de ventas pues se trata de una solicitud circunstancial, que lo más probable nunca vuelvan a pedir y que no importa que demore 30 ms o 2 minutos en procesarse pues no se va a repetir. Lo normal es utilizar una instrucción SQL que serÃa algo asà más o menos:
SELECT nombre_cliente, nombre_producto, SUM(unidades) AS cantidad
FROM ventas LEFT JOIN clientes ON ventas_cliente = clientes_codigo LEFT JOIN productos ON ventas_producto = productos_codigo
WHERE fecha_venta >= fecha1 AND fecha_venta <= fecha2
GROUP BY nombre_cliente, nombre_producto, cantidad DESC
En la primera lÃnea se seleccionan los campos y se totalizan las unidades
En la segunda lÃnea se selecciona la tabla origen y se relaciona (temporalmente) la tabla de ventas con la de clientes y con la de productos para sacar los nombres en lugar de los códigos
En la tercera lÃnea se selecciona el periodo a considerar
En la cuarta lÃnea se indica que agrupe los datos resultantes y los ordene por nombre del cliente, nombre del producto y cantidades vendidas (descendente este último campo), es decir el producto más vendido el primero.
y ya está. Desde cualquier programa administrador del motor de base de datos se puede ejecutar la consulta, el resultado se imprime, se exporta a Excel o lo que sea y se le entrega al solicitante. la sentencia se borra y no hemos tenido que modificar nada en la base de datos, no hay Ãndices ni acumulados que quizás no vamos a volver a utilizar y que “pesan” en la base de datos, ni siquiera queda rastro de la solicitud. ¿Cómo se aborda este tipo de tareas en Velneo?, ¿con procesos?. Veo que V7 ya tiene un dataClient que permite moverse en las bases de datos, tablas y manipularlas. ¿Cómo hacen eso en V6?. ¿Tienen que crear objetos visuales para obtener el resultado de la consulta (o proceso)?.
Quiero aclarar que la intención de este post no es polemizar, sino intentar tener las ideas claras sobre las ventajas y desventajas de la herramienta. No se a qué grupo pertenezco de los que habla Alfonso Gutierrez en el anterior post, creo que soy del grupo de los “duros de decidirse” o de los “brutos de entender”.
Saludos cordiales a todos
Manuel Tovar
Barranquilla – COLOMBIA
Julio 30, 2008 - 09:49 #
Manuel, estoy totalmente de acuerdo con tu post sobre consultas de agrupación. Este de momento es para mi uno de los puntos flacos de Velneo que se podrÃan mejorar. Un intento tÃmido, aunque insuficiente, ha sido el objeto de hoja de cálculo. Si esta tuviese la visualización y propiedades de una rejilla serÃa mucho más potente.
Saludos.
Julio 30, 2008 - 09:56 #
Gracias por tu comentario Manuel,
Tu pregunta me parece muy interesante, voy a intentar darte mi visión sobre lo que preguntas.
Lo primero me gustarÃa comentarte que Velneo, desde mi punto de vista no es sólo una base de datos que facilita objetos visuales (aunque entiendo que la puedas ver asÃ). Creo que Velneo es la integración de una base de datos, un lenguaje (herramienta) de programación de alto nivel y todos los recursos necesarios para la programación e implantación de aplicaciones. Por ese motivo la consideramos una “plataforma de desarrollo de aplicaciones empresariales”.
Cuando digo enlaces permanentes me refiero a:
1º) Sólo se crean una vez.
2º) No requiere como ocurre en las sentencias SQL que continuamente estés resolviendo el enlace entre 2 tablas con la cláusula WHERE o JOIN pese a que habÃas definido en la estructura de la base de datos esa relación.
Por eso cuando digo que son permanentes me refiero a que realmente persisten y sólo es preciso declarar la relación de las tablas una única vez.
Sobre el ejemplo que propones te hago los siguientes comentarios:
1º) Supongo que la sentencia que has escrito estás valorando que lo haga un programador. Es cierto que existen usuarios finales avanzados (pero son un minorÃa), por lo que pese a tener SQL cuando un usuario final necesite conseguir esa información salvo ese grupo de avanzados tendrá que recurrir a los servicios de un programador que puede estar en su empresa o ser un proveedor de servicios lo que supone tiempo y coste.
2º) Un usuario final de una aplicación en Velneo sin necesidad de escribir SQL y sin conocer los nombres de los compos podrÃa hacer uso de la navegación y obtener la lista de registros de la siguiente forma:
- Busca el cliente y obtiene una rejilla con ese registro.
- Navega a histórico de documentos de venta de ese cliente y obtiene la lista de facturas, por ejemplo.
- Filtra entre fechas estos documentos utilizando la opción que existe en el vClient y vRunner, sin necesidad de usar ningún Ãndice especial para el caso ni tampoco de código programado.
- Navega a histórico de todas las lÃneas de venta y obtiene la lista de registros que quiere.
- Lo más habitual (salvo que el número de artÃculos sea muy grande >40, por ejemplo, tiene una opción automática que es multipartir lista. En este caso por artÃculo y al hacerlo obtendrá tantas rejillas como artÃculos diferentes hay en la lista obtenida y en la rejilla de lÃneas de factura suelen estar totalizados los campos cantidad e importe por lo que obtiene las cantidad vendidas por cada uno, el importe vendido entre las fechas seleccionadas.
Piensa que lo importante de esta solución aunque no es la que planteas al 100%, pues falta el resumen con todos los sumatorios de cada artÃculo, es muy utilizada por los clientes finales y, sobre todo, puede hacerlo ellos sin necesidad de recurrir a un programador.
3º) Igual que en el caso anterior, una vez obtenida la lista de lÃneas de venta se puede exportar la lista a ASCII e importarla en Excel y obtener el informe a partir de esta información. Esto también lo puede hacer el usuario final sin necesidad de recurrir a un programador y sà es equivalente a lo que propones. De todas formas, es cierto, que un usuario que sabe navegar, exportar y usar asà Excel ya es un usuario de cierto nivel, muchos usuarios seguro que recurrirÃan a un programador para obtenerlo.
4º) Es cierto que con Velneo 6.x no podemos obtener directamente un sumatorio con la navegación. Esta caracterÃstica de las sentencias SQL es muy potente como comentas, por eso es un Lenguaje de Consulta. En Velneo V7 dispondrás de ODBC y sà podrás hacer sentencias SQL contra la base de datos de Velneo obteniendo el sumatorio de un campo. Por eso en el artÃculo comento que SQL tiene muchas virtudes y también por ese motivo en Velneo V7 le hemos dado mucha importancia a que los programadores y los usuarios puedan tener un ODBC que les permita hacer consultas y operaciones con SQL.
5º) Si te das cuenta al final de todo hablas de que el resultado hay que imprimirlo o enviarlo a Excel. En el caso de la Excel ya está comentado en el punto 3. En el caso del informe en Velneo existe un editor de informes personalizados, que es gratuito y de libre distribución para poder instalarlo en los clientes finales. Es decir, un programa que permite a los programadores y a los usuarios finales (avanzados) crear nuevos informes (fuera de la aplicación) es decir, se puede personalizar cualquier informe de la aplicación o crear nuevos informes sin tocar el código fuente de la aplicación. De esta forma nuestro cliente podrÃa crear un informe con la agrupación por artÃculo y un cálculo para acumular las cantidades y ese informe ejecutarlo desde la rejilla de lÃneas de venta obtenida en el punto 2. Si quiere el informe lo puede dejar para reutilizarlo o eliminarlo ya que el fichero de personalización se gestiona de forma independiente.
Resumiendo, estamos de acuerdo que siempre habrá cosas que se puedan hacer con SQL y que en Velneo resulten más complejas o puedan requerir programación y viceversa, pero para la gran mayorÃa del trabajo de programación que un desarrollador realiza las ventajas de no tener que crear sentencias SQL es, siempre desde mi punto de vista, muy muy ventajoso y rentable.
Saludos.
Julio 30, 2008 - 16:22 #
Gracias Jesús por tu respuesta. Muy detallada. El programador de informes es una muy buena utilidad que no todos las herramientas tienen. No entiendo por qué. En VFP puedes dejar que el usuario final modifique el informe pero no crear informes nuevos ni nada de eso. Me parece que esa si es una ventaja muy importante.
En efecto la sentencia del ejemplo no es para usuario final. Es para programador. Yo particularmente, en algunas aplicaciones, lo que hago es colocar un formulario para que el usuario final coloque la lista de los campos que desea obtener, los rangos de búsqueda y condiciones de búsqueda, los totales que desea y yo, por programación, le genero la sentencia SQL que luego ejecuto de forma transparente para el usuario. Es decir, un generador de sentencias SELECT. Es un proceso más o menos complejo. Una vez que funciona es muy práctico, pero es complejo de poner a punto.
Gracias de nuevo por tus explicaciones. Me han ampliado mi visión de Velneo.
Saludos cordiales
Manuel Tovar
Barranquilla – COLOMBIA
Julio 30, 2008 - 17:17 #
Gracias a tà Manuel,
Efectivamente eso que comentas de programarse un generador de consultas para el usuario final es algo para lo que Velneo 6.x no está pensado y su desarrollo serÃa mucho más laborioso de lo que comentas en VFP.
Como te comentaba Velneo V7 nace con una visión abierta hacia los estándares, con el driver ODBC desde su primera versión y con previsión de soportar plugins y controles de terceros en futuras versiones a través de su API.
Si analizamos la filosofÃa del Velneo, ese generador de consultas deberÃa ser una herramienta implÃcita en el ejecutor sin necesidad de programación. No es la primera vez que se plantea y tomamos buena nota para, quien sabe, en el futuro disponer de esta funcionalidad de forma automática o a través de un plugin.
Saludos.
Julio 31, 2008 - 12:09 #
No se puede comparar la tecnologÃa LINQ con el metodo de aceso a datos usado por Velneo.
Es cierto que Velneo permite aceso a datos sin usar sentencias SQL lo cual tiene una parte muy positiva pero tambien una negativa, esta fuera de todo standard.
LINQ es un paso más de SQL con un objetivo claro de acceso a datos y tratarlos de forma única sea cual sea su origen, por ejemplo XML. Esto aún no lo podemos realizar con Velneo, aunque si podemos realizarlo via programación.
El modelo de acceso a datos de Velneo como bien dices data de 1996 y que a mi se parece muy bueno, apesar de lo que he comentado, creo que necesita algún paso más en V7.
Un saludo
Julio 31, 2008 - 16:13 #
De hecho, Victor, por lo visto en la Beta Pública, se ve que se están haciendo avances en ese sentido. Lo que me llama mucho la atención, y no lo digo por ti, es ese afán de comparar y/o tratar de empatar herramientas de desarrollo, cuya naturaleza o concepción es intrinsecamente diferente. Lo que nos debiera ocupar a todos, es que la herramienta que pretendamos usar para nuestro trabajo, posea los atributos que necesitamos en una implantación real. Como es sabido, existen otros factores variables, que influyen a la hora de tomar la decisión, tales como complejidad de la tecnologÃa, el nivel de preparación del usuario final, la dificultad de adaptación de las personas que trabajarán con el software, que suman a los costos de implementar la solución, más los inherentes a la escalabilidad del producto creado y sus mantenciones… En fin, mucho en qué pensar.
Desde el hijo predilecto de Ashton Tate, a principios de los ‘80, dBase, la presencia de un lenguaje de consulta, ha formado el pilar de todo administrador de Bases de Datos. Es innegable que SQL predomina, como un estándar y al alcance de todos, pero, aunque pensemos que hoy estamos más adaptados a la tecnologÃa emergente, siempre habrá personas que recurrirán a un experto: Analista-Programador, para encargarle una tarea sobre los datos de su sistema, no por desconocimiento de SQL, sino por que no tiene el tiempo para hacerlo. Ustedes saben lo que implica hacer una consulta a una BD con varias tablas y relaciones: pensar en lo que se quiere, buscar la info en las tablas, crear la consulta, probar, depurar la consulta, traspasar a informe, archivo o Excel y volver a procesarle… Definir el layout óptimo del informe… Comprobar que se está haciendo lo correcto… y más.
Con Velneo: Qué se quiere, un vistazo a la estructura de la BD, crear la búsqueda, otro Ãndice, formulario y/o rejilla, y listo. Casi de un plumazo.
Sea como se quiera ver el tema, siempre van a recurrir a alguien más para hacer dicha labor. Dichosos aquellos usuarios que disponen de suficiente tiempo para hacerlo…
Saludos,
Rolando.
Agosto 1, 2008 - 21:56 #
Amigo que usas SQL olvÃdate de manejar la tabla a tu antojo. Velneo es rÃgido, muchos informes de filas y columnas que ahora tal vez desarrollas no los podrás hacer de manera sencilla. Precisamente lo que le falta a la base de datos de veleno es eso: SQL.
Ejemplo:
Tabla con IDMES, Ventas mensuales euros,vendedor, zona, familia (muy simple).
Ahora quiero en las columnas la Zona y en las filas el vendedor para el año 2007.
Luego quiero en las filas con IDMES y Vendedor, en las columnas la familia, con subtotal por año.
Luego…………….
Con SQL: dos minutos y solucionado.
Con Velneo: dos dÃas y si lo consigues me lo cuentas
Saludos.
Agosto 2, 2008 - 05:07 #
Danie-esceptico:
“Dos dÃas”… ¿Estás seguro que te toma 2 DIAS? No lo creo.
RolandoCF-esceptico-de-Danie-esceptico.
Saludos.
Rolando.
Agosto 2, 2008 - 05:17 #
P.D.: Mi mensaje anterior fue breve, por las carcajadas que me han descompuesto un rato.
Danie-esceptico: Para que te tomes 2 dÃas hacerlo en Velneo, es porque te lo piden el Viernes a última hora, todos se fueron de finde y no trabajan ni Sábado y Domingo, por lo que debes tenerlo para el lunes…
¿2 minutos en SQL? Eres un as en SQL, entonces. Yo llevo más de 10 años trabajando en SQL, en consultas con varios JOIN y tablas con mas de 3.000.000 de registro y algunas con más de 50 campos. Las consultas más sencillas hacÃan JOIN entre 4 o 5 tablas… Y sea usando un asistente como el que trae AS400 o “picando” sentencia SQL, me tomaba unos 5 minutos escribirlo y luego, dependiendo de la carga de trabajo en el servidor y la complejidad de la consulta, tomaba entre 1 a 15 minutos para ver resultados…, en red local.
Agosto 2, 2008 - 05:27 #
Danie-esceptico:
El lunes, al llegar (continuación) y mientras te preparas el café en la ofi, te haces la consulta con Velneo y, más encima, el resultado te lo imprimes reutilizando los informes que ya has creado… Con SQL, ¿lo imprimes a secas o usas Excel (para variar) para procesar lo último que te falta?…
¡Caramba! Cómo me ha calentado este tÃo…
Ruego me disculpen, pero hay dÃas y temas… Por favor, si hablais de SQL…, que sea con fundamentos… ¡2 minutos! ¡El computador es telépata…!
Rolando.
Agosto 2, 2008 - 16:17 #
RolandoCF, las opiniones son como los ombligos: todos tenemos uno y todas son respetables. Yo hice el primer comentario porque realmente querÃa saber cómo se abordan esas consultas ocasionales en Velneo. No sabÃa de la dificultad aunque algo suponÃa. Jesús Arboleya explicó amablemente la manera de hacerlo y Danie-esceptico expresó su libre opinión sobre el tema, al igual que otros. Eso es válido y enriquece. Ayuda a comprender la herramienta, al novato como yo y al que la usa hace tiempo como tú. Comparar con otras herramientas ayuda a entenderla mejor, a conocer sus limitantes, sus ventajas, etc. y además compararla con otras es inevitable. Descalificar lo afirmado por un participante y reÃrse de él porque no estás de acuerdo sin esgrimir argumentos empobrece el debate, no ayuda a nadie y molesta a muchos.
Saludos cordiales
Manuel Tovar
Barranquilla – COLOMBIA
Agosto 2, 2008 - 17:49 #
SÃ, Manuel Tovar: tienes toda la razón. Me he portado mal y reconozco mi mala disposición respecto al tema. No voy a entrar a discutir el porqué, las justificaciones agravan las faltas y yo, no veo ninguna válida para respaldar mi actitud. Me disculpo y pido perdón a todos por este exabrupto, que hasta a mà me ha dejado sorprendido. Particularmente a danie-esceptico, que no justifica mi reacción a sus palabras. Ojalá él pueda leer mis palabras y mi arrepentimiento por lo dicho.
Rolando.
Agosto 2, 2008 - 18:42 #
Gracias RolandoCF. Tu actitud te honra y de paso a este blog, creo yo.
Saludos cordiales
Manuel Tovar
Barranquilla – COLOMBIA
Abril 3, 2009 - 06:40 #
Señores, Velneo es la Herramienta de desarrollo del Futuro!, desde que lo conozco (6 meses) ya he realizado 4 proyectos distintos, todos han salido de maravilla los clientes conformes, y de verdad que no requiere tanto esfuerzo como otras herramientas de desarrollo. Espero con ansias la version V7.
Saludos
Oscar.