FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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. |
#2
|
||||
|
||||
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:
|
#3
|
||||
|
||||
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" |
#4
|
||||
|
||||
¿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.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código Únete al grupo Teaming clubdelphi | Colabora mediante Paypal Última edición por Casimiro Notevi fecha: 22-01-2010 a las 00:09:04. |
#5
|
||||
|
||||
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 |
#6
|
||||
|
||||
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" |
#7
|
||||
|
||||
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"? |
#8
|
||||
|
||||
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. |
#9
|
||||
|
||||
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). |
#10
|
||||
|
||||
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; */ 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 |
#11
|
||||
|
||||
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. |
#12
|
||||
|
||||
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:
|
#13
|
||||
|
||||
]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" |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
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 |
|