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 Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-07-2012
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 22
José Luis Garcí Va camino a la fama
Estructura de la base de datos

Hola compañeros, estoy en el proceso de terminar el programa de la empresa (la cual sigue a la venta) y se me plantea una duda, y os pregunto si podéis ayudarme a encarrilarla.

El tema es el siguiente, el programa hará cierres de año, (por el usuario) donde debería crear la estructura de la base de datos, sin datos y luego pasar los datos de años interiores, quedando la base de datos general con los datos básicos (clientes, productos, etc, inclusive lotes y demás) y la nueva con los datos de los años anteriores, más los básicos, pero ademas dar la opción, de los lotes con más de 3 años y que su estocaje sea 0 eliminarlos en la original también.

Se que podría hacer una copia de la base de datos y luego eliminar en la original los datos antiguos (esta es mi otra opción), pero seria interesante obtener desde una unit la base de datos, tablas, generadores, indices, etc, como mantenimiento e inclusive para la instalación del programa en otra empresa (instalación nueva).

Otra opción que he barajado es hacer una copia de la base de datos y borrar tabla por tabla todos los datos, con lo que tendría una bd limpia sin datos y por lo tanto de poco tamaño, se puede vaciar todas la tablas por sql?

Pues eso compañeros si podéis ayudarme e indicarme si es posible obtener la estructura de la base de datos, como hacerlo y luego usarlo desde una unit, o que método me aconsejáis si no.

Como siempre gracias por vuestra ayuda.

Hecho delphi 2010 y Firebird
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"

Última edición por José Luis Garcí fecha: 21-07-2012 a las 09:57:48. Razón: Datos de interés que faltaban
Responder Con Cita
  #2  
Antiguo 21-07-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola José Luís.

Cita:
se puede vaciar todas la tablas por sql?
Proba de este modo:
Código Delphi [-]
procedure TForm1.btnBorrarTablasClick(Sender: TObject);
var
  i: Integer;
  TS: TStrings;
begin
  TS:= TStringList.Create;
  try
    with IBQuery1 do
    begin
      SQL.Clear;
      SQL.Add('SELECT RDB$RELATION_NAME AS TBLNAME ');
      SQL.Add('FROM RDB$RELATIONS ');
      SQL.Add('WHERE RDB$VIEW_BLR IS NULL ');
      SQL.Add('AND (RDB$SYSTEM_FLAG IS NULL OR RDB$SYSTEM_FLAG = 0)');
      Open;
      while not Eof do
      begin
        TS.Add(FieldByName('TBLNAME').AsString);
        Next;
      end;
      for i:= 0 to TS.Count -1 do
      begin
        Close;
        SQL.Text:= 'DELETE FROM ' + TS[i];
        ExecSQL;
      end;
    end;
  finally
    TS.Free;
  end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 21-07-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Aunque para borrar todo, yo prefiero crear una base de datos nueva. En realidad, siempre mantengo una 'plantilla' (una copia de la BD vacía), que la uso para crear empresas nuevas, solamente es necesario copiar 'plantilla.fdb' al nuevo nombre, ejemplo: 'datos2012.fdb' y al año siguiente se copia a 'datos2012.fdb', etc.
Naturalmente, que 'plantilla.fdb' hay que tenerla actualizada cuando se hagan cambios en la estructura de la BD.
Responder Con Cita
  #4  
Antiguo 21-07-2012
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.409
Poder: 22
fjcg02 Va camino a la fama
Otra opción es extraer los metadatos.
Generar una nueva bbdd vacía y con ellos generar todas las tablas, triggers, SP, ...
Luego, llenar las tablas que quieras.

Para mí es la forma más limpia de hacerlo.

Ahora no sé exactamente cómo se puede obtener, pero te aseguro que hay componentes que pueden extraerte esa información.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #5  
Antiguo 21-07-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por fjcg02 Ver Mensaje
Ahora no sé exactamente cómo se puede obtener, pero te aseguro que hay componentes que pueden extraerte esa información.
Hay varias formas, por ejemplo, con gbak, con isql y creo recordar que también con algunos componentes.
Responder Con Cita
  #6  
Antiguo 21-07-2012
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 22
José Luis Garcí Va camino a la fama
Gracias por vuestra ayuda, como siempre, seguiré indagando a ver como puedo hacerlo, pero tomo nota de vuestros comentarios.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #7  
Antiguo 21-07-2012
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.409
Poder: 22
fjcg02 Va camino a la fama
Mañana te lo miro, porque tengo un ejemplo hecho...
Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #8  
Antiguo 22-07-2012
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 22
José Luis Garcí Va camino a la fama
Muchas gracias javi, quedo a la espera.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #9  
Antiguo 22-07-2012
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.409
Poder: 22
fjcg02 Va camino a la fama
Ahí lo tienes, José Luis.

En este caso hay que utilizar los componentes MDO. Creo que vienen con Delphi, aunqe que no estoy seguro.


Código Delphi [-]
procedure TFormPresupuestos.ToolButton3Click(Sender: TObject);
var  Frm : TForm; MM : TMemo;
begin
  MDOExtract1.ExtractObject(eoDatabase);
     Frm := TForm.Create(nil);
     try
       Frm.Width := 400;
       Frm.Height := 500;
       Frm.Top := Mouse.CursorPos.Y;
       Frm.Left := Mouse.CursorPos.X-400;
       Frm.BorderStyle := bsToolWindow;
       Frm.Caption := 'DAtos de la BBDD';
       MM := TMemo.Create(nil);
       try
         MM.Parent := Frm;
         MM.Align := alClient;
         MM.WantReturns:= False;
         MM.ScrollBars:= ssBoth;
         MM.Lines:= MDOExtract1.Items;
         Frm.ShowModal;
       finally
         MM.Free;
       end;
     finally
       Frm.Free;
     end;

end;

Y devuelve esto ( es un extracto de todo )

Código SQL [-]
SET SQL DIALECT 3;

/* CREATE DATABASE 'SERVIDOR:C:\J\delphi\Firebird 1.5 y 2.0\Datos\BASOAPRES.FDB' PAGE_SIZE 1024

 DEFAULT CHARACTER SET ISO8859_1 */

/*  External Function declarations */

DECLARE EXTERNAL FUNCTION RDB$GET_CONTEXT
VARCHAR(80) CHARACTER SET NONE, VARCHAR(80) CHARACTER SET NONE
RETURNS VARCHAR(255) CHARACTER SET NONE FREE_IT
ENTRY_POINT 'get_context' MODULE_NAME 'system_module';


DECLARE EXTERNAL FUNCTION RDB$SET_CONTEXT
VARCHAR(80) CHARACTER SET NONE, VARCHAR(80) CHARACTER SET NONE, VARCHAR(255) CHARACTER SET NONE
RETURNS INTEGER BY VALUE 
ENTRY_POINT 'set_context' MODULE_NAME 'system_module';


/* Domain definitions */
CREATE DOMAIN SINO AS CHAR(1) CHARACTER SET ISO8859_1
   DEFAULT 'N'
   CHECK ((VALUE IS NULL) OR (VALUE IN ('N','S'))) NOT NULL;

/* Table: B_LINEAPRESUPUESTO, Owner: SYSDBA */

CREATE TABLE "B_LINEAPRESUPUESTO" 
(
  "IDLINEAPRES"  INTEGER NOT NULL,
  "IDPRESUPUESTO"  INTEGER NOT NULL,
  "CABECERA"  "SINO",
  "IMPRIMIR"  "SINO",
  "LINEA"  INTEGER NOT NULL,
  "PARTIDA"  VARCHAR(15) CHARACTER SET ISO8859_1 NOT NULL,
  "TIPO"  CHAR(1) CHARACTER SET ISO8859_1 NOT NULL,
  "IDTARIFA"  INTEGER,
  "IDMUEBLE"  INTEGER,
  "DESCRIPCION"  VARCHAR(200) CHARACTER SET ISO8859_1,
  "CANTIDAD"  NUMERIC(5, 2) NOT NULL,
  "UNIDADES"  VARCHAR(5) CHARACTER SET ISO8859_1 NOT NULL,
  "PRECIO"  NUMERIC(15, 2) NOT NULL,
  "PVP"  NUMERIC(15, 2) NOT NULL,
  "DESCUENTO"  INTEGER NOT NULL,
  "COSTE"  NUMERIC(15, 2) NOT NULL,
  "RENTABILIDAD"  INTEGER,
CONSTRAINT "FK_B_LINEAPRESUPUESTO" PRIMARY KEY ("IDLINEAPRES")
);
...
/* Stored procedures */

CREATE PROCEDURE "PRES_DUPLICAR" 
(
  SERIE VARCHAR(3) CHARACTER SET ISO8859_1,
  NUMERO INTEGER,
  IDPRESUPUESTO_ORIGINAL INTEGER,
  TIPO VARCHAR(15) CHARACTER SET ISO8859_1
)
AS
BEGIN EXIT; END ^

CREATE PROCEDURE "PRES_NUMERO" 
(
  SERIE CHAR(3) CHARACTER SET ISO8859_1
)
RETURNS
(
  NUMERO INTEGER
)
AS
BEGIN EXIT; END ^

TRIGGERS...
ETC

Espero que te valga. Estoy casi seguro de que con dbexpress también se puede.Creo además ( esto lo vi en un post de ClubDelphi ) que con MDO se pueden extraer las sentencias insert de las tablas que indiques.

Un saludo y suerte.
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #10  
Antiguo 22-07-2012
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 22
José Luis Garcí Va camino a la fama
Muchas gracias Javi, mañana lo pruebo en la empresa. También probare con el ibExpert como me ha dicho Marc en DelphiAcces
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #11  
Antiguo 22-07-2012
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.409
Poder: 22
fjcg02 Va camino a la fama
Exactamente, el ibexpert, incluso en la versión personal, también te genera los metadatos.

Estaba ahora comprobando si los ibobjects y dbexpress lo hacen, pero tengo que abandonar la tarea que me voy a dar una vuelta a la calle que ya es hora...


Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #12  
Antiguo 22-07-2012
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Acabo de comprobar que la versión "Personal" de IbExpert tiene una opción de extraer Metadatos, marcando la opción todo te extrae el guión completo de creación de la BD, Tablas, índices, Disparadores, Generadores...

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.

Última edición por marcoszorrilla fecha: 22-07-2012 a las 22:22:23.
Responder Con Cita
  #13  
Antiguo 22-07-2012
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.409
Poder: 22
fjcg02 Va camino a la fama
Cita:
Empezado por marcoszorrilla Ver Mensaje
Acabo de comprobar que la versión "Personal" de IbExpert tiene una opción de extraer Metadatos, marcando la opción todo te extrae el guión completo de creación de la BD, Tablas, índices, Disparadores, Generadores...
Si activas en el ibexpert la opción de SQL Monitor y ejecutas "Extract Metadata" ves todas las sentencias que utiliza para generarlo. De ahí tendrías que hacer un poco de ingeniería para conseguir montar el "DDL".

Por eso me inclino mejor por una herramienta que te lo extraiga.

Entiendo que el usuario tendría una opción en las opciones de administración en la que indique que quiera crear un nuevo año o una nueva empresa encapsulando todo el proceso para que le resulte más fácil y cómodo.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #14  
Antiguo 22-07-2012
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Opción Tools - Extract Metadata All.

Le he señalado que me lo pase al portapapeles, lo copio y lo pego en el Bloc de Notas, pero también tengo la opción de mandarlo directamente a un fichero.

Código:
/******************************************************************************/
/*            Generated by IBExpert 2012.05.10 22/07/2012 22:19:06            */
/******************************************************************************/

SET SQL DIALECT 3;

SET NAMES ISO8859_1;

CREATE DATABASE 'Localhost:C:\Delphi7\Programasfb\RosaPilates\BDLATES.FDB'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 16384
DEFAULT CHARACTER SET ISO8859_1 COLLATION ISO8859_1;



/******************************************************************************/
/*                                  Domains                                   */
/******************************************************************************/

CREATE DOMAIN DM_BOOLEAN AS
CHAR(1)
Default 'N'
NOT NULL
Check (Value IN ('S','N'));

CREATE DOMAIN DM_EURO AS
NUMERIC(12,2)
Default 0;

CREATE DOMAIN DM_FOTO AS
BLOB SUB_TYPE 0 SEGMENT SIZE 100;

CREATE DOMAIN DM_MEMO AS
BLOB SUB_TYPE 1 SEGMENT SIZE 80;

CREATE DOMAIN DM_PORCIENTOS AS
NUMERIC(4,2)
Default 0;

CREATE DOMAIN DM_SEXO AS
CHAR(1)
Default 'M'
NOT NULL
Check (Value In ('M','F'));



/******************************************************************************/
/*                                 Generators                                 */
/******************************************************************************/

CREATE GENERATOR GN_ID_COMPRAS;
SET GENERATOR GN_ID_COMPRAS TO 1;

CREATE GENERATOR GN_ID_LINREMESASRECIBOS;
SET GENERATOR GN_ID_LINREMESASRECIBOS TO 0;



/******************************************************************************/
/*                                   Tables                                   */
/******************************************************************************/



CREATE TABLE AGENDA (
    NOMBRE         VARCHAR(50) NOT NULL,
    EMPRESA        VARCHAR(50),
    TELEFONO       VARCHAR(30),
    TELEFONO2      VARCHAR(30),
    MOVIL          VARCHAR(30),
    CORREO         VARCHAR(50),
    OBSERVACIONES  BLOB SUB_TYPE 1 SEGMENT SIZE 80
);


CREATE TABLE ALUMNOS (
    CODIGO             VARCHAR(4) NOT NULL,
    NOMBRE             VARCHAR(15) NOT NULL,
    APELLIDOS          VARCHAR(40),
    DNI                VARCHAR(10),
    CALLE              VARCHAR(40),
    CP                 VARCHAR(5),
    POBLACION          VARCHAR(40),
    FNACIMIENTO        DATE,
    SEXO               DM_SEXO,
    FALTA              DATE,
    TELEFONO           VARCHAR(15),
    MOVIL              VARCHAR(15),
    CELECTRONICO       VARCHAR(30),
    RECIBOMES          DM_BOOLEAN,
    RECIBOIMPORTE      DM_EURO,
    RECIBOFPAGO        VARCHAR(10),
    BAJA               DM_BOOLEAN,
    BAJAFECHA          DATE,
    BAJAMOTIVO         VARCHAR(30),
    BANCOENTIDAD       VARCHAR(40),
    BANCOCODIGO        VARCHAR(4),
    BANCOSUCURSAL      VARCHAR(4),
    BANCODC            VARCHAR(2),
    BANCOCUENTA        VARCHAR(10),
    GRUPO              VARCHAR(2),
    PCOMOSUPISTE       VARCHAR(15),
    PCOMOSUPISTETEXTO  VARCHAR(70),
    PLESION            DM_BOOLEAN,
    PLESIONTEXTO       VARCHAR(70),
    PTRATAMIENTO       DM_BOOLEAN,
    PTRATAMIENTOTEXTO  VARCHAR(70),
    PDEPORTE           DM_BOOLEAN,
    PDEPORTETEXTO      VARCHAR(70),
    PPILATESANTES      DM_BOOLEAN,
    PILATESANTESTEXTO  VARCHAR(70),
    PMETAS             DM_BOOLEAN,
    PMETASTEXTO        VARCHAR(70),
    PPROFESION         VARCHAR(70),
    OBSERVACIONES      DM_MEMO,
    FOTO               DM_FOTO,
    IMEDICO            DM_MEMO
);


CREATE TABLE CALENDARIO (
    FECHA  DATE NOT NULL
);


CREATE TABLE CALLES (
    CALLE   VARCHAR(50) NOT NULL,
    CODIGO  VARCHAR(5) NOT NULL
);


CREATE TABLE COMPRAS (
    ID            INTEGER NOT NULL,
    CODPROVEEDOR  VARCHAR(3) NOT NULL,
    NUMERO        VARCHAR(15),
    FECHA         DATE,
    VENCIMIENTO   DATE,
    PAGADA        DM_BOOLEAN,
    CONCEPTO      VARCHAR(3) NOT NULL,
    T1            VARCHAR(80),
    T2            VARCHAR(80),
    BASE          DM_EURO,
    TIVA          DM_EURO,
    IVA           DM_EURO,
    TOTAL         DM_EURO
);


CREATE TABLE CONFIGURA (
    EJERCICIO      VARCHAR(2) NOT NULL,
    FACTURA        INTEGER,
    RECIBO         INTEGER,
    TXTRECIBO      VARCHAR(80),
    RECIBOCON      INTEGER,
    IVA1           DM_EURO,
    IVA2           DM_EURO,
    EMPRESA        VARCHAR(35),
    CALLE          VARCHAR(35),
    POBLACION      VARCHAR(35),
    NIF            VARCHAR(35),
    BANCOENTIDAD   VARCHAR(40),
    BANCOCODIGO    VARCHAR(4),
    BANCOSUCURSAL  VARCHAR(4),
    BANCODC        VARCHAR(2),
    BANCOCUENTA    VARCHAR(10),
    DIRQ19         VARCHAR(40),
    DIRCONTA       VARCHAR(40)
);


CREATE TABLE ESPACIOS (
    CODIGO       VARCHAR(2) NOT NULL,
    DESCRIPCION  VARCHAR(15) NOT NULL
);


CREATE TABLE GRUPOS (
    CODIGO  VARCHAR(2) NOT NULL,
    GRUPO   VARCHAR(15) NOT NULL
);


CREATE TABLE GRUPOSGASTOS (
    CODIGO    VARCHAR(3) NOT NULL,
    CONCEPTO  VARCHAR(20) NOT NULL
);


CREATE TABLE HORARIOS (
    HORA  VARCHAR(5) NOT NULL
);


CREATE TABLE LINREMESASRECIBOS (
    ID         BIGINT NOT NULL,
    REMESA     VARCHAR(6),
    CODCLIENT  VARCHAR(7),
    NOMBRE     VARCHAR(40),
    BUSCAR     VARCHAR(20),
    CUENTA     VARCHAR(20),
    TEXTO      VARCHAR(40),
    TEXTO1     VARCHAR(40),
    TEXTO2     VARCHAR(40),
    TEXTO3     VARCHAR(40),
    TOTAL      DM_EURO
);


CREATE TABLE OCUPACION (
    FECHA     DATE NOT NULL,
    HORA      VARCHAR(5) NOT NULL,
    ESPACIO   VARCHAR(2) NOT NULL,
    GRUPO     VARCHAR(2) NOT NULL,
    PROFESOR  VARCHAR(2)
);


CREATE TABLE PROFESORES (
    CODIGO         VARCHAR(2) NOT NULL,
    NOMBRE         VARCHAR(30) NOT NULL,
    TELEFONO       VARCHAR(30),
    OBSERVACIONES  VARCHAR(50)
);


CREATE TABLE PROVEEDORES (
    CODIGO     VARCHAR(3) NOT NULL,
    NOMBRE     VARCHAR(40) NOT NULL,
    NIF        VARCHAR(12),
    PCONTACTO  VARCHAR(40),
    TELEFONO1  VARCHAR(40),
    TELEFONO2  VARCHAR(40),
    CORREOE    VARCHAR(40),
    PWEB       VARCHAR(40),
    OBSERVA    DM_MEMO
);


CREATE TABLE RECIBOS (
    NUMERO        VARCHAR(6) NOT NULL,
    FECHA         DATE NOT NULL,
    FPAGO         VARCHAR(10),
    CODALUMNO     VARCHAR(4),
    COBRADO       DM_BOOLEAN,
    T1            VARCHAR(80),
    T2            VARCHAR(80),
    T3            VARCHAR(80),
    IVA1          DM_EURO,
    IVA2          DM_EURO,
    IVA3          DM_EURO,
    N1            DM_EURO,
    N2            DM_EURO,
    N3            DM_EURO,
    BASE          DM_EURO,
    TIVA          DM_EURO,
    IVA           DM_EURO,
    NOSUJETO      DM_EURO,
    TOTAL         DM_EURO,
    CONTA         DM_BOOLEAN,
    CONTABILIZAR  DM_BOOLEAN
);


CREATE TABLE RECIBOSCONTA (
    NUMCON     VARCHAR(7) NOT NULL,
    NUMERO     VARCHAR(6) NOT NULL,
    FECHA      DATE NOT NULL,
    FPAGO      VARCHAR(10),
    CODALUMNO  VARCHAR(4),
    COBRADO    DM_BOOLEAN,
    T1         VARCHAR(80),
    T2         VARCHAR(80),
    T3         VARCHAR(80),
    IVA1       DM_EURO,
    IVA2       DM_EURO,
    IVA3       DM_EURO,
    N1         DM_EURO,
    N2         DM_EURO,
    N3         DM_EURO,
    BASE       DM_EURO,
    TIVA       DM_EURO,
    IVA        DM_EURO,
    NOSUJETO   DM_EURO,
    TOTAL      DM_EURO,
    CONTA      DM_BOOLEAN
);


CREATE TABLE REMESASRECIBOS (
    REMESA         VARCHAR(6) NOT NULL,
    FSOPORTE       DATE,
    FADEUDO        DATE,
    RECIBOSCASYC   INTEGER,
    RECIBOSTOTAL   INTEGER,
    IMPORTEREMESA  DM_EURO,
    OBSERVACIONES  VARCHAR(100),
    FECHA          DATE,
    HORA           TIME,
    USUARIO        VARCHAR(15)
);


CREATE TABLE TMPRECIBOS (
    NFACTURA   VARCHAR(9) NOT NULL,
    CODCLIENT  VARCHAR(7) NOT NULL,
    TOTAL      DM_EURO
);


CREATE TABLE USUARIOS (
    CODIGO   VARCHAR(2) NOT NULL,
    USUARIO  VARCHAR(15) NOT NULL,
    CLAVE    VARCHAR(10),
    NIVEL    VARCHAR(1)
);




/******************************************************************************/
/*                                Primary Keys                                */
/******************************************************************************/

ALTER TABLE AGENDA ADD CONSTRAINT PK_AGENDA_NOMBRE PRIMARY KEY (NOMBRE);
ALTER TABLE ALUMNOS ADD CONSTRAINT PK_ALUMNOS PRIMARY KEY (CODIGO);
ALTER TABLE CALENDARIO ADD CONSTRAINT PK_CALENDARIO PRIMARY KEY (FECHA);
ALTER TABLE CALLES ADD CONSTRAINT PK_CALLE PRIMARY KEY (CALLE);
ALTER TABLE COMPRAS ADD CONSTRAINT PK_COMPRAS PRIMARY KEY (ID);
ALTER TABLE CONFIGURA ADD CONSTRAINT PK_CONFIGURA PRIMARY KEY (EJERCICIO);
ALTER TABLE ESPACIOS ADD CONSTRAINT PK_ESPACIOS PRIMARY KEY (CODIGO);
ALTER TABLE GRUPOS ADD CONSTRAINT PK_GRUPOS PRIMARY KEY (CODIGO);
ALTER TABLE GRUPOSGASTOS ADD CONSTRAINT PK_GRUPOSGASTOS PRIMARY KEY (CODIGO);
ALTER TABLE HORARIOS ADD CONSTRAINT PK_HORARIOS PRIMARY KEY (HORA);
ALTER TABLE LINREMESASRECIBOS ADD CONSTRAINT PK_LINREMESAS_ID PRIMARY KEY (ID);
ALTER TABLE OCUPACION ADD CONSTRAINT PK_OCUPACION PRIMARY KEY (FECHA, HORA, ESPACIO);
ALTER TABLE PROFESORES ADD CONSTRAINT PK_PROFESORES PRIMARY KEY (CODIGO);
ALTER TABLE PROVEEDORES ADD CONSTRAINT PK_PROVEEDORES_CODIGO PRIMARY KEY (CODIGO);
ALTER TABLE RECIBOS ADD CONSTRAINT PK_RECIBOS PRIMARY KEY (NUMERO);
ALTER TABLE RECIBOSCONTA ADD CONSTRAINT PK_RECIBOSCONTA PRIMARY KEY (NUMCON);
ALTER TABLE REMESASRECIBOS ADD CONSTRAINT PK_REMESASRECIBOS_REMESA PRIMARY KEY (REMESA);
ALTER TABLE TMPRECIBOS ADD CONSTRAINT PK_TMPRECIBOS_NFACTURA PRIMARY KEY (NFACTURA);
ALTER TABLE USUARIOS ADD CONSTRAINT PK_USUARIOS PRIMARY KEY (CODIGO);


/******************************************************************************/
/*                                Foreign Keys                                */
/******************************************************************************/

ALTER TABLE LINREMESASRECIBOS ADD FOREIGN KEY (REMESA) REFERENCES REMESASRECIBOS (REMESA);


/******************************************************************************/
/*                                  Indices                                   */
/******************************************************************************/

CREATE INDEX ALUMNOS_APE_NOM ON ALUMNOS (APELLIDOS, NOMBRE);
CREATE UNIQUE INDEX ALUMNOS_DNI ON ALUMNOS (DNI);
CREATE UNIQUE INDEX ESPACIOS_IDX1 ON ESPACIOS (DESCRIPCION);
CREATE UNIQUE INDEX GRUPOS_IDX1 ON GRUPOS (GRUPO);
CREATE UNIQUE INDEX GRUPOSGASTOS_IDX1 ON GRUPOSGASTOS (CONCEPTO);
CREATE INDEX ID_LINREMESAS_REMESA ON LINREMESASRECIBOS (REMESA);
CREATE UNIQUE INDEX PROFESORES_IDX1 ON PROFESORES (NOMBRE);
CREATE UNIQUE INDEX ID_PROVEEDORES_NOMBRE ON PROVEEDORES (NOMBRE);
CREATE INDEX RECIBOS_IDX1 ON RECIBOS (FECHA);
CREATE INDEX RECIBOS_IDX2 ON RECIBOS (CODALUMNO);
CREATE INDEX RECIBOSCONTA_IDX1 ON RECIBOSCONTA (NUMERO);
CREATE INDEX RECIBOSCONTA_IDX2 ON RECIBOSCONTA (FECHA);
CREATE UNIQUE INDEX USUARIOS_IDX1 ON USUARIOS (USUARIO);


/******************************************************************************/
/*                                  Triggers                                  */
/******************************************************************************/


SET TERM ^ ;



/******************************************************************************/
/*                            Triggers for tables                             */
/******************************************************************************/



/* Trigger: COMPRAS_BI */
CREATE TRIGGER COMPRAS_BI FOR COMPRAS
ACTIVE BEFORE INSERT POSITION 0
As
Begin
If (New.ID Is Null)
 then New.ID=Gen_ID(GN_ID_Compras, 1);
end
^


/* Trigger: LINREMESASRECIBOS_BI */
CREATE TRIGGER LINREMESASRECIBOS_BI FOR LINREMESASRECIBOS
ACTIVE BEFORE INSERT POSITION 0
As
Begin
If (New.ID Is Null)
 then New.ID=Gen_ID(GN_ID_LinRemesasRecibos, 1);
end
^


SET TERM ; ^
Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #15  
Antiguo 23-07-2012
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 22
José Luis Garcí Va camino a la fama
Muchas gracias a todos, ahora estoy valorando las diversas opciones.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Actualizar estructura de base de datos sin perder datos ManuelPerez Firebird e Interbase 8 20-10-2010 02:41:19
estructura de aplicación/base de datos Galahad Firebird e Interbase 5 08-08-2008 10:07:10
Estructura Base de Datos mjjj Firebird e Interbase 6 22-10-2007 12:16:39
Actualizar estructura de la Base de Datos Durbed Firebird e Interbase 11 02-10-2006 17:31:34
Copiar estructura de una base de datos a una nueva en Delphi?? burasu Conexión con bases de datos 0 30-12-2004 09:35:51


La franja horaria es GMT +2. Ahora son las 09:20:38.


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