Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-02-2008
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 18-02-2008
gendelphi gendelphi is offline
Miembro
 
Registrado: jul 2003
Ubicación: Tlaxcala Mexico
Posts: 73
Poder: 22
gendelphi Va por buen camino
Tendrías que hacerlo desde un Stored Procedure, y ejecutar con el SELECT el stored procedure.
Responder Con Cita
  #3  
Antiguo 18-02-2008
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 20
kuan-yiu Va camino a la fama
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
Responder Con Cita
  #4  
Antiguo 19-02-2008
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 19-02-2008
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
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.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #6  
Antiguo 20-02-2008
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
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.

Gracias de nuevo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
declarar variable en QReport mcnudi C++ Builder 0 08-11-2006 12:25:10
Declarar variable pública.. JODELSA Varios 8 04-05-2006 14:45:48
Llamada a una funcion que incluye en el nombre una variable papulo PHP 11 28-12-2005 17:38:19
Declarar variable global en delphi el_barto Conexión con bases de datos 4 11-07-2005 16:59:38
Un select y update en una misma instruccion dmagui SQL 2 06-07-2005 18:17:49


La franja horaria es GMT +2. Ahora son las 00:54:07.


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
Copyright 1996-2007 Club Delphi