Club Delphi  
    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 Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-10-2006
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 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
  #2  
Antiguo 17-10-2006
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
El error (como siempre) era mio.

Es así, como lo debo hacer:

Código Delphi [-]
procedure TDMInstalgas_2.ADOQ_Control_ComercialCalcFields(
  DataSet: TDataSet);
begin
     // Acumule al camp calculat el valor del sumatori de totes les obres deixe contracte
     DMInstalGas_2.ADOSP_AcumulaObrasPeriodoFacturacionComercial.Close;
     DMInstalGas_2.ADOSP_AcumulaObrasPeriodoFacturacionComercial.Parameters[1].Value := DMInstalGas_2.ADOQ_Control_ComercialCodCon_Obr.Value;
     DMInstalGas_2.ADOSP_AcumulaObrasPeriodoFacturacionComercial.Open;
     DMInstalGas_2.ADOSP_AcumulaObrasPeriodoFacturacionComercial.ExecProc;
     // Operació de la resta
     DMInstalGas_2.ADOQ_Control_ComercialAcuValExt_Cal.Value :=  DMInstalGas_2.ADOSP_AcumulaObrasPeriodoFacturacionComercial.Fields[0].Value - DMInstalGas_2.ADOQ_Control_ComercialTotImp_Obr.Value;
end;

Gracias a tod@s.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.
Responder Con Cita
Respuesta



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
PROBLEMA AL CALCULAR CAMPOS (OnCalcFields) pepitu Conexión con bases de datos 5 12-06-2007 23:43:13
valor de SELECT COUNT maruenda SQL 15 25-05-2007 22:58:38
Ayuda, Select que rescate el menor valor(unico) Overfind SQL 1 03-10-2006 04:16:31
Capturar el valor del Select elcigarra PHP 8 13-05-2006 08:54:04
Select Max siempre devuelve valor FernanGil Conexión con bases de datos 3 06-10-2003 15:55:36


La franja horaria es GMT +2. Ahora son las 14:09:05.


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
Copyright 1996-2007 Club Delphi