Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   BB.DD. FB: Establecer valor por defecto (https://www.clubdelphi.com/foros/showthread.php?t=90109)

Angel.Matilla 08-04-2016 19:01:42

BB.DD. FB: Establecer valor por defecto
 
Después de la ayuda recibida de Casimiro y ecfisa en Propiedades de una columna, me está apareciendo otro error del que no soy capaz de encontrar el origen.

Para fijar el valor por defecto de una columna uso el código del hilo que comentaba más arriba. Sin embargo al tratar de actualizar una de las tablas con este código:
Código SQL [-]
ALTER TABLE ELECTOS ALTER COLUMN CODPRV SET DEFAULT '45'

teniendo la tabla esta definición:
Código SQL [-]
CREATE TABLE Electos (CodPrv VARCHAR(2) NOT NULL, 
                      Codigo INTEGER NOT NULL, 
                      Cargo INTEGER NOT NULL, 
                      Junta SMALLINT DEFAULT 1,
                      CONSTRAINT PK_Electos PRIMARY KEY (CodPrv, Codigo, Cargo, Junta))

Se genera este error:
Cita:

Partner index segment no 1 has incompatible data type
Hasta donde soy capaz de entender y he podido encontrar, o eso creo, me está indicando que los tipos de datos de la definición de la columna y del valor que intento introducir no son compatibles, como si quisiera meter un número en un varchar.

ecfisa 08-04-2016 19:58:23

Hola.

El siguiente enlace: Partner index segment no 1 has incompatible data type, explica que ese error generalmente se produce por incongruencias de tipo en una clave externa.

Saludos :)

Angel.Matilla 09-04-2016 10:40:35

Gracias por la respuesta. He hecho una prueba, basándome en el código que monta EMS: Los dos primeros querys que hay en el código que puse (los dos UPDATE RDB$FIELDS que hay en Propiedades de una columna) los he sacado de ahí y los he llevado al CREATE TABLE asi:
Código:

Query->Close();
Query->SQL->Text = "CREATE TABLE ...";
Query->ExecSQL();

if (Query->SQL->Text.Pos("PRIMARY KEY (CodPrv") != 0)
{
    cAux = Query->SQL->Text.SubString(14, Query->SQL->Text.Length());
    cAux = UpperCase(cAux.SubString(1, cAux.Pos(" ")).Trim());

    Query->Close();
    Query->SQL->Text = "UPDATE RDB$FIELDS SET RDB$CHARACTER_SET_ID = NULL WHERE RDB$FIELD_NAME = (SELECT RDB$FIELD_SOURCE FROM RDB$RELATION_FIELDS WHERE "
                        "RDB$FIELD_NAME = 'CODPRV' AND RDB$RELATION_NAME = :Tabla)";
    Query->ParamByName("Tabla")->AsString = cAux;
    Query->ExecSQL();

    Query->Close();
    Query->SQL->Text = "UPDATE RDB$RELATION_FIELDS SET RDB$COLLATION_ID = NULL WHERE RDB$FIELD_NAME = 'CODPRV' AND RDB$RELATION_NAME = :Tabla";
    Query->ParamByName("Tabla")->AsString = cAux;
    Query->ExecSQL();
}
Query->Transaction->CommitRetaining();

Dejando el otro trozo (ALTER TABLE) donde está ¡Y funciona a la perfección! No lo entiendo, pero funciona. :confused:


La franja horaria es GMT +2. Ahora son las 10:37:03.

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