FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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 |
#2
|
||||
|
||||
Hola José Luís.
Cita:
Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#3
|
||||
|
||||
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. |
#4
|
||||
|
||||
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 - |
#5
|
||||
|
||||
Hay varias formas, por ejemplo, con gbak, con isql y creo recordar que también con algunos componentes.
|
#6
|
||||
|
||||
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" |
#7
|
||||
|
||||
Mañana te lo miro, porque tengo un ejemplo hecho...
Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#8
|
||||
|
||||
Muchas gracias javi, quedo a la espera.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta" |
#9
|
||||
|
||||
Ahí lo tienes, José Luis.
En este caso hay que utilizar los componentes MDO. Creo que vienen con Delphi, aunqe que no estoy seguro.
Y devuelve esto ( es un extracto de todo )
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 - |
#10
|
||||
|
||||
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" |
#11
|
||||
|
||||
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 - |
#12
|
||||
|
||||
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:
Última edición por marcoszorrilla fecha: 22-07-2012 a las 22:22:23. |
#13
|
||||
|
||||
Cita:
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 - |
#14
|
||||
|
||||
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 ; ^
__________________
Guía de Estilo de los Foros Cita:
|
#15
|
||||
|
||||
Muchas gracias a todos, ahora estoy valorando las diversas opciones.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta" |
|
|
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 |
|