Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   duda con un sp ¿como buscar por descripcion? (https://www.clubdelphi.com/foros/showthread.php?t=29864)

gmontes 02-02-2006 21:36:40

duda con un sp ¿como buscar por descripcion?
 
tengo el siguiente procedimiento que funciona:


una sola clave con descripcion y existencias

una segunda tabla con varias claves y cantidades

lo que hace es descontar a la existencia la suma de cantidades por codigo a las existencias y mostrarlas. solamente es una consulta. existencia real

ALTER PROCEDURE NEW_PROCEDURE (
VDESCRIP CHAR(50))
RETURNS (
STOTAL FLOAT,
STRANSITO FLOAT,
SEXISTENCIA FLOAT,
SCODIGO CHAR(18),
SDESCRIP CHAR(50))
AS
DECLARE VARIABLE V_STRING CHAR(50);
DECLARE VARIABLE V_TIPO CHAR(1);
begin
/* Procedure Text */
v_string = :vdescrip;
/*select result from sp_substring(:v_string,1,50) into :v_string;*/
for select CODIGO, DESCRIP, coalesce(existencia,0)
FROM cinve where 1=1 order BY descrip
into :scodigo, :sdescrip, :sexistencia
DO
begin
select coalesce(SUM(CANTIDAD),0) FROM cmovim WHERE CODIGO = :scodigo INTO :stransito;
stotal = :sexistencia - :stransito;
suspend;
END
end

lo que deseo que haga es enviarle el parametro descripcion, si lo que envio es una parte de la descripcion, pues que me muestre todos lo que cumplen parte de esa descripcion. :confused:

en delphi hago algo parecido con un ' AND nombre LIKE ''%'+txtNombreBusq.Text+'%''', pero aqui no logro hacerlo funcionar.

alguna sugerencia???

gracias

lbuelvas 04-02-2006 17:48:15

Si estas trabajando con firebird 1.5 o posterior, puede utilizar for execute statement en lugar de for select. La ventaja es que el for execute statement te permite tener selects dinamicos.

En tu caso la consulta seria algo como:

Código SQL [-]
for execute statement 'select CODIGO, DESCRIP, coalesce(existencia,0) ' ||
                      'FROM cinve where 1=1 '                           ||
                      'and  descrip like ''%'   || vdescrip || '%'' '   ||              
                      'where order BY descrip '
                      into :scodigo, :sdescrip, :sexistencia
do begin
  .. el resto de tu codigo
end

Recuerda que '' sirve para representar una comilla simple, entonces
''%' equivale a '%
'%'' equivale a %'

El inteprete dependiendo de lo que llegue en vdescrip dara por resultado:

and descrip like '%vdescrip%'

Espero te sea de utilidad.


La franja horaria es GMT +2. Ahora son las 19:21:26.

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