Ver Mensaje Individual
  #1  
Antiguo 17-10-2006
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Reputación: 21
Cabanyaler Va por buen camino
Unhappy Error en OnCalcFields con valor retornado de un SELECT SUM()

Hola compañeros.
Antes de nada disculparme si este no es el lugar, pero creo que sí, ya que aunque el valor se elabore en un servidor SQL es retornado mediante conexion ADO al lado cliente. Si no es así, pues ná, me lo "empujais" a lugar.

Veamos:
Llebo todo el día de ayer con este error, y ya ando un tanto nervioso.

Que tengo
Tengo una consulta "ADOQ_Control_Comercial" que se ejecuta en el servidor sql y que retorna una serie de campos que muestro en el lado cliente en un componente DBGrid.
A esta consulta le he creado un campo calculado "ADOQ_Control_ComercialAcuValExt_Cal".
Si en el evento "OnCalcFields" al campo calculado le asigno valor, p.e.
Código Delphi [-]
DMInstalGas_2.ADOQ_Control_ComercialAcuValExt_Cal.Value :=  99,00;

se le asigna sin ningún tipo de problema y se muestra en el grid. (Es el modo en el que he venido haciéndo la asignación de valores en los campos calculados siempre), aunque evidentemente con operaciones de calculo más complejas.

La asignación que deseo realizar esta vez a este campo calculado es el valor devuelto por un Store procedure desde el servidor SQL que dice así:
Código Delphi [-]
/* Retorna el sumatori de totes les obres del contracte passat com a parametre a @CodCon_sp */
CREATE PROCEDURE AcumulaObrasPeriodofacturacionComercial 
@CodCon_sp  integer

AS
             SELECT SUM(Obras.TotImp_Obr)
  FROM Obras
  WHERE Obras.CodCon_Obr = @CodCon_sp
GO

Es decir, un valor, que si lo muestro con un "Showmessage", es el correcto, mostrándolo del siguiente modo:
Código Delphi [-]
IntToStr(DMInstalGas_2.ADOSP_AcumulaObrasPeriodoFacturacionComercial.Fields[0].Value)

Que deseo
En el evento "OnCalcFields" asignar al campo calculado el valor retornado por ese "StoreProcedure", menos otro valor de un campo de la misma tabla.
Código Delphi [-]
procedure TDMInstalgas_2.ADOQ_Control_ComercialCalcFields(
  DataSet: TDataSet);
begin
   DMInstalGas_2.ADOQ_Control_ComercialAcuValExt_Cal.Value :=  DMInstalGas_2.ADOSP_AcumulaObrasPeriodoFacturacionComercial.Fields[0].Value - DMInstalGas_2.ADOQ_Control_ComercialTotImp_Obr.Value;
end;

ERROR
Pero me dá el siguiente error en este último proceso :

Access violation at adress 004C436B in module "nombreprograma.exe". Read of address 00000000.

Y ya no se a donde encomendarme. Si me podeis ayudar.
Gracias.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.
Responder Con Cita