Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Parametros en Consultas (https://www.clubdelphi.com/foros/showthread.php?t=72010)

JosepGA 24-01-2011 15:15:19

Parametros en Consultas
 
Hola a todos,

pues mi duda es la siguiente, con Delphi 7 podía hacer lo siguiente al filtrar una consulta mediante parametros:

Código Delphi [-]
  With tArticulos Do
    Begin
      If Active Then
        Active := FALSE;

      With DataSet Do
        Begin
          CommandText := 'select CODIGO, DESCRIPCION FROM ARTICULOS WHERE ( CODIGO = :AUXCODART ) ORDER BY CODIGO';

          Params.ParamByName( 'AUXCODART' ).AsString := sArticulo;
        End;

      Active := TRUE;
    End;

Cada vez que la aplicaba me devolvia el registro del artículo solicitado, pero ahora con Delphi 2010 me encuentro que siempre se me quedaba en el primer artículo solicitado, los siguientes no los encontraba, haciendo muchas pruebas me encuentro de que en la propiedad "Params" del tSimpleDataSet ( No en la de tSimpleDataSet.DataSet.Params si no que en tSimpleDataSet.Params ) en tiempo de ejecución se han creado estos parametros, por lo que la solución es eliminarlo cada vez que se aplica la consulta para que funcione, quedando así:

Código Delphi [-]
With tArticulos Do
    Begin
      If Active Then
        Active := FALSE;

      Params.Clear;  /* ESTO ES LO QUE AÑADO */
      With DataSet Do
        Begin
          CommandText := 'select CODIGO, DESCRIPCION FROM ARTICULOS WHERE ( CODIGO = :AUXCODART ) ORDER BY CODIGO';

          Params.ParamByName( 'AUXCODART' ).AsString := sArticulo;
        End;

      Active := TRUE;
    End;

Ya se que he encontrado el problema, en Delphi 7 no me lo hacía, ¿ pero alguien me puede decir si esto tiene solución ? ¿ A que es debido este cambio ?

bitbow 25-01-2011 01:23:05

por que Params?
 
Saludos, tengo ya algun tiempo con delphi y mi pregunta es por que params?
no digo que no los uses si no que mi duda es que diferencia hay entre pasarle la variable directamente y usar params.

Bueno se que no ayuda mucho otra pregunta, pero es para aprovechar la tuya y bueno esa seria una solucion.

Código Delphi [-]
  With tArticulos Do
    Begin
      If Active Then
        Active := FALSE;

      With DataSet Do
        Begin
          CommandText := 'select CODIGO, DESCRIPCION FROM ARTICULOS WHERE ( CODIGO = '''+ sArticulo +''' ) ORDER BY CODIGO';
        End;

      Active := TRUE;
    End;

JosepGA 25-01-2011 09:52:27

Hola,

pues simplemente por definición de tipos, me queda mas claro a que tipo de datos estoy accediendo con los parametros y me evito los QuotedStr, etc...

Un saludo

mcs 25-01-2011 10:05:26

Cita:

Empezado por JosepGA (Mensaje 388680)
me evito los QuotedStr

Para mi esto es lo más importante. Ya no hago nunca esto de pegar variables en la cadena del query, sinó que siempre uso parámetros.

A parte de esto, teoricamente (por lo menos en Java funciona así) es más rápido cuando se hacen múltiples llamadas a una query, ya que la query ya está interpretada y compilada en el servidor SQL, y solo tiene que ir variando los parámetros.

Sobre tu duda, pues no lo sé. Yo lo que me he encontrado es que usando query's con SELECT, si no llamo al Query.Close antes de modificar los parámetros, no se actualizan los valores. Pero estoy usando los componentes IBDAC, y no es lo mismo que tu...

Saludos,

Marc


La franja horaria es GMT +2. Ahora son las 16:33:31.

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