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 27-06-2005
perillan perillan is offline
Miembro
 
Registrado: feb 2005
Posts: 82
Poder: 20
perillan Va por buen camino
Locura Con Interbase

Tengo una base de datos con Interbase a la que le he pasado los datos de varias bases en access con un programilla que he tenido que hacer. El campo de la clave primaria se debe incrementar cada vez que se introduce un registro. Con la base de datos vacia no hay ningun problema inserta el registro, incrementa la clave primaria etc. todo bien. El problema esta cuando intento insertar un nuevo registro en la base con los datos pasados desde access me da un error de clave primaria. Los numeros de la clave primaria estan bien ya que con los programas IB_SQL y Database Desktop corre perfectamente del primer al ultimo registro.
Con la aplicacion que estoy haciendo al darme ese problema he pensado en incrementar la clave primaria con codigo, pero sigue dandome el error, poniendole un Dbnavigator he visto que el problema es que la base no corre buscando ni al primer ni ultimo registro y claro si no llega al ultimo registro no puede crear la clave primaria.
Alquien me puede comentar a que es debido esto que me tiene totalmente parado. Un saludo y gracias anticipadas.
Responder Con Cita
  #2  
Antiguo 27-06-2005
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
Hola:

Si pusieras el error que te da sería más fácil averiguar lo que puede pasar.

De todas formas si con la base de datos vacía coge bien el valor de la llave primaria y no da error puede ser que al añadir el valor cuando ya tienes datos estés duplicando algún valor y te de error por eso.

Averigua cual es el mayor valor que tienes y puedes hacer un generador con ese valor y utilizar el generador para incrementar automáticamente los valores del campo clave.

Un saludo.
Responder Con Cita
  #3  
Antiguo 28-06-2005
perillan perillan is offline
Miembro
 
Registrado: feb 2005
Posts: 82
Poder: 20
perillan Va por buen camino
El error efectivamente es que intenta duplicar el campo de la clave primaria, por que no coge la referencia del ultimo registro para incrementar en uno al insertar otro nuevo. Esto lo he hecho con codigo pero da el mismo error. El problema es que con datos no corre la base hasta el ultimo registro y por eso crea el problema con la clave primaria, y esto es lo que no se y me trae loco.

He puesto un Form y el el un Ibdatabase,Ibtransaction,Ibdataset y un Dbnavigator enlazandolos todos y le he dado al cursor para que corran los registros y el tema esta en que la clava primara se encuentra con un orden que el IBdataset le pone, pero que no es el correlativo como podia ser 1,2,3,4,5 etc. y por eso no coge el ultimo registro para incrementar el numero e insetar el nuevo registro. Alguien sabe porque no deja los registros ordenados como se ven con los otros programes que he señalado en la consulta?.

Última edición por perillan fecha: 28-06-2005 a las 11:55:39.
Responder Con Cita
  #4  
Antiguo 28-06-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Bueno... puestos así, es imposible saber que pasa. No comentas siquiera cómo es que generas los nuevos valores para la llave primaria, ni has puesto un trozo de código que lo aclare.

¿te basas en un generador?

Si es así, pues alterá el valor del generador para que parta del primer número válido para la clave primaria y problema solucionado.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 28-06-2005
perillan perillan is offline
Miembro
 
Registrado: feb 2005
Posts: 82
Poder: 20
perillan Va por buen camino
Perdonar si me estoy esplicando mal, el tema es que ahora he estado con ello y en el programilla ultimo con el from la base de datos y el dbnavigator con la base activada no tienen un orden correlativo los numeros del campo primario o llave.Si inserto un registro con el dbnavigator genera un numero repetido y da error no pudiendose hacer la insercion. Como el ultimo registro es el 900 si yo lo pongo manuel con el 901 lo inserta perfectamente. Si la base de datos la dejo sin registro ninguno (limpia) se genera perfectamente la clave primaria en el nuevo registro y todo perfecto.
La clave primaria es un campo integer y lo que no entiendo es porque si hay datos elige un numero cualquiera y no el ultimo retistro metido con lo que no daria problemas.
Un saludo
Responder Con Cita
  #6  
Antiguo 29-06-2005
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
Hola:

No es que te expliques mal, es que no nos contestas lo que te hemos preguntado, y entonces hay que ir adivinando, y a veces uno adivina bien, otras mal y otras no tiene ganas de adivinanzas.

¿Qué error exacto te da?
¿Cómo generas los nuevos valores cuando te da el error?

Estás empeñado en el orden del campo llave y eso en este caso no tiene ninguna importancia, a no ser que busques el valor mayor y quieras que esté en el último registro para ir a buscarlo allí, en cuyo caso bastaría con ordenar la tabla por ese campo.
Lo que a mi me parece, es que piensas que por poner un DBNavigator y añadir un registro, va a ir al último registro, va a coger el valor que tiene y va a incrementarlo, y esto no es así.
El valor incrementado lo tienes que generar tu de alguna manera, por el solo hecho de añadir un registro no se va a generar el solo, puedes hacerlo manualmente como tu dices o de una forma automática, con un generador por ejemplo.

Con un generador:

Crea un generador, por ejemplo G_CODIGOMIO
Asignale el valor más alto que tengas en el campo
En el IBDataSet, propiedad GeneratorField pones..
Generator: G_CODIGOMIO
Field: ELQUESEA
Increment by: 1
Apply Event: On New Record
Con esto cada vez que añadas un registro automáticamente se incrementará el último valor en uno y se colocará ese valor en el campo ELQUESEA

Un saludo.
Responder Con Cita
  #7  
Antiguo 29-06-2005
perillan perillan is offline
Miembro
 
Registrado: feb 2005
Posts: 82
Poder: 20
perillan Va por buen camino
Hola: el error que da es el siguiente:

violation fo primary or uniquey constrart "integ-2" on table "tabla".

El generador lo he tenido creado, así como la configuración del ibdataset igual al ejemplo que me pones. Lo que no tengo ni se como se hace es es asignarle el valor mas ato al generador.
Un saludo.
Responder Con Cita
  #8  
Antiguo 29-06-2005
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
Hola:

Si creas el generador sin más el valor que coge es 0 y seguramente por eso te dará el error.

Yo lo hago con IBExpert (es muy bueno y gratuito en su versión personal). Te digo los pasos con IBExpert, de otra forma ahora mismo no se hacerlo.

Registrar la base de datos, después de registrada doble click para conectarse, aparece la opción generadores, con el botón dcho. sobre él aparece un menú para crear nuevo o si ya existen con doble click sobre el nombre del generador se va pasando a la ventana de la dcha. donde se puede cambiar el valor. Una vez cambiado el valor o el nombre no olvidar compilarlo (botón con rayo amarillo) y Commit para que coja los nuevos valores.

Un saludo.
Responder Con Cita
  #9  
Antiguo 29-06-2005
perillan perillan is offline
Miembro
 
Registrado: feb 2005
Posts: 82
Poder: 20
perillan Va por buen camino
Muchas gracias por todo Fidel.
Es mi gran desconocimiento con interbase. El problema estaba como tu dices en el generador que yo no sabia que habia que asignarle un valor. Lo he hecho con IB_SQL y funciona perfectamente.
Un cordial saludo. Agustin.
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


La franja horaria es GMT +2. Ahora son las 13:26:47.


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