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)
-   -   Estructura de la base de datos (https://www.clubdelphi.com/foros/showthread.php?t=79608)

José Luis Garcí 21-07-2012 09:56:36

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

ecfisa 21-07-2012 11:25:42

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.

Casimiro Notevi 21-07-2012 12:13:55

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.

fjcg02 21-07-2012 15:07:15

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

Casimiro Notevi 21-07-2012 16:40:54

Cita:

Empezado por fjcg02 (Mensaje 437884)
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.

José Luis Garcí 21-07-2012 18:43:57

Gracias por vuestra ayuda, como siempre, seguiré indagando a ver como puedo hacerlo, pero tomo nota de vuestros comentarios.

fjcg02 21-07-2012 23:26:41

Mañana te lo miro, porque tengo un ejemplo hecho...
Saludos

José Luis Garcí 22-07-2012 00:47:11

Muchas gracias javi, quedo a la espera.

fjcg02 22-07-2012 11:40:02

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.

José Luis Garcí 22-07-2012 11:54:03

Muchas gracias Javi, mañana lo pruebo en la empresa. También probare con el ibExpert como me ha dicho Marc en DelphiAcces

fjcg02 22-07-2012 11:59:04

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... :D


Saludos

marcoszorrilla 22-07-2012 21:56:07

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.

fjcg02 22-07-2012 22:31:30

Cita:

Empezado por marcoszorrilla (Mensaje 437928)
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

marcoszorrilla 22-07-2012 22:43:04

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.

José Luis Garcí 23-07-2012 17:22:31

Muchas gracias a todos, ahora estoy valorando las diversas opciones.


La franja horaria es GMT +2. Ahora son las 10:24:42.

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