Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-01-2010
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Problemas con campos Numeric

Hola compañeros estoy trabajando con Delphi 2010, con Firebird 2.1 e ibexpert personal edition, y lo que me ocurre es lo siguiente, al crear la base de datos con la siguiente estructura


LOTE varchar 20
FECHA date
TIPO_DOCUMENTO varchar 40
NUMERO_DOCUMENTO varchar 15
CODIGO_PRODUCTO varchar 20
CANTIDAD Integer
UD_LITROS numeric 10,3




Al meter datos en Ibespert en el campo numeric me sale el mensaje


Cannot post cahges!
There is at least one record with same fields values!

y al hacerlo desde el programa, no dice nada pero tampocoi me registra el valor introducido, alguien sabe cual es la solución y por que puede ocurrir, como siempre gracias por vuestra ayuda
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"

Última edición por José Luis Garcí fecha: 21-01-2010 a las 14:42:07.
Responder Con Cita
  #2  
Antiguo 21-01-2010
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Hola Jose Luis, porque no pruebas a insertar un solo registro a la vez, aunque no vemos la estructura de la tabla, pienso que pueda ser problema de una PK o de un índice único que no te estén dejando grabar el registro.

Prueba a conectarte con ISQL

Connect "C:\MiBase.fdb" USER "SYSDBA" Password "masterkey";

Show Table El_Nombre_Quesea;

Exit;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 21-01-2010
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Hola Marcos, la estructura de la tabla es la que vez en el post anterior, la tabla se llama LOTES_SALIDA, y no tiene indices ni PK ni FK ya que lo logicoes por lotes, o fechas o numero de documento, pero esto ya lo hago mediante los IbQuery, lo que me interesa es saber el último registro en cada momento, ya que estoy llevando de momento la trazabilidad, en un programa aparte del de facturación.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #4  
Antiguo 21-01-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Seguro que no tiene clave primaria?, es que ese error está "cantado" que es eso, no?.
¿Algún compañero que haya querido gastarte una broma y la ha creado?

También, aunque no lo he probado, leí una vez que es obligado tener siempre una clave primaria, puede que el error sea eso.


Edito: no, no es eso, lo he probado y el mensaje es muy diferente, voy a hacer otras pruebas.

Última edición por Casimiro Notevi fecha: 22-01-2010 a las 00:09:04.
Responder Con Cita
  #5  
Antiguo 22-01-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por las pruebas que he hecho he llegado a la conclusión de que el problema es precisamente el no tener campo clave.
Había leído alguna vez que es necesario, haz la prueba de crear un nuevo campo, ejemplo:
Código:
ID integer
y ponlo como primary key, se acabaron los problemas.
Responder Con Cita
  #6  
Antiguo 22-01-2010
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Hola Caismiro, he hecho lo que me decias y funciono, pero no con un integer, sino con un numeric, lo que me pasa ahora es que los campos UD_LITROS Y CANTIDAD, no me recogen ni los nuevos datos ni las modificaciones sobre ellos, puede deberse a este fallo.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #7  
Antiguo 22-01-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Yo no te aconsejo para nada poner como clave primaria un campo que va a contener decimales, ¿por qué no usas el integer?.

Deberías poder guardar lo que quisieras en esos campos, ¿por qué no creas una nueva tabla y lo pruebas "de limpio"?
Responder Con Cita
  #8  
Antiguo 22-01-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Opino igual que los compañeros, aunque no es obligatorio es muy conveniente tener una clave primaria.

Todo parece indicar que el problema es la falta de clave primaria. El mensaje de error es muy claro : "Ya hay al menos un registro con los mismos valores en los campos". ¿ Como podría el motor distinguir dos registros con exactamente los mismos valores, sin al menos una clave primaria que los permita identificar de forma única ?.

La solución es sencilla, como te dicen solo tienes que añadir una clave primaria. Puedes hacer que se rellene mediante un generador y un sencillo trigger, de esta forma no tendrás que tocar para nada tu aplicación, podrás seguir insertando registros exactamente igual a como venías haciéndolo hasta ahora, y lo mismo para su consulta.

Última edición por guillotmarc fecha: 22-01-2010 a las 13:47:46.
Responder Con Cita
  #9  
Antiguo 22-01-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Vaya, veo que ya habéis solucionado ese error.

Respecto a lo del integer y numeric. ¿ Estás usando los campos existentes para definir la clave primaria ?.

No lo hagas, puesto que no puedes asegurar que tengan valores únicos (requisito de cualquier clave primaria).

Simplemente añade un campo nuevo, de tipo integer, como dice Casimiro, y asígnale su valor en un trigger (de forma que no tengas que tocar para nada tu aplicación).
Responder Con Cita
  #10  
Antiguo 22-01-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Primero creas un "generator", ejemplo:

Código:
CREATE SEQUENCE GEN_lotes_salida_ID;
ALTER SEQUENCE GEN_lotes_salida_ID RESTART WITH 0;

/* Old syntax is:
CREATE GENERATOR GEN_lotes_salida_ID;
SET GENERATOR GEN_lotes_salida_ID TO 0;
*/
Luego creas el trigger:
Código:
CREATE OR ALTER trigger trg_lotes_salida_bi0 for lotes_salida
active before insert position 0
AS
BEGIN
  NEW.id = GEN_ID(GEN_lotes_salida_ID,1);
END
Y listo, cada vez que insertes un registro se guardará la clave primaria automáticamente.
Responder Con Cita
  #11  
Antiguo 22-01-2010
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Gracias Casimiro, lo intentare la semana que viene, el problema es que en el ibexpert, no sabia como crear una clave primaria sobre una tabla existente, por cierto, como se puede duplicar los campos de una tabla en otro, se que se puede, pero no me acuerdo como?.

Por cierto Casimiro, el código expuesto, en que parte debería ponerlo?.

Por cierto en el coche de camino a casa, pensando en por que me fallaba, creo que ya se la razón, no he cambiado las sentencias con los nuevos campos en el IBdataset.

Muchas gracias por vuestro apoyo
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"

Última edición por José Luis Garcí fecha: 22-01-2010 a las 16:32:01.
Responder Con Cita
  #12  
Antiguo 22-01-2010
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Si usas un "Script", para crear la base de datos en el propio "Script", debe de encontrarse por debajo del lugar en donde se crea la tabla a la que afecta.

Si usas el IbExpert, pulsas en Triggers, botón derecho y eliges "New Trigger".

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #13  
Antiguo 26-01-2010
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
]Como siempre teneis toda la razón, me funciona mejor con un campo integer y en cuanto al trigger, lo habia generado ya junto con el proceso y disparador, pero no sabia como aplicarlo a delphi hasta que encontre en el for esta solución
Conectar Trigger en Delphi

Doy el Tema por Solucionado, y muchas gracias a todos
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
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
Problemas con campos Numeric edgusano MS SQL Server 2 25-05-2005 18:04:36
Numeric (12, 4) en Delphi 7 oliverinf Firebird e Interbase 3 18-12-2004 00:02:40
Tipos de dato Numeric...??? mguixot OOP 6 06-03-2004 23:03:32
Valores en campos numeric xerkan Firebird e Interbase 1 08-12-2003 20:41:43
Dominio Numeric(2,0) siempre = 0 apicito Firebird e Interbase 3 03-09-2003 00:18:56


La franja horaria es GMT +2. Ahora son las 16:33:40.


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