![]() |
![]() |
| Paypal | 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
|
||||
|
||||
|
Cita:
Los scripts son código del programa Builder. Como puedes ver en ambos esa columna CodPrv está definida igual (VARCHAR(2)), lo mismo que esa columna Poblacion (que haciendo caso a ecfisa he bautizado de otra manera para evitar confusiones) es un entero en ambas tablas. Tal vez, y sólo tal vez, habría que definirlas como VARCHAR(3) o VARCHAR(4) ya que el avlro de ese campo podría llegar a ser 100. Y, por cierto, ¿a qué collation te refieres? |
|
#2
|
||||
|
||||
|
A mi una de las cosas que más me sorprende es que en la carga inicial de la BB.DD. a partri de las tabals Paradox he podido hacer la definición de las restricciones DESPUÉS de cargar las tablas y ahora que tengo que definir nuevas tablas no me deja hacer esa definición.
Una cosa que se me ocurre, y seguramente será una burrada: La tabla DATLOC, como otras nuevas que hay que definir, es evidente que está vacía; dado que esta tabla no tiene datos y la tabla POBLACION no está vacía, ¿podría ser que el problema viniera por ahí? ¿Tal vez sería interesante crear un fila "fantasma" en DATLOC para evitar ese problema? |
|
#3
|
||||
|
||||
|
No podemos hacer gran cosa sin tener los datos para probar.
Lo que es seguro, es que la base de datos tiene unas reglas fijas, es algo "matemático", y si dice que hay un problema con los datos, es que los hay.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#4
|
||||
|
||||
|
No me importaría mandaros las tablas para que probarais. El problema es que el fichero, aun estando comprimido, ocupa más de 300 Mb
Última edición por Angel.Matilla fecha: 10-04-2018 a las 10:12:25. |
|
#5
|
||||
|
||||
|
Si tiene datos personales, mejor que no lo envíes, por si acaso, ya sabes.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#6
|
||||
|
||||
|
Cita:
Seguimos... ¡Mi gozo en un pozo! La idea que planteaba el otro día sobre eliminar las restricciones no ha funcionado; era demasiado fácil. Empiezo a pensar que realmente hay algo en al definición de las tablas que no está tal como yo pensaba. Seguiré investigando ![]() |
|
#7
|
||||
|
||||
|
Bueno. Después de mucho batallar me ha sido imposible encontrar la manera de solventar este error, asíq ue he optado por definir una nueva base de datos desde cero y migrar los datos de una a otra. Sigo pensando que tiene que haber una solución pero no soy capaz de encontrarla.
Gracias a todos los que me habéis propuesto soluciones. |
|
#8
|
||||
|
||||
|
Creo que acabo de encontrar el error. Me parece que no tiene nada que ver con si una de las tablas tiene o datos; tiene que ver con que la propia tabla a que referencio (POBLACION en el caso que estoy comentando) tiene a su vez referencias externas. Lo digo porque he intentado volcar la tabla en otra con la misma estructura (pero sin índices ni nada más que los propios datos), vaciar la tabla inicial y al hacer el DELETE sobre ella me da error por otras tablas que tienen una clave externa sobre ella.
Se me ocurre, y lo tengo que probar, a eliminar todas estas claves externas ya existentes y volver a aplicarlas incluyendo las nuevas. |
|
#9
|
|||
|
|||
|
Me refiero a que cuando se crea una tabla se puede definir el collation_name de cada una de las columnas de tipo carácter. El siguiente es un fragmento de la sintaxis de la sentencia Create Table:
CREATE TABLE Used for: creating a new table (relation) Available in: DSQL, ESQL Syntax: CREATE [GLOBAL TEMPORARY] TABLE tablename [EXTERNAL [FILE] '<filespec>'] (<col_def> [, {<col_def> | <tconstraint>} ...]) [ON COMMIT {DELETE | PRESERVE} ROWS]; <col_def> ::= <regular_col_def> | <computed_col_def> <regular_col_def> ::= colname {<datatype> | domainname} [DEFAULT {literal | NULL | <context_var>}] [NOT NULL] [<col_constraint>] [COLLATE collation_name] Si se trata de establecer una integridad referencial entre dos tabla, entre columnas varchar, y si las columnas varchar tienen diferente collation_name saltará el error: Partner index segment no 1 has incompatible data type En preguntas frecuentes de Firebird se encuentra lo siguiente: "Partner index segment no 1 has incompatible data type This usually means that the field in the foreign key you're trying to create has a different data type then the field of the primary key column it is referencing. The difference can be subtle, anything that affects index (even field collation) is taken info account. To solve this problem, usually the right thing to do is to change the data type of the foreign key columns before creating the foreign key constraint. " Edito: De ser posible borrar (drop table, no delete) ambas tablas y vuelve a crearlas. |
|
#10
|
||||
|
||||
|
Gracias por la respuesta. No me había fijado en esa sintaxis; sin embargo, y haciendo caso a ecfisa, en la tabla DatLoc cambié el nombre de la columna por Codigo para que en ambas tablas se llamaran igual y tuvieran la misma estructura y por lo tanto en ambas ahora es: CodPrv VARCHAR(2) DEFAULT '99' NOT NULL, Codigo INTEGER NOT NULL, etc. Con esto la restricción quedaría así:
Código PHP:
Sobre lo de eliminar la tabla y crearla de nuevo. Tengo el problema, que ya comenté ayer, que esa tabla Poblacion aplica restricciones en otras de la BB.DD. Estoy probando a borrar esas definiciones y crearlas de nuevo, pero no sé porqué (eso estoy investigando) no se ejecutan bien los querys. Estoy haciendo esto, aunque empiezo a dudar que esté haciéndolo bien: 1. Tengo guardadas las definiciones en un array con la siguiente estructura: Código PHP:
2. Verifico si existen todas las restricciones definidas en ese array. Código PHP:
Código PHP:
![]() |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Error al definir un FK en Firebird 2.5 | Angel.Matilla | Firebird e Interbase | 10 | 29-11-2016 13:13:26 |
| Error al intentar borrar constraint foreign key | rfernandez | Firebird e Interbase | 5 | 08-10-2008 23:36:02 |
| error al crear foreign key en firebird | carlo_acp | Conexión con bases de datos | 2 | 23-02-2008 02:58:08 |
| error de violation of foreign key constraint... en ibx | Arturo | Firebird e Interbase | 1 | 07-12-2004 19:38:57 |
| uso de FOREIGN KEY | jzginez | Firebird e Interbase | 2 | 22-04-2004 23:20:25 |
|