Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Parametro con ListBox (https://www.clubdelphi.com/foros/showthread.php?t=77824)

DasGrun 28-02-2012 19:05:51

Parametro con ListBox
 
Buenas , Ayuda,

Necesito Mandar unos o varios parametros para que se ejecute un SP, este es el codigo del Sp Utilizando SQL 2005:
Código SQL [-]
CREATE PROCEDURE dbo.Cuentas_Proveedor(@SvendorId varchar(100), @SCuenta varchar(50), @SCuenta0 varchar(50))
AS
BEGIN
  /* Procedure body */
  SELECT 
 VendorId,
  Vendor,
  Documento,
  fecha,
  descriccion, 
  cuenta,
  debito,
  credito
 
FROM
  GL20000
  INNER JOIN GL00100 ON (GL20000.ACTINDX = dbo.GL00100.ACTINDX)
  INNER JOIN GL40200 ON (dbo.GL00100.ACTNUMBR_3 = dbo.GL40200.SGMNTID)
WHERE
  vendorid = @SvendorId AND 
  cuenta IN (@SCuenta,@SCuenta0) 
GROUP BY
VendorId,
  Vendor,
  Documento,
  fecha,
  descriccion, 
  cuenta,
  debito,
  credito
  GL00100.ACTINDX
ORDER BY
6,4
END

El Sp Trabaja Muy Bien pero podria ser ejecutado con Uno o Varios Parametros en cuenta IN (@SCuenta,@SCuenta0).

La Codificacion del Delphi es la Siguiente:

Código Delphi [-]
DMTables.Reporte_Ctas_Proveedores(DMTables.DT_PM00200VENDORID.AsString,ListBox2.Items[0],ListBox2.Items[1]);

procedure TDMTables.Reporte_Ctas_Proveedores(SVendorId, sCuenta0, sCuenta1: string);
begin
   ADOSP_Reporte_Ctas_Provee.Parameters[1].Value := SVendorId;
   ADOSP_Reporte_Ctas_Provee.Parameters[2].Value := sCuenta0;
   ADOSP_Reporte_Ctas_Provee.Parameters[3].Value := sCuenta1;
   ADOSP_Reporte_Ctas_Provee.Requery();
   frxReport_Cta_Provee.PrepareReport();
   frxReport_Cta_Provee.ShowReport();
   FrmListCuentas_Provee.ListBox1.Clear;
   FrmListCuentas_Provee.ListBox2.Clear;
   FrmListCuentas_Provee.Close;
end;

Lo que deseo hacer es que cuando se envia 1 parametro solamente me trabaje con un parametro, pero me da el error "List indexout of bounds(1)", no encuentra el parametro 1,

1. Como puedo Mandar un Parametro en Blanco?
2. Si deseo Colocar mas items como se hace?

espero que haigan entendido lo sucedido.

gracias de ante manos....

Casimiro Notevi 28-02-2012 19:22:14

Aunque no eres nuevo aquí, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración.

Has puesto frases en mayúsculas (ya corregido), has hecho preguntas sobra lenguaje SQL y lo has puesto en el foro "Internet".


Lo cambio de sitio.

DasGrun 28-02-2012 20:40:47

Hola Casimiro, gracias por la correcion pero la pregunta es sobre el delphi.

Casimiro Notevi 28-02-2012 20:45:51

Con el debug, ¿has comprobado que el listbox tiene los valores requeridos?

DasGrun 28-02-2012 20:53:56

Gracias Nuevamente Casimiro,

Si he comprobado que obtiene los Valores, pero me da error cuando solo quiero consultar una Cuenta y no los dos parametros que esta solicitando.
Código SQL [-]
WHERE
  vendorid = @SvendorId AND 
  cuenta IN (@SCuenta,@SCuenta0)
Gracias.

Casimiro Notevi 28-02-2012 21:26:01

En esos casos supongo que sólo lleva valor en el item[0] del listbox, es normal que salga ese error si no tiene valor en el item[1].
Puedes pasarle un valor que sepas que no vas a usar, ejemplo -1
y en el código de SP controlar si es -1 que haga lo que necesites, o sea, que no haga el tratamiento del segundo parámetro.

DasGrun 28-02-2012 21:39:52

Eso es la respuesta, pero como pasar un valor -1 como parametro, cuando esta vacio ese item...ni idea de como hacerlo!!!

Casimiro Notevi 28-02-2012 22:37:11

Bueno, yo no sé qué hace tu programa ni tampoco sé cómo lo hace. No sé de dónde saca los valores el listbox, comprueba que tiene valores antes, y en caso contrario lo pones tú mismo, o cambia el listbox por un array de 2 posiciones, lo rellenas y así siempre tienen valores. En fin, son muchas opciones, pero sin saber lo que haces es difícil darte una respuesta.

DasGrun 28-02-2012 22:58:08

Lo Que hace es que son escogido Items del ListBox1 y estos son colocados en el ListBox2 y una vez selecionado los Item's estos son enviado para ejecutar el Procedimiento almacenado desde el delphi. Pero puede ser seleccionado 1, ó 2 Items. cuando selecciono los 2 item's funciona correctamente, pero cuando selecciono 1 el Mensaje de error me Aparace "List indexout of bounds(1)", En este caso solamente deseo selecionar 1 Item[0], que valor le daria al item[1].

Gracias.

Casimiro Notevi 28-02-2012 23:48:47

Pues contrólalos antes de asignarlos al procedimiento, si solamente hay un item, entonces tú le das valor al segundo.

DasGrun 29-02-2012 00:05:36

Controlarlo es lo que quiero, y no tengo ni Idea, Gracias por tu Ayuda.....


La franja horaria es GMT +2. Ahora son las 05:21:44.

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