Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-10-2006
donki donki is offline
Miembro
 
Registrado: oct 2006
Posts: 24
Poder: 0
donki Va por buen camino
Te propongo lo siguiente:

El código del segundo lo añades al primero y lo calculas al principio guardando el valor en @Importe.

Esta variable la añades como una columna añadida más en tus queries siguientes o bien lo pones como parámetro de salida.


Suerte!!!
__________________
Grandes frases de nuestro tiempo:
"La pasta no és para tirarla, es para el Tunning"

"TodoOK=False...."

Enjoy it!!!
Responder Con Cita
  #2  
Antiguo 01-11-2006
efelix efelix is offline
Miembro
 
Registrado: jul 2006
Posts: 84
Poder: 20
efelix Va por buen camino
Hola, gracias por tu sugerencia, pero no entiendo lo que me dijiste, me gustaría si pudieras fueses un poco mas explicito. Pues todavía tengo lagunas en el trabajo con los procedimientos alamacenados.
Responder Con Cita
  #3  
Antiguo 02-11-2006
donki donki is offline
Miembro
 
Registrado: oct 2006
Posts: 24
Poder: 0
donki Va por buen camino
Por lo que me comentas creo que solo puede ser problema de la linia
Código Delphi [-]
EditImporte.Text := ADOSPImporteCuentasxPagar.Parameters.ParamValues ['@Importe'];

Mira de hacer la conversión a mano junto con un try except...

Saludos
__________________
Grandes frases de nuestro tiempo:
"La pasta no és para tirarla, es para el Tunning"

"TodoOK=False...."

Enjoy it!!!
Responder Con Cita
  #4  
Antiguo 02-11-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Yo de refilón he visto otro detalle:
Código Delphi [-]
 else begin
     ADOSPEdadCuentas.Parameters.ParamByName('@Edad1').Value := StrToInt (EditEdad1.Text);
     ADOSPImporteCuentasxPagar.Parameters.ParamByName('@Dias1').Value := StrToInt (EditEdad1.Text);
     end;
     ADOSPImporteCuentasxPagar.ExecProc;
     EditImporte.Text := ADOSPImporteCuentasxPagar.Parameters.ParamValues ['@Importe'];
  ADOSPEdadCuentas.Open;
end;
Aunque el código original está bien identado, falta el begin .. end del else, espero que sea error de copiar y pegar.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 03-11-2006
vinicc vinicc is offline
Miembro
 
Registrado: ago 2006
Posts: 31
Poder: 0
vinicc Va por buen camino
OJO con el strtoint

Hola, a vista de pájaro vi tu sp, muy bueno. hace poco hice uno parecido utilizando un editmask, pero tuve que anteponer un trim para evitar que me diera problemas con un digitador malicioso. posiblemente no sea tu caso pero OJO con eso. (StrToInt(Trim(EditMask1.text)))

ok.
Responder Con Cita
  #6  
Antiguo 03-11-2006
efelix efelix is offline
Miembro
 
Registrado: jul 2006
Posts: 84
Poder: 20
efelix Va por buen camino
Muchas gracias a todos por sus respuestas, da cada uno de ustedes he aprendido algunas cosas nuevas. El segundo procedimiento almacenado lo he modificado de la siguiente manera:
Código SQL [-]
CREATE PROCEDURE spImporteTotalEdadCuentasxPagar
               (@Dias integer,
                @Dias1 integer = NULL,
                @Importe money OUTPUT)
                      
 AS
  
IF (@Dias>=90)
BEGIN
  SELECT @Importe=IsNull(Sum(Importe),0)
  FROM Facturas
  WHERE(Aplicada=0) AND DATEDIFF(day,FechaRecepcion, GETDATE())>=@Dias 
END
ELSE
BEGIN
  SELECT @Importe=IsNull(Sum(Importe),0)
  FROM Facturas 
  WHERE(Aplicada=0) AND DATEDIFF(day,FechaRecepcion, GETDATE())>=@Dias AND DATEDIFF(day,FechaRecepcion, GETDATE())<=@Dias1
END
GO
Para el caso de que se quiera ver el importe total de las facturas com mas de 90 días. El otro procedimiento almacenado (el primero), se ha quedado igual. Ahora que me sucede, vean el código del evento click del botón de coamndo en el formulario:
Código Delphi [-]
begin
  ADOSPEdadCuentas.Close;
  ADOSPEdadCuentas.Parameters.ParamByName('@Edad').Value := StrToInt(Trim(EditEdad2.Text));
  ADOSPImporteCuentasxPagar.Parameters.ParamByName('@Dias').Value := StrToInt(Trim(EditEdad2.Text));
  if StrToIntDef(EditEdad2.Text,0) = 90 then
  begin
     ADOSPEdadCuentas.Parameters.ParamByName('@Edad1').Value := VarNull;
     ADOSPImporteCuentasxPagar.Parameters.ParamByName('@Dias1').Value := VarNull;
  end
  else
    begin
     ADOSPEdadCuentas.Parameters.ParamByName('@Edad1').Value := StrToInt (Trim(EditEdad1.Text));
     ADOSPImporteCuentasxPagar.Parameters.ParamByName('@Dias1').Value := StrToInt (Trim(EditEdad1.Text));
     ADOSPImporteCuentasxPagar.ExecProc;
     EditImporte.Text := ADOSPImporteCuentasxPagar.Parameters.ParamValues ['@Importe'];
     ADOSPEdadCuentas.Open;
    end;

end;
Recuerden que el segundo procedimiento almacenado es solamente para que me de el total según el rango de edad que haya puesto, bueno esto me funciona perfectamente bien, siempre que en los dos edit ponga valores, exceptuando cuando en el primer edit pongo el valor 90, que solamente debe darme las facturas con mas de 90 días y pasar el valor del parámetro de salida al edit que he establecido para ello, pero no es así, cuando pongo 90 en el primer edit y hago click no se me genera ningún error, pero no me muestra ningún resultado, y el edit donde va a parar el importe total se queda con el valor anterior, por ejemplo si pongo entre 30-60 días me muestra en el dbgrid las faturas pendientes de pago para ese rango y me totaliza en el edit el importe total para este rango, sin embargo cuando pongo 90 en el primer edit y hago click no me muestra nada y se queda en el edit el resultado anterior, y en la base de datos hay 4 facturas con mas de 90 días sin pagar. He chequeado el código varias veces y no veo donde puede estar el problema. Disculpen tanta molestia, espero puedan ayudarme una vez mas.
Responder Con Cita
  #7  
Antiguo 04-11-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Normal, estas 2 líneas tienen que estar fuera del begin.. end (del else) para que siempre se ejecute, sea 30-60, o bien 90, en ambos casos debe ejecutarse:
Código Delphi [-]
ADOSPImporteCuentasxPagar.ExecProc;
     EditImporte.Text := ADOSPImporteCuentasxPagar.Parameters.ParamValues ['@Importe'];

Creo que estas un poquito espeso (no te ofendas, nos suele pasar mucho a los programadores) , una vueltita por el parque suele ayudar

Saludos.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Procedimientos almacenados AS/400 Carlos A Ortega DB2 1 12-12-2006 00:32:39
procedimientos almacenados datorar Conexión con bases de datos 8 03-01-2006 17:05:43
Procedimientos almacenados en delphi con storeprocedure pgl Firebird e Interbase 7 05-11-2005 00:58:53
procedimientos almacenados Gabriel2 SQL 1 13-01-2005 14:50:09
Procedimientos Almacenados Gabriel A Reyes MS SQL Server 5 07-07-2003 14:08:46


La franja horaria es GMT +2. Ahora son las 12:07:55.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi