PDA

Ver la Versión Completa : Estructura de la base de datos


José Luis Garcí
21-07-2012, 09:56:36
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.

se puede vaciar todas la tablas por sql?

Proba de este modo:

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


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 )


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

/******************************************************************************/
/* 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.