Ver Mensaje Individual
  #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
Reputación: 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