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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-09-2006
ercrizeporta ercrizeporta is offline
Miembro
 
Registrado: jun 2005
Posts: 131
Poder: 19
ercrizeporta Va por buen camino
Question campos calculados

hola, vuelvo de nuevo al mismo tema que expuse hace tiempo.
tngo una tabla que me almacena las lineas de pedidos,tiene los campos cant,pvp, codigoarticulo....el campo total (cant x pvp) lo he creado como un campo calculado. la clave primaria de esta tabla esta compuesta por dos campos (numerodelinea y numerodefactura).
El procedimiento para realizar el calculo de la columna calculada lo he puesto en el evento oncalculatefields. Y es ahora cuanod llega el problema, a la hora de insertar un registro en la tabla, justo despues de haber insertado el campo numerodefactura y antes de haber insertado el numerodelinea el programa me da un error diciendo que el Tdataset no esta en modo de edicion o inserción de datos. NO TENGO NI IDEA DE COMO ARREGLAR ESTO!!!POR FAVOR UNA AYUDA!!!

codigo
Código Delphi [-]
if (not tblinauxcant.isnull) and
     (not tblinauxpvp.isnull)then
   begin
    if tblinauxdto.IsNull then
     begin
        totallin:=
           tblinaux['cant']*tblinaux['pvp'];
     end
    else
     begin
        totallin:=
           tblinaux['cant']*tblinaux['pvp']*(100-tblinaux['dto'])/100;
    end;
     modulodatos.tblinaux.edit;
     modulodatos.tblinaux['total'].asfloat:=totallin;
  end;
   //AHORA CALCULO EL TOTAL DE TODAS LAS LINEAS
  total:=0;
  if (not modulodatos.tblinaux2.IsEmpty) then
    begin
      tblinaux2.First;
  end;
  while (not tblinaux2.Eof) do
    begin
       if (not tblinaux2cant.isnull) and
          (not tblinaux2pvp.isnull)then
        begin
          if tblinaux2dto.IsNull then
           begin
             totallinea:=
             tblinaux2['cant']*tblinaux2['pvp'];
           end
       else
        begin
          totallinea:=
          tblinaux['cant']*tblinaux['pvp']*(100-tblinaux['dto'])/100;
        end;
       end;
       total:=total+totallinea;
       tblinaux2.Next;
    end; //end while
    //guardo el total en la tabla auxiliar
    modulodatos.tbauxiliar.edit;
    tbAuxiliarneto.AsFloat:=total;
    modulodatos.tbauxiliar.post;
end;

Última edición por vtdeleon fecha: 21-09-2006 a las 20:03:49.
Responder Con Cita
  #2  
Antiguo 21-09-2006
reina reina is offline
Miembro
 
Registrado: ago 2005
Ubicación: Capital Federal-La Plata (Bs As)
Posts: 147
Poder: 19
reina Va por buen camino
Hola! estee...donde tenes puesto el edit..de "tbAuxiliarneto" ? Ademas como te compila eso si algunas de las tablas les referencias el "modulodatos" y a otros no? tenes algun with arriba? o acaso esto lo haces del md?
Te transcribo las ultima 3 ultimas lineas de tu codigo:

modulodatos.tbauxiliar.edit;
tbAuxiliarneto.AsFloat:=total;
modulodatos.tbauxiliar.post;

Revisa bien el codigo..o corregime si estoy equivocada, salu2
Responder Con Cita
  #3  
Antiguo 21-09-2006
aledieb aledieb is offline
Miembro
 
Registrado: jun 2005
Ubicación: Buenos Aires, Argentina
Posts: 141
Poder: 19
aledieb Va por buen camino
Si entendi bien el código el problema lo tenes cuando asignas el calculo del total general:

Código:
    modulodatos.tbauxiliar.edit;
    tbAuxiliarneto.AsFloat:=total;
    modulodatos.tbauxiliar.post;
Deberia ser:
Código:
    modulodatos.tbauxiliar.edit;
    modulodatos.tbAuxiliarneto.AsFloat:=total;
    modulodatos.tbauxiliar.post;
También te recomiendo que rebices el resto del código, normalmente daria error por el mismo tema tal como te dijo reina
__________________
Suerte
Alejandro
Responder Con Cita
  #4  
Antiguo 22-09-2006
ercrizeporta ercrizeporta is offline
Miembro
 
Registrado: jun 2005
Posts: 131
Poder: 19
ercrizeporta Va por buen camino
no tiene importancia eso k me comentais, ya que el codigo esta en el modulodatos, asi que puedo llamar a esa tabla tanto poniendo modulodatos como sin ponerlo, por eso no hay problema. y no hay ningún fallo de compilación. El codigo expuesto es el que se encuentra en el evento oncalculatefields, y el error que me da es en ejecución cuando intento introducir una nueva linea despues de introducir el primer campo y acceder a este procedimiento (ya que se modifica la linea) me dice que el dataset no se encuentra ni en edit ni en insert y no me deja introducir la linea completamente.

espero haberme explicado bien, muchas gracias!!
Responder Con Cita
  #5  
Antiguo 22-09-2006
reina reina is offline
Miembro
 
Registrado: ago 2005
Ubicación: Capital Federal-La Plata (Bs As)
Posts: 147
Poder: 19
reina Va por buen camino
Cita:
Empezado por ercrizeporta
no tiene importancia eso k me comentais, ya que el codigo esta en el modulodatos, asi que puedo llamar a esa tabla tanto poniendo modulodatos como sin ponerlo, por eso no hay problema. y no hay ningún fallo de compilación. El codigo expuesto es el que se encuentra en el evento oncalculatefields, y el error que me da es en ejecución cuando intento introducir una nueva linea despues de introducir el primer campo y acceder a este procedimiento (ya que se modifica la linea) me dice que el dataset no se encuentra ni en edit ni en insert y no me deja introducir la linea completamente.

espero haberme explicado bien, muchas gracias!!
Ahhhhh que bolu! claro neto es el campo jejeje..me perdi ahi! Bueno mira recomendacion tenes que tener mas prolijo el codigo porque es mejor para la coreccion, te beneficia!
Otra cosa vos en otro lado haces un insert? trabajas con transacciones? porque por ahi si asentas los datos se te cierra todas las tablas..y tenes que volver abrirlas, debugeaste el codigo? en que punto se te planta? porque ahi hablas del procedimiento y no de la linea donde da el error, es en post?...... Ademas para que tanto barullo con ese evento si lo puedes hacer mejor desde otro lugar del programa...
Responder Con Cita
  #6  
Antiguo 25-09-2006
aledieb aledieb is offline
Miembro
 
Registrado: jun 2005
Ubicación: Buenos Aires, Argentina
Posts: 141
Poder: 19
aledieb Va por buen camino
Para mi el error lo tenes porque no son campos calculados, son campos de la tabla, proba poniendo todo el código en beforepost.

Los campos calculados, para mi, son los que creas en el componente ttable o tquery para casos especiales (en fieldsdefs, creo que es el nombre correcto).
__________________
Suerte
Alejandro
Responder Con Cita
  #7  
Antiguo 10-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 18
MaMu Va por buen camino
Problema con Campo Calculado

............
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #8  
Antiguo 11-06-2007
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Yo no suelo usar tablas pero creo que tendrás que hacer algo parecido a lo que se les hace a las querys para que puedas modificarlas.
En las querys debes poner el parámetro "RequestLive" a true, también es conveniente poner "CachedUpdates" a true. Además hay que asociar a la query un UpdateObject para que sepa cómo hacer las inserciones, modificaciones y borrados.

De todos modos si usas la búsqueda del foro encontrarás varios hilos en los que se habla de este tema, como por ejemplo:
Problemas al insertar en una tabla
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
Campos Calculados jonny0157 C++ Builder 1 10-08-2005 12:00:44
Campos calculados SaurioNet MS SQL Server 4 22-01-2005 00:47:38
CAmpos calculados? cmena Conexión con bases de datos 4 17-06-2004 12:54:51
Campos Calculados UTECYBER OOP 2 17-11-2003 15:00:27
Campos calculados Perenquen Tablas planas 1 12-07-2003 14:30:43


La franja horaria es GMT +2. Ahora son las 09:00:53.


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