Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   select de media no funciona con ado (https://www.clubdelphi.com/foros/showthread.php?t=62205)

juangabriel1786 10-12-2008 20:58:12

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

ContraVeneno 10-12-2008 21:03:42

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. :D

juangabriel1786 11-12-2008 12:40:34

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.

ContraVeneno 09-03-2009 17:11:51

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.


La franja horaria es GMT +2. Ahora son las 13:45:36.

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