Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Declarar variable y select en la misma llamada a Query.Open (https://www.clubdelphi.com/foros/showthread.php?t=53308)

Lord Delfos 18-02-2008 13:59:39

Declarar variable y select en la misma llamada a Query.Open
 
Buneas gente.

A ver si alguno me tira un hueso con esto.

Tengo una consulta con un select y varios union. La cosa es que al principio de la consulta tengo que declarar un par de variables.

Código SQL [-]
DECLARE @blabla as varchar(8)

SELECT bla FROM Tabla WHERE uso la variable

Cuando ejecuto la query con un componente TQuery (contra SQL Server 2000) me manda un error de "Error creating cursor handle", que hasta donde sé viene por usar Open, en vez de Exec.

La cosa es que sin variables funciona, pero con variables... No puedo usar Exec porque quiero el resultado del select, y no uedo usar Open porque declaro las variables...

Por cierto, las variables sí o sí hay que daclararlas antes del select porque son usadas por éste.


Sé que esto tiene que ser muy fácil de solucionar... Pero ni idea.

Gracias de antemano.

gendelphi 18-02-2008 15:28:56

Tendrías que hacerlo desde un Stored Procedure, y ejecutar con el SELECT el stored procedure.

kuan-yiu 18-02-2008 15:30:25

No estoy muy segura poorque no tengo SQL Server, pero en Oracle eso no funcionaría sin punto y coma entre ambas sentencias:
Código Delphi [-]
DECLARE @blabla as varchar(8); // <-- Este punto y coma

SELECT bla FROM Tabla WHERE uso la variable

Lord Delfos 19-02-2008 15:56:11

Gracias gente.

En realidad lo que descubrí es que uno lo puede hacer pero a la hora de agregar el texto al Qry hay que hacerlo con Qry.SQL.Add() y no con Qry.SQL.Text:=''.

Valla uno a saber porqué...

Gracias de todos modos.

Chris 19-02-2008 16:17:53

Hola Lord Delfos, lo que tu andas buscando -si no me equivoco- ya se ha inventado. No se conocen como variables -auque lo son- sino como parámentros.

Por ejemplo, imaginate que tengo un camponente Query que se llame miQuery, luego lo manipulo en el código de esta manera:
Código Delphi [-]
miQuery.SQL.Add('Select * from TABLA1 where RECORDID <:PARAM_CODIGOMAYOR');
En el código anterior he creado un nuevo parámetro llamado PARAM_CODIGOMAYOR y con el cual puedo asignar su valor o manipularlo, con un código similar a este.
Código Delphi [-]
miQuery.ParamByName('PARAM_CODIGOMAYOR').asInteger := 100;
De forma, la consulta me va a devolver todos los registros en que RECORDID sea menor que 100.

Como te había dicho anteriormente, al declarar una consulta SQL con parámetros, estos se crean automanticamente, luego es que los podrás manipular, de esta forma un ejemplar código quedaría así:
Código Delphi [-]
miQuery.SQL.Add('Select * from TABLA1 where RECORDID <:PARAM_CODIGOMAYOR');
// he declarado la consulta con parámetros, ahora ya puedo manipular el parámentro creado automáticamente.
miQuery.ParamByName('PARAM_CODIGOMAYOR').asInteger := 100;

Saludos.

Lord Delfos 20-02-2008 01:05:19

Gracias, D&W.

En realidad el problema pasa porque el cliente quiere específicamente que usemos la sentencia que él manda, la cual es una cosa así:

Código SQL [-]
declare @Fecha as varchar(8)
set @Fecha = '200810'

SELECT * FROM Tabla WHERE FechaCreacion<= @Fecha

Y bueno... El cliente siempre tiene la razón... Qué sé yo.

Lo del reemplazo de parámetros sería lo más lógico, pero por algún motivo a ellos no les gusta.:mad:

Gracias de nuevo.


La franja horaria es GMT +2. Ahora son las 00:35:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi