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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-03-2011
juliobuitrago juliobuitrago is offline
Miembro
 
Registrado: jun 2006
Posts: 37
Poder: 0
juliobuitrago Va por buen camino
Extrañisimo problema con Llave

Hola.
Me sucede un lio sumamente extraño.
Necesito hacer unas replicaciones a diferentes bases de datos.
Se me ocurrio usar el IBScript, donde meto todas las modificaciones que luego voy a ejecutar en cada database 8son 5 y pueden ser mas).
Esta es la tabla:
CREATE TABLE PRODUCTOS (
ID_PRODUCTO DOMAIN_ID_PRODUCTO NOT NULL,
ID_SUPLIDOR DOMAIN_ID_INT,
COD_PRODUCTO DOMAIN_COD_PRODUCTO NOT NULL,
NOM_PRODUCTO_EN DOMAIN_DESC_128,
NOM_PRODUCTO_ES DOMAIN_DESC_128,
NOM_PRODUCTO_ALIAS DOMAIN_DESC_64,
ID_UM DOMAIN_ID_CHR4_NIL,
ID_PRODUCTO_TIPO DOMAIN_ID_CHR4_NIL,
ES_INVENTARIABLE DOMAIN_BOOLEAN_T NOT NULL,
EXISTENCIA_PREFERIDA DOMAIN_VALUES,
PRECIO_LISTA DOMAIN_VALORES_DINERO,
ES_PLUS DOMAIN_BOOLEAN_F,
MONTO_PLUS DOMAIN_VALORES_DINERO,
COD_PRODUCTO1 DOMAIN_COD_PRODUCTO_NIL,
COD_PRODUCTO2 DOMAIN_COD_PRODUCTO_NIL,
COD_PRODUCTO3 DOMAIN_COD_PRODUCTO_NIL,
COD_PRODUCTO4 DOMAIN_COD_PRODUCTO_NIL,
COD_PRODUCTO5 DOMAIN_COD_PRODUCTO_NIL
);

Esta es la llave primeria
ALTER TABLE PRODUCTOS ADD CONSTRAINT PK_PRODUCTOS PRIMARY KEY (ID_PRODUCTO);

Entonces, desde IBExpert, instrucciones como esta se ejecutan perfectamente:
update PRODUCTOS
SET NOM_PRODUCTO_ALIAS = 'BLA, BLA, '
WHERE ID_PRODUCTO = '0001'


Sin embargo, cuando ejecuto el TBScript me da problemas de indice.
SI ven bien el codigo, veran que puse un query a mano para detectar si era malo el string o era la ejecucion, y me dio ocmo resultado la ejecución
En este codigo ScriptProductos. es de tipo IBScript, que antes lo habia probado y funcionaba excelente....

ScriptProductos.Script.Add('Update PRODUCTOS SET NOM_PRODUCTO_EN = ' + QuotedStr('BLA, BLA, BLA') + ' WHERE ID_PRODUCTOS = ' + QuotedStr('P340001'));
//for i := 0 to v_ElementosElementos Do Begin
//ScriptProductos.Script.Add(v_Elementos[i]);
//ShowMessage(v_Elementos[i]);
//End;

//DatosDatabase.a_Transaction_Procs_Start.Execute;
//ScriptProductos.
ScriptProductos.ExecuteScript;
//DatosDatabase.a_Transaction_Procs_Commit.Execute;

En la imagen les muestro el error, pero basicamente dice que hay un problema con el indice...
y a mi me parece que la que ejecuto por el IBExpert y esta son parecidas...

Por favor, ayudenme y gracias anticipadas.
Fdo Buitrago
Imágenes Adjuntas
Tipo de Archivo: jpg error.JPG (17,8 KB, 15 visitas)
Tipo de Archivo: jpg error2.JPG (38,8 KB, 17 visitas)
Responder Con Cita
  #2  
Antiguo 21-03-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Este error en realidad no marca un error de índice. Marca que una clave única (definida en el índice PK_PRODUCTOS) ya existe.

Es decir, te está indicando que intentas añadir un registro en PRODUCTOS que tiene una clave primaria igual a la clave primaria de un registro ya existente en la tabla PRODUCTOS.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #3  
Antiguo 21-03-2011
juliobuitrago juliobuitrago is offline
Miembro
 
Registrado: jun 2006
Posts: 37
Poder: 0
juliobuitrago Va por buen camino
Angry Gracias por contestar.

Lo curioso, es que es un UPDATE, no un Insert.....
Ahi es donde esta lo extraño.....que podria pasar, que hago mal ?

saluos
Responder Con Cita
  #4  
Antiguo 21-03-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Cita:
Empezado por juliobuitrago Ver Mensaje
Lo curioso, es que es un UPDATE, no un Insert.....
Ahi es donde esta lo extraño.....que podria pasar, que hago mal ?

saluos
Puedes estar modificando el campo de clave primaria, asignándole un valor ya existente.

O bien un campo con un constraint de clave única.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 23-03-2011
juliobuitrago juliobuitrago is offline
Miembro
 
Registrado: jun 2006
Posts: 37
Poder: 0
juliobuitrago Va por buen camino
si te fijas en todos los codigos te daras cuenta lo extraño

pues la llave esta bien definida y lo curioso es que funciona fuera, pero no usando el IBScript

Alguna otra idea, ?
Responder Con Cita
  #6  
Antiguo 23-03-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
No, ese error es muy claro : es una violación de la clave primaria PK_PRODUCTOS.

Estás intentado añadir registros con claves primarias ya existentes, o estás intentando modificar registros cambiando su clave primaria por claves ya existentes.

Tienes que revisar tu código/script puesto que quizás el problema no está donde tu te piensas que está.

Esta sentencia es imposible que te provoque ese error :

update PRODUCTOS
SET NOM_PRODUCTO_ALIAS = 'BLA, BLA, '
WHERE ID_PRODUCTO = '0001'


Revisa las otras sentencias que tienes. Por ejemplo esta sentencia te podría provocar el error (no digo que tengas el problema aquí, pero podría ser, igual que podría ser en cualquier otro lugar que toque las claves primarias).

ALTER TABLE PRODUCTOS ADD CONSTRAINT PK_PRODUCTOS PRIMARY KEY (ID_PRODUCTO);


Si la tabla ya tiene registros con valores iguales en la clave primaria, no podrás crear esa clave primaria. Aunque creo que no saltaría el error de violación de clave primaria (puesto que aún no existe), sino que probablemente daría algún error de que no se ha podido crear la clave primaria.

En cualquier caso tienes que volver a revisar tu Script desde el principio.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
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
De la mochila a la llave USB marcoszorrilla La Taberna 2 15-10-2007 05:59:58
Error extrañisimo prouducido por delphi lag_0 OOP 14 23-10-2006 16:25:20
Error extrañisimo en un Tquery lucasarts_18 Varios 5 12-07-2006 10:09:32
Extrañísimo problema con un registro leandro_tami Varios 2 16-07-2005 06:09:47
Llave de dos campos jovehe Tablas planas 3 30-09-2004 08:42:52


La franja horaria es GMT +2. Ahora son las 12:07:06.


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