DBPExecSQL - Solución al error "Objeto Parameter mal definido, se proporcionó información incompleta o incoherente" o "'Parameter object is improperly defined" - Forum

Forum Navigation
You need to log in to create posts and topics.

DBPExecSQL - Solución al error "Objeto Parameter mal definido, se proporcionó información incompleta o incoherente" o "'Parameter object is improperly defined"

¿Cómo están? después de romperme los sesos con una consulta SQL que no andaba paso a comentar la solución de este error, no tan común, pero a mas de uno les puede servir, ya que da más utilidad al plugin habilitando poder usar variables de sesión directamente en DbpExecSQL y sin necesitar de usar procedimientos almacenados.

¿Qué es una variable se sesión en bases de datos? Una variable de sesión en bases de datos es una variable cuyo valor se mantiene durante la duración de una sesión de usuario en la base de datos. Estas variables son utilizadas para almacenar información temporal que debe persistir mientras la sesión esté activa, pero que se pierde cuando la sesión finaliza.

Estas variables personalizables pueden servir para gestionar datos trabajando directamente dentro del motor de base de datos como MySQL.

Para esto es requerido muchas veces usar el operador := que sirve para asignar valores a esa variable de sesión por ejemplo

SELECT @mivar := 1

Resulta que al usar : en algunas partes de la sentencia SQL muchas veces emite el error: "Objeto Parameter mal definido, se proporciono información incompleta o incoherente" o "'Parameter object is improperly defined" en DBPExecSQL

La solución practica es escapear el : doblando el mismo :: Y con este mecanismo el compilador evita compilar el dos puntos como un parámetro de Delphi. Pues resulta que internamente, como VisualNEO esta basado en Delphi y al ejecutar con el componente ADO especifico al cual llama el plugin, hay parámetros que nada tienen que ver con la consulta que en Delphi se pueden insertar con el : (dos puntos). Entonces, para evitar que esto ocurra siempre se debe escapear doblando los dos puntos.

Un ejemplo practico de uso de variable de sesión seria para enumerar los registros de la siguiente forma (remplace los valores con sus datos):

SELECT @rownum := @rownum + 1 AS row_number, columna1, columna2

FROM tabla, (SELECT @rownum := 0) AS init

ORDER BY columna1;

Espero que les sirva. Saludos.

danito has reacted to this post.
danito

Disculpen se me paso indicar como quedaría escapeado:

Original que emite error

SELECT @mivar := 1

Solucionado

SELECT @mivar ::= 1

El 2do ejemplo

SELECT @rownum := @rownum + 1 AS row_number, columna1, columna2

FROM tabla, (SELECT @rownum := 0AS init

ORDER BY columna1;

Solucionado

SELECT @rownum ::= @rownum + 1 AS row_number, columna1, columna2

FROM tabla, (SELECT @rownum ::= 0AS init

ORDER BY columna1;

danito has reacted to this post.
danito