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 07-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Update un campo sumando existencia (Inventario)

Hola compañeros del foro, aqui vuelvo con un obstaculo que me he topado, he aqui el codigo:

Código Delphi [-]
//suma la existecia del articulo
ZSumaInventario.Close;
ZSumaInventario.SQL.Clear;
ZSumaInventario.SQL.Add('update articulos set cantidad = :inv where ref = :cod');
ZSumaInventario.ParamByName('inv').Value := strtoint(ZInventario.Fields[3].Value) + strtoint(ZTemp.Fields[3].Value);
ZSumaInventario.ParamByName('cod').Value := ZTemp.Fields[1].Value;
ZSumaInventario.ExecSQL;

Objetivo: estoy haciendo un sistema de inventario, estoy haciendo la entrada a traves de un DBGrid enlazado a una tabla temporal, en la tabla articulos hay un campo llamado cantidad, estoy tratando de hacer un update donde me sume la cantidad ingresada en la tabla temporal mas la cantidad en la tabla articulos. ejemplo:

Cita:
Tabla articulo

Articulo -------cabtidad--
toner -------1--

tabla temporal

Articulo -------cantidad--
toner -------5--
con el update que estoy tratando de hacer es que en la tabla articulo se me sume los cincos de la tabla temporal que serian de 1 a 6. no se si me hice entender.

al correr me sale el siguiente error:

Cita:
---------------------------
Debugger Exception Notification
---------------------------
Project Almacen.exe raised exception class EVariantTypeCastError with message 'Could not convert variant of type (Null) into type (String)'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
que estaria haciendo mal?

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #2  
Antiguo 07-10-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Hola
Para mi el orden no esta bien, pero bueno, tal vez funcione asi.
Sabemos que ZSumaInventario hace toda la operacion, pero:
Para empezar me gustaria saber:
Cantidad
Inv
Cod
ZInventario, 3
ZTemp, 3
Bueno que tipo de datos contienen cada uno de ellos, me lo puedo imaginar pero me parece mejor preguntarlo.
Se nota que soy ademas de novato, curioso.
Saludos
Responder Con Cita
  #3  
Antiguo 07-10-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 26
Delphius Va camino a la fama
Hola enecumene,
¿Podrías decirme en que parte del código te arroja el error?

Al parecer dicho error se produce debido a que en tu consulta hay un campo Nulo por lo que al ejecutarse la instrucción SQL falla. Lo que se trató de hacer es convertir Null es un string...

Esto me resulta rarísimo... ¿para que hacer conversiones de strings? ¿No es mejor estar guardandolo directamente como integer?

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 07-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Para mi el orden no esta bien, pero bueno, tal vez funcione asi.
Sabemos que ZSumaInventario hace toda la operacion, pero:
Para empezar me gustaria saber:
Cantidad
Inv
Cod
ZInventario, 3
ZTemp, 3
Bueno que tipo de datos contienen cada uno de ellos, me lo puedo imaginar pero me parece mejor preguntarlo.
Se nota que soy ademas de novato, curioso.
Saludos
Inv := la suma de la nueva cantidad mas la ya existente en la base de datos
Cod := el codigo o referencia del articulo donde la cual cumple como condicion.
ZInventario[3] := es el campo cantidad de tipo integer de la tabla Articulos.
ZTemp[3] := es el campo cantidad de tipo integer de la tabla temporal.

Cita:
Empezado por Delphius
Hola enecumene,
¿Podrías decirme en que parte del código te arroja el error?

Al parecer dicho error se produce debido a que en tu consulta hay un campo Nulo por lo que al ejecutarse la instrucción SQL falla. Lo que se trató de hacer es convertir Null es un string...

Esto me resulta rarísimo... ¿para que hacer conversiones de strings? ¿No es mejor estar guardandolo directamente como integer?

Saludos,
el error se produce en esta linea:

Código Delphi [-]
ZSumaInventario.ParamByName('inv').Value := strtoint(ZInventario.Fields[3].Value) + strtoint(ZTemp.Fields[3].Value);

P.D.: se me habia olvidado decir que estoy trabajando con access y delphi7.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #5  
Antiguo 07-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
uffff!!!!, ya he ultilizado el 100% de mi pequeña cabecita y no he logrado el objetivo, pues seguire descansando y tomando mi cervecita.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #6  
Antiguo 07-10-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Hola
Intenta esta tonteria:
Código Delphi [-]
ZSumaInventario.Close;
ZSumaInventario.SQL.Clear;
ZSumaInventario.SQL.Add('update articulos set cantidad = :inv where ref = :cod');
ZSumaInventario.ParamByName('cod').Value := ZTemp.Fields[1].Value;
ZSumaInventario.ParamByName('inv').Value := strtoint(ZInventario.Fields[3].Value) + strtoint(ZTemp.Fields[3].Value);
ZSumaInventario.ExecSQL;
Saludos
Responder Con Cita
  #7  
Antiguo 07-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Hola Caral, el mismo error.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #8  
Antiguo 07-10-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Hola
Me deja mal este error, no logro verlo, si puede poner el programa, me gustaria probarlo.
Saludos
Responder Con Cita
  #9  
Antiguo 07-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Vale, el programa esta a medias vere como lo posteo, dame unos minutos.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #10  
Antiguo 07-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
A ver si funciona el link:

Almacen.rar

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #11  
Antiguo 07-10-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Ya lo tengo, lo voy a revisra
Ya lo comentamos, un minuto
Responder Con Cita
  #12  
Antiguo 07-10-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Hola
Veamos una prueba, a ver que datos muestra:
Código Delphi [-]
ZSumaInventario.SQL.Add('update articulos set cantidad = :inv where ref = :cod');
ZSumaInventario.ParamByName('cod').Value := ZTemp.Fields[1].Value;
ZSumaInventario.ParamByName('inv').Value := strtoint(ZInventario.Fields[3].Value) + strtoint(ZTemp.Fields[3].Value);
Showmessage(ZSumaInventario.ParamByName('inv').Value);
//ZSumaInventario.ExecSQL;
Si lo puedes hacer con cod, tambien pues mejor.
Saludos
Responder Con Cita
  #13  
Antiguo 07-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Ni siquiera salio el showmessage:

Cita:
---------------------------
Debugger Exception Notification
---------------------------
Project Almacen.exe raised exception class EVariantTypeCastError with message 'Could not convert variant of type (Null) into type (String)'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
se detiene en:

Código Delphi [-]
ZSumaInventario.ParamByName('inv').Value := strtoint(ZInventario.Fields[3].Value) + strtoint(ZTemp.Fields[3].Value);
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #14  
Antiguo 07-10-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Hola
Te pido que hagas esto por que me olvide que no tengo instalado zeos asi que no puedo correrlo.
Intenta esto:
Código Delphi [-]
ZSumaInventario.SQL.Add('update articulos set cantidad = :inv where ref = :cod');
ZSumaInventario.ParamByName('cod').Value := ZTemp.Fields[1].Value;
ZSumaInventario.ParamByName('inv').Value := 1 + 2; 
Showmessage(ZSumaInventario.ParamByName('cod').Value);
//strtoint(ZInventario.Fields[3].Value) + strtoint(ZTemp.Fields[3].Value);
//Showmessage(ZSumaInventario.ParamByName('inv').Value);
//ZSumaInventario.ExecSQL;
Veamos
Saludos
Responder Con Cita
  #15  
Antiguo 07-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
de tres articulos que hay en la tabla me tiro una sola referencia, me imagino que esta bien o deberia aparecer todos?:

Cita:
---------------------------
Almacen
---------------------------
Q2612A
---------------------------
OK
---------------------------
Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #16  
Antiguo 07-10-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Hola
Cambia esta linea, quiero ver que pasa.
Código Delphi [-]
ZSumaInventario.ParamByName('inv').Value := 1;
Saludos
Responder Con Cita
  #17  
Antiguo 07-10-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Hola
Perdona, tambien pruebalo con 2 en vez de 1.
Saludos
Responder Con Cita
  #18  
Antiguo 07-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
me salio el mismo showmessage del post #15, pero me estoy dando cuenta de algo, dejame hacer un prueba y luego te comento.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.

Última edición por enecumene fecha: 07-10-2007 a las 21:42:59.
Responder Con Cita
  #19  
Antiguo 07-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Igual el showmessage del post #15 y no tira errores de las dos maneras. y la otra prueba que hice tambien fallo pense que era que habia un append de por medio y como estaba vacio era null, pero que va el mismo error.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #20  
Antiguo 07-10-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Hola
Tratemos de entender mas.
Código Delphi [-]
ZSumaInventario.SQL.Add('update articulos set cantidad = :inv where ref = :cod');
ZSumaInventario.ParamByName('cod').Value := ZTemp.Fields[1].Value;
ZSumaInventario.ParamByName('inv').Value := strtoint(ZInventario.Fields[3].Value); 
Showmessage(ZSumaInventario.ParamByName('cod').Value);
Showmessage(ZSumaInventario.ParamByName('inv').Value);
Aqui hay dos mensajes cod e inv, veamos que nos envia
Segun veo deberia enviar esto:
el primer mensaje: Q2612A
el segundo mensaje: 5
Saludos
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
Hacer un insert o un update en un campo array David Firebird e Interbase 4 27-04-2007 20:14:13
Update para un campo dbgrid multiselect jorelivi Varios 1 27-04-2007 00:54:27
UPDATE de un campo dependiendo del valor de un campo de otra tabla Javi2 SQL 5 18-04-2005 17:35:05
Error en update campo tipo fecha dridly SQL 1 24-09-2004 15:27:37


La franja horaria es GMT +2. Ahora son las 01:11:08.


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