Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

SQL

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: SQL Responder citando

Hola, estoy teniendo un problema con SQL, estoy trabajando con interbase 6 y me da un error cuando intento crear la base de dato, no se si estoy haciendo algo mal les agradeceria su ayuda ya le di vuelta vastante y no encontre porque me tira un error de indece, si es un problema conseptual que tengo me podrian indicar alguna guia sobre SQL para leer, gracias


este es el codigo que estoy usando me da un error en la tabla clientes cuando intento relacionarla


/*
al server lo baje de

ftp://ftpc.borland.com/pub/interbase/devsupport/open_source/InterBase_WI-V6.0.1-server.ZIP
*/



CREATE DATABASE 'C:\DataBase\interbase\cheques.gdb' USER 'SYSDBA' PASSWORD 'masterkey';

/* CREATE DOMAIN T_YESNO AS CHAR(1) DEFAULT 'N' CHECK((VALUE IS NULL) OR (VALUE IN ('N','Y'))); */


/* Original table name is "Numeros" */
CREATE TABLE "Numeros" (
"CENTENA" VARCHAR(14),
"DECENA" VARCHAR(10),
"UNIDAD" VARCHAR(14)
);

/* Original table name is "Paises" */
CREATE TABLE "Paises" (
"IdPais" INTEGER NOT NULL PRIMARY KEY,
"ESPANOL" VARCHAR( 38 )
);
/* Generators for AutoInc fields for table "Paises" */
/* SELECT max(Paises.IdPais) FROM Paises */
CREATE GENERATOR "CodPais";
SET GENERATOR "CodPais" TO 10;

SET TERM ^;
CREATE TRIGGER "NewPais" FOR "Paises"
ACTIVE BEFORE INSERT
AS BEGIN
IF(NEW."IdPais" IS NULL) THEN NEW."IdPais" = GEN_ID("CodPais",1);
END ^
SET TERM ;^


/* Original table name is "Provincias" */
CREATE TABLE "Provincias" (
"IdProvincia" INTEGER NOT NULL PRIMARY KEY,
"RefPais" INTEGER not null,
"Provincia" VARCHAR(30),
FOREIGN KEY ("RefPais") REFERENCES "Paises" ("IdPais")
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
CREATE GENERATOR "CodProvincia";
SET GENERATOR "CodProvincia" TO 10;
SET TERM ^;
CREATE TRIGGER "NewProvincia" FOR "Provincias"
ACTIVE BEFORE INSERT
AS BEGIN
IF(NEW."IdProvincia" IS NULL) THEN NEW."IdProvincia" = GEN_ID("CodProvincia",1);
END ^
SET TERM ;^

/* Original table name is "Ciudad" */
CREATE TABLE "Ciudad" (
"IdCuidad" INTEGER NOT NULL PRIMARY KEY,
"RefProvincia" INTEGER not null,
"CodPostal" VARCHAR( 8 ) ,
"Ciudad" VARCHAR(40),
FOREIGN KEY ("RefProvincia") REFERENCES "Provincias" ("IdProvincia")
ON DELETE NO ACTION
ON UPDATE NO ACTION
);

CREATE GENERATOR "CodCiudad";
SET GENERATOR "CodCiudad" TO 10;

SET TERM ^;
CREATE TRIGGER "NewCiudad" FOR "Ciudad"
ACTIVE BEFORE INSERT
AS BEGIN
IF(NEW."IdCuidad" IS NULL) THEN NEW."IdCuidad" = GEN_ID("CodCiudad",1);
END ^
SET TERM ;^


/* Original table name is "Clientes" */
CREATE TABLE Clientes (
"IdCliente" INTEGER NOT NULL PRIMARY KEY ,
"RefCiudad" INTEGER not null,
"Empresa" VARCHAR(40) ,
"Apellido" VARCHAR(20) ,
"Nombre" VARCHAR(30) ,
"Cargo" VARCHAR(30) ,
"Direccion" VARCHAR(60) ,
"Telefono" VARCHAR(24) ,
"Fax" VARCHAR(24) ,
"Observacion" VARCHAR(254),
FOREIGN KEY ("RefCiudad") REFERENCES "Cuidad" ("IdCuidad")
ON DELETE NO ACTION
ON UPDATE NO ACTION
);

/*
CREATE GENERATOR CodCliente;
SET GENERATOR CodCliente TO 10;
SET TERM ^;
CREATE TRIGGER NewCliente FOR Clientes BEFORE INSERT
AS BEGIN
IF(NEW.IdCliente IS NULL) THEN NEW.IdCliente = GEN_ID(CodCliente,1);
END ^
SET TERM ;^
*/
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

No conozco demasiado bien las características de Firefox, pero para crea la tabla me parece que la definición de la clave primaria la tienes mal. ¿Has probado esto otro?
Código:
CREATE TABLE Clientes (
"IdCliente" INTEGER NOT NULL ,
"RefCiudad" INTEGER not null,
"Empresa" VARCHAR(40) ,
"Apellido" VARCHAR(20) ,
"Nombre" VARCHAR(30) ,
"Cargo" VARCHAR(30) ,
"Direccion" VARCHAR(60) ,
"Telefono" VARCHAR(24) ,
"Fax" VARCHAR(24) ,
"Observacion" VARCHAR(254),
PRIMARY KEY ("IdCliente") ,
FOREIGN KEY ("RefCiudad") REFERENCES "Cuidad" ("IdCuidad")
ON DELETE NO ACTION
ON UPDATE NO ACTION)

_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Tor escribió:
Hola, estoy teniendo un problema con SQL, estoy trabajando con interbase 6 y me da un error cuando intento crear la base de dato, no se si estoy haciendo algo mal les agradeceria su ayuda ya le di vuelta vastante y no encontre porque me tira un error de indece, si es un problema conseptual que tengo me podrian indicar alguna guia sobre SQL para leer, gracias


Que tal Tor
El problema está en el nombre de la tabla de referencia, estas haciendo una referencia a una tabla llamada "Cuidad" la cual no existe, la tabla se llama "Ciudad".

Código:
 FOREIGN KEY ("RefCiudad") REFERENCES "Cuidad" ("IdCuidad")


Son solo errores de dedo. Otro caso es el nombre de la llave primaria de la tabla "Ciudad". Lo has llamado "IdCuidad" pero creo que lo corecto es "IdCiudad". Un detalle más es que si estas utiilzando comillas para nombrar los objetos de la base de datos, te recomiendo lo hagas en todo.

Modifique los detalles que te acabo de mencionar (nombre de tabla en la referencia, cambio del nombre del campo llave de ciudad y comillas en la ultima parte del script) y queda de la siguiente manera:

Código:
CREATE DATABASE 'C:\DataBase\interbase\cheques.gdb' USER 'SYSDBA' PASSWORD 'masterkey';

/* CREATE DOMAIN T_YESNO AS CHAR(1) DEFAULT 'N' CHECK((VALUE IS NULL) OR (VALUE IN ('N','Y'))); */
/* Original table name is "Numeros" */
CREATE TABLE "Numeros" (
"CENTENA" VARCHAR(14),
"DECENA" VARCHAR(10),
"UNIDAD" VARCHAR(14)
);

/* Original table name is "Paises" */
CREATE TABLE "Paises" (
"IdPais" INTEGER NOT NULL PRIMARY KEY,
"ESPANOL" VARCHAR( 38 )
);
/* Generators for AutoInc fields for table "Paises" */
/* SELECT max(Paises.IdPais) FROM Paises */
CREATE GENERATOR "CodPais";
SET GENERATOR "CodPais" TO 10;

SET TERM ^;
CREATE TRIGGER "NewPais" FOR "Paises"
ACTIVE BEFORE INSERT
AS BEGIN
IF(NEW."IdPais" IS NULL) THEN NEW."IdPais" = GEN_ID("CodPais",1);
END ^
SET TERM ;^


/* Original table name is "Provincias" */
CREATE TABLE "Provincias" (
"IdProvincia" INTEGER NOT NULL PRIMARY KEY,
"RefPais" INTEGER not null,
"Provincia" VARCHAR(30),
FOREIGN KEY ("RefPais") REFERENCES "Paises" ("IdPais")
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
CREATE GENERATOR "CodProvincia";
SET GENERATOR "CodProvincia" TO 10;
SET TERM ^;
CREATE TRIGGER "NewProvincia" FOR "Provincias"
ACTIVE BEFORE INSERT
AS BEGIN
IF(NEW."IdProvincia" IS NULL) THEN NEW."IdProvincia" = GEN_ID("CodProvincia",1);
END ^
SET TERM ;^

/* Original table name is "Ciudad" */
CREATE TABLE "Ciudad" (
"IdCiudad" INTEGER NOT NULL PRIMARY KEY,
"RefProvincia" INTEGER not null,
"CodPostal" VARCHAR( 8 ) ,
"Ciudad" VARCHAR(40),
FOREIGN KEY ("RefProvincia") REFERENCES "Provincias" ("IdProvincia")
ON DELETE NO ACTION
ON UPDATE NO ACTION
);

CREATE GENERATOR "CodCiudad";
SET GENERATOR "CodCiudad" TO 10;

SET TERM ^;
CREATE TRIGGER "NewCiudad" FOR "Ciudad"
ACTIVE BEFORE INSERT
AS BEGIN
IF(NEW."IdCiudad" IS NULL) THEN NEW."IdCiudad" = GEN_ID("CodCiudad",1);
END ^
SET TERM ;^


/* Original table name is "Clientes" */
CREATE TABLE "Clientes" (
"IdCliente" INTEGER NOT NULL PRIMARY KEY ,
"RefCiudad" INTEGER not null,
"Empresa" VARCHAR(40) ,
"Apellido" VARCHAR(20) ,
"Nombre" VARCHAR(30) ,
"Cargo" VARCHAR(30) ,
"Direccion" VARCHAR(60) ,
"Telefono" VARCHAR(24) ,
"Fax" VARCHAR(24) ,
"Observacion" VARCHAR(254),
FOREIGN KEY ("RefCiudad") REFERENCES "Ciudad" ("IdCiudad")
ON DELETE NO ACTION
ON UPDATE NO ACTION
);


CREATE GENERATOR "CodCliente";
SET GENERATOR "CodCliente" TO 10;
SET TERM ^;
CREATE TRIGGER "NewCliente" FOR "Clientes" BEFORE INSERT
AS BEGIN
IF(NEW."IdCliente" IS NULL) THEN NEW."IdCliente" = GEN_ID("CodCliente",1);
END ^
SET TERM ;^


Lo he probado y funciona correctamente.

Saludos!
_________________
Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: gracias Responder citando

gracias amigos, lo modifique y ya esta me han guiado perfectamente. Very Happy
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.