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 10-12-2008
juangabriel1786 juangabriel1786 is offline
Miembro
 
Registrado: ene 2006
Posts: 38
Poder: 0
juangabriel1786 Va por buen camino
Angry select de media no funciona con ado

Estoy realizando un select con MySql 5.0 y delphi 7 , tengo una base de datos con una tabla paciente donde se registra el codigo _ paciente, nombre,apellidos,fecha_creacion,etc, este select me lo dieron en un hilo que yo hice pero tengo problema cuando preparo el ado query,antes de ejecutarlo berifico que todo este bien como la propiedad de parametros de query y todo esos detallitos

Cita:
select count(*)/datediff(date_add(:n1, interval 1 day), :n2) as Media
from paciente p
where p.fcreacion between :n1 and :n2
en un ado query me trae como valor 0 y en EMS SQL MANAGER ejecuto el mismo select y me trae resultados correctos, pero cuando lo ejecuto en delphi el ado query me trae como resultado 0
Responder Con Cita
  #2  
Antiguo 10-12-2008
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Con ADO no he podido establecer el mismo parámetro en dos puntos, es decir, a cada parámetro le tengo que dar otro nombre. Igual y va por ahí el problema. En lugar de tener :n1 en el select y :n1 en el where, pon un nombre diferente para cada parámetro.

Igual y yo tampoco supe como solucionar ese pequeño detalle. Con BDE lo podía realizar sin problemas, pero con ADO no pude. Si alguien sabe, que nos diga.
__________________

Responder Con Cita
  #3  
Antiguo 11-12-2008
juangabriel1786 juangabriel1786 is offline
Miembro
 
Registrado: ene 2006
Posts: 38
Poder: 0
juangabriel1786 Va por buen camino
Cita:
Registrado: May 2005
Ubicación: Torreón, México
Posts: 3.639
Con ADO no he podido establecer el mismo parámetro en dos puntos, es decir, a cada parámetro le tengo que dar otro nombre. Igual y va por ahí el problema. En lugar de tener :n1 en el select y :n1 en el where, pon un nombre diferente para cada parámetro.

Igual y yo tampoco supe como solucionar ese pequeño detalle. Con BDE lo podía realizar sin problemas, pero con ADO no pude. Si alguien sabe, que nos diga.
Graias por tu comentario realmente resolvio mi problema.
Responder Con Cita
  #4  
Antiguo 09-03-2009
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Tal vez a alguien le interese:

Para tener un parámetro con el mismo valor y que ADO no se haga pelotas con los nombres, se puede optar por declarar variables en la consulta SQL.

Una consulta normal:
Código Delphi [-]
with UnADOQuery do begin
...
SQL.Add('Select UnCampo');
SQL.Add('From UnaTabla');
SQL.Add('Where Nombre = :Nombre');
SQL.Add('or SegundoNombre = :Nombre');
...
Parameters.ParambyName('Nombre').value := edtNombre.text;
...

generaría errores con los nombres de los parámetros, ya que, a diferencia de BDE, no se puede tener establecido varias veces el mismo parámetro.

Por lo que se tendría que hacer algo como:
Código Delphi [-]
with UnADOQuery do begin
...
SQL.Add('Select UnCampo');
SQL.Add('From UnaTabla');
SQL.Add('Where Nombre = :Nombre');
SQL.Add('or SegundoNombre = :Nombre2');
...
Parameters.ParambyName('Nombre').value := edtNombre.text;
Parameters.ParambyName('Nombre2').value := edtNombre.text;
...

Tal vez en el ejemplo no se note mucho, ya que solo se usa dos veces. Pero cuando tenemos que usar el mismo valor 5 o 6 veces, ya se empieza a hacer tedioso.

La opción que me ha funcionado con ADO y SQL Server, es declarar las variables en la consulta SQL:

Código Delphi [-]
 with UnADOQuery do begin
 ...
SQL.Add('Declare @Nombre as varchar(20)');
SQL.Add('Select @Nombre = :Nombre');
SQL.Add('Select UnCampo');
 SQL.Add('From UnaTabla');
 SQL.Add('Where Nombre = @Nombre');
 SQL.Add('or SegundoNombre = @Nombre');
 ...
 Parameters.ParambyName('Nombre').value := edtNombre.text;
 ...

Y con eso se puede usar el mismo parámetro tantas veces sea necesario, ya que realmente solo se pasa una sola vez el parámetro.

P.D. Aunque si tu consulta se empieza a complicar y necesitas mas parámetros, convendría utilizar un procedimiento almacenado.
__________________


Última edición por ContraVeneno fecha: 09-03-2009 a las 17:15:50.
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
Media Player al 50% Pook Varios 1 18-05-2006 22:31:10
Problema conuna consulta select...not in (select ...) VRO Firebird e Interbase 2 11-08-2005 08:56:35
5 select de 5 tablas diferentes en un select solo sakuragi SQL 6 15-06-2005 18:57:06
Select anidado: Select from (select....) Malon SQL 2 14-10-2004 14:01:24
Select anidado ( Select from select ) Malon Firebird e Interbase 1 05-10-2004 04:14:38


La franja horaria es GMT +2. Ahora son las 09:46:21.


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