Jump to content


Photo

Ayuda con proyecto


  • Please log in to reply
18 replies to this topic

#1 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 posts
  • LocationEn un solo Lugar

Posted 21 October 2011 - 03:42 PM

Hola amigos en esta vez necesito que me expliquen como hacer un programa que maneja base de datos con relacciones.
mi dudas son: como hago los form de cada tabla en delphi, las consulta en form en delphi de las tablas relacionadas y
por ejemplo:
si tengo una base de datos  "farmacia", con varias tablas que son:

Medicamentos
cliente
Seguro_Medicos
facturación
Almacen

Table Medicamentos:
id int, primary key not null,
nombre varchar(30),
cantidad int,
precio_unit int,
lugar varchar(30),


Table clientes:
id int primarry key not null,
nombre Varchar(30),
apellido varchar(30)


TABLE FACTURACION
ID Int primary key not null,
descripción varchar(30), // Relacionado con Medicamento con el campo Nombre,
cantidad int, Relacionado con Medicamento con el campo cantidad,
precio_unit int, Relacionado con Medicamento con el campo precio_unit
precio money,
Cliente Vachar(30)
Relacionado con la tabla Cliente con el campo ID
Nombre Varchar(30), Relacionado con la tabla Cliente con el campo ID
[/sql]
La relaccionones son:
Facturacion 1:M Cliente
Medicamentos 1:M Facturacion

espero haber explicado bien
  • 0

#2 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4483 posts
  • LocationVenezuela

Posted 22 October 2011 - 02:12 PM

Si te has explicado bien, pero te faltan muchos detalles
Que base de datos, que componentes utilizas y que has adelantado???
  • 0

#3 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1092 posts
  • LocationMurcia, España

Posted 23 October 2011 - 05:24 AM

Me parece demasiado generica esa pregunta para ponerla aqui.

Leete uno o dos libros al respecto, tipo la cara oculta de delphi, y cuando sepas cual es la manera de hacerlo, pues preguntas ya cosas concretas.

Y perdon si sueno rudo, pero en fin, yo primero me preocupo de leer sobre lo que me interesa, y si me quedan dudas, las planteo, pero hacerlo al reves me parecería un poco gandul por mi parte.
  • 0

#4 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 posts
  • LocationArgentina, Tucuman

Posted 23 October 2011 - 05:29 AM

A este proyecto, lo puede hacer de mil forma y podría llegar a decir que el resultado final seria casi muy parecido, no así su mantenimiento (agregar nuevas funciones al sistema).

Sobre como hacer el form, según el esfuerzo que quieras aplicar.

Minimo esfuerzo (mental), escribís más código, pero utilizando menos metodologias por ende menos temas nuevos que aprender:
Usa una base de datos de Access (aunque últimamente SQLLite tiene casi la misma ventaja), usando access, te olvidaras de instalar un motor y servidor de base de datos, solo tienes que instalar Access, abrir el access y crear las tablas, es muy intuitivo, te ayudara mucho con las relaciones, puedes fijarte en el tutorial de caral de una pagina amiga http://www.clubdelph...hlight=tutorial

En ese ejemplo usa una sola ventana, en tu caso tendrás un ventana principal con un menu (con opciones para las distintas ventas, clientes, facturación, etc...) y desde ahí irias  a las distintas ventanas.
Programa primero como hacer para que desde la ventana principal se abra la ventana secundaria
Supongamos que tu ventana principal se llama :FPrincipal y tu venta secundaria se llama FClientes.

En el evento del onclick del menu (que dice clientes) agrega el siguiente codigo.



delphi
  1. procedure TFPrincipal.menuclienteOnClick(Sender : TObject);
  2. var
  3.   FCliente : TFCliente;
  4. begin
  5.   try
  6.         FCliente:= TFCliente.create(self);
  7.         FCliente.showmodal;
  8.   finally
  9.         FCliente.Free;
  10. end;



Lo mismo para cada ventana.

Luego en la ventana clientes, tiras un TDataSource (pestaña DataAccess), TDBGrid, TDBNavigator (pestaña data control).

relacionas los 3, puedes lleer en la cara oculta de delphi 4, sobre como hacerlo.

Repetir para cada ventana.

Otros metodos más complicados pero que se ven su fruto luego.
Usar una base de datos robusta, la gente acá mayormente te recomienda Firebird, pero yo te recomiendo PostgresSql.
Luego crear una estructura de clases, para llenar datos de un dataset y utilizar herencia visual.



Nota: Tienes mal el modelo de base de datos.
Facturación, no lleva información de los medicamento.
Facturación lleva información de :
IDFactura, Fecha, hora, Neto, Iva, TipoFactura (a, b, c), Numero, categoria (FC, NC, ND, DI), PorcenDescuento, Descuento, DescuentoIva, Interes, InteresIva, IdCliente.

Luego una tabla intermedia te relaciona la factura con los medicamentos.

Por ejemplo si tienes los siguiente medicamentos
Codigo Descripcion Precioventa
1,  Pastilla,      0.10
2,  Jeringa,      2

Luego tienes una factura con los siguiente datos
Id  Fecha,  hora,  Neto,      Iva,    TipoFactura, Numero, Categoria, ....., IDCliente
25    -          -        16.61    3,49      B                5            FC                ,    2

Neto + iva = 20.10

La tablaintermedia

LineasFacturación.
ID        IDmedicamentos    Cantidad IdFactura
7              2                            10        25
7              1                              1          25

Por ende lleva 10 jeringa y una curita da 20.1

Bueno, espero que no abandone y te recomiendo que no te desaliente, NADIE NACE SABIENDO, todos empezamos alguna vez sin saber que hacer, te recomiendo la lectura de "la cara oculta de delphi 4.0"es prácticamente obligatoria el autor dono su libro, lo puedes encontrar por todos lados.

También, te recomiendo que leas las normas del foro.










  • 0

#5 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 posts
  • LocationEn un solo Lugar

Posted 23 October 2011 - 08:26 AM

gracias amigo martinartaza, esta bien tiendo eso, pero mi pregunta era como yo extraigo los datos de una tabla para otra tabla en formulario, yo lo hago es con ADoquery y un Consulta Sql para llenar los campos, no se si es la forma correcta, y tambien me interesaria usar Herencia Visuales la cual no se hacerla POO, alguien opina sobre todo esto????
  • 0

#6 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6295 posts
  • LocationArgentina

Posted 23 October 2011 - 12:09 PM

[quote name="amell2020" post="57028" timestamp="1319379993"]
gracias amigo martinartaza, esta bien tiendo eso, pero mi pregunta era como yo extraigo los datos de una tabla para otra tabla en formulario, yo lo hago es con ADoquery y un Consulta Sql para llenar los campos, no se si es la forma correcta,
[/quote]
Hola amell2020,
Discúlpame pero no comprendí tu duda. ¿Quieres pasar los datos de una tabla a otra?
De ser así hay que analizar la estructuras de ambas que intervienen.


Como requisito, fundamental, es que tengas campos de tipo coincidentes.
Se puede hacer de una forma rápida, y simple. Para este escenario es viable una instrucción SQL como ésta:



INSERT INTO TablaA (lista-de-campos-para-A)
SELECT (lista-de-campos-desde-B) FROM TablaB




[quote author=amell2020 link=topic=6077.msg57028#msg57028 date=1319379993
y tambien me interesaria usar Herencia Visuales la cual no se hacerla POO, alguien opina sobre todo esto????


Realizar herencia visual es muy simple. Crea el formulario base. Luego ve a File -> New -> Others. Entre las opciones de pestañas hay una que dice Proyect o el nombre del proyecto. Te muestra la lista de formularios que tiene el proyecto, selecciona el formulario base.
Luego asegúrate de tildar la opción inherited y Acepta.
¡Listo! Ya tienes un formulario heredado.
Ahora cualquier cambio, tanto en lo visual como en el código, del base se reflejará en sus hijos.


El procedimiento que te comenté está basado en D6, y medio al vuelo (no tengo Delphi en este momento abierto), puede que sea ligeramente diferente de versión a otra. Lo importante es ir a Archivo y crear un form no por via predeterminada (file -> New -> Form) sino ir a las "opciones avanzadas", seleccionar el proyecto en cuestión (no sólo se puede hacer herencia visual desde el propio proyecto, sino de terceros... incluso se pueden registrar nuestras propios forms y frames bases a modo de frameworks) y heredar de éstos.


Espero que se entienda.


Saludos,
  • 0

#7 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 posts
  • LocationEn un solo Lugar

Posted 23 October 2011 - 02:58 PM

okay, si pero necesito una guia con ejemplo para hacer la POO heredados, en tiendes con imagen si es posible, yo mano delphi 2010, yo hice los paso que tengo lo cree el padre, ahora me falta los hijo crear y no se como hacer eso
  • 0

#8 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6295 posts
  • LocationArgentina

Posted 23 October 2011 - 07:50 PM

Hola amell2020,
Primeramente si me lo permites quisiera hacerte una observación, en lo conceptual.
No existe POO heredados, entre los tantos conceptos que hacen al paradigma Orientado a Objectos (OO, sus siglas) está el concepto de herencia. Pero POO heredados, como concepto en si no existe y es un error que deberías empezar a corregir.


El concepto de herencia es muy simple: existe una clase base y otra clase hija que desciende de ésta. Como clase hija, hereda de su madre (hay quienes le llaman clase padre... cuestiones de género  :D  ) los atributos, métodos y propiedades que ésta ofrezca.
Luego la clase hija ofrece, además lo propio. El típico ejemplo es la clase abstracta animal y la clase perro. O también se puede considerar, cuestiones de enfoque, a la clase base Perro y sus hijos Dogo, Pastor Alemán, Salchicha, etc.


Bueno, en los forms, y en términos visuales, el concepto es el mismo. El form hijo hereda el aspecto visual, y en comportamiento (la lógica) de su padre.


Desafortunadamente no dispongo de Delphi 2010 como para ilustrarte cómo has de proceder. Supuestamente los pasos deberían ser, salvando algunos detalles, similares a los que te he descrito. ¿No hay acaso un File -> New -> ...?
Podríamos esperar a otro compañero que disponga de dicha versión y pueda ayudarte.


Saludos,
  • 0

#9 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2137 posts

Posted 24 October 2011 - 06:44 AM

¿No hay acaso un File -> New -> ...?
Podríamos esperar a otro compañero que disponga de dicha versión y pueda ayudarte.

En efecto en Delphi 2010 es File > New >Delphi Projects > Inheritable Items.  Allí encontrarás los forms de tu aplicación que puedes usar como ancestros, como te lo ha explicado Delphius.


Saludos
  • 0

#10 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1092 posts
  • LocationMurcia, España

Posted 24 October 2011 - 09:17 AM

En mi caso tenemos 2 forms de los que todos heredean, y lo que hicimos fue darlos de alta en una zona de "plantillas" llamada repository, para que luego puedas hacer un file->new y creo que elegias luego "From repository" y veias todos los forms que añadiste a ese repositorio.

Es lo mismo que ya te han dicho, pero agiliza un poco su uso si lo vas a utilizar muy a menudo.

Una vez lo hagas de una forma u otra, veras por un lado que tu form no es un TForm sino un TMyForm, y en todos los eventos que definas veras un inherited al principio para llamar al evento del form del que heredas, por lo demas, todo se ve igual pero tu form recien creado tiene todos los componentes heredados ya colocados, y solo si modificas alguno lo veras reflejado en tu .dfm
  • 0

#11 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 posts
  • LocationEn un solo Lugar

Posted 24 October 2011 - 10:40 AM

amigos gracias de todas forma, ya he visto todo eso, yo entro File > New >Delphi Projects > Inheritable Items y tomo el form que se como diríamos el padre o madre (ahora como yo en lazo a los hijo, es el ejemplo que quiero ver o que me expliquen) si no es mucha molestia amigos.
  • 0

#12 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2137 posts

Posted 24 October 2011 - 10:47 AM

Disculpa pero no me queda claro que es lo que pretendes, si te explicas mejor será más fácil ayudarte.
¿Que entiendes por "enlazar a los hijos"?.
  • 0

#13 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 posts
  • LocationEn un solo Lugar

Posted 24 October 2011 - 11:33 AM

cuando hablo de enlazar me refiero, aque los datos del padre se reflejen el hijo, por ejemplo si tengo un padre, como relaciono diria al hijo para mostrar los datos del Padre.
  • 0

#14 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2137 posts

Posted 24 October 2011 - 12:02 PM

Trataré de explicarte, supongamos que tenemos una aplicación que consta de:


Un TDataModule que a su vez tiene:
  Un TADOConnection para conectar con una base de datos.
  Un TADOTable1 para conectar con la tabla 1 de tu Db.
  Un TADOTable2  para conectar con la tabla 2 de tu Db.
  Un TADOTableN para conectar con la tabla N de tu Bb.
(Asumiendo que estás probando con una base de datos de Access, es prudente usar TTADOTable mientras te familiarizas con el concepto, luego deberías usar TADOQuery).


Un Formulario principal con varios botones para llamar a los forms que miraremos mas adelante.


Un Form de nombre Padre del que heredarás los hijos que tendrá lo siguiente:
  Un DataSource de nombre "DS".
  Un DbGrid que enlazará con el DataSource.
  En los evento OnCreate y OnClose de este form escribirás el siguiente código.




delphi
  1. procedure TPadre.FormClose(Sender: TObject; var Action: TCloseAction);
  2. begin
  3. if assigned(DS.DataSet) then
  4.     DS.DataSet.Close;
  5. end;
  6.  
  7.  
  8. procedure TPadre.FormCreate(Sender: TObject);
  9. begin
  10. if assigned(DS.DataSet) then
  11.     DS.DataSet.Open;
  12. end;



Posteriormente crearás un descendiente de TPadre (como se te explicó en los post anteriores) por cada tabla que quieras conectar, y asignarás al DataSource DS la tabla correspondiente, con eso es suficiente para que cuando se cree cada form se abrirá la tabla correspondiente y se mostrará en el grid y se cerrará al cerrar el form, todo esto sin escribir nada de código en los descendientes de TPadre, puesto que están heredando la apertura y cierre del Dataset desde su padre.


En el form principal puedes desde cada botón crear el correspondiente form.


Saludos.



  • 0

#15 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6295 posts
  • LocationArgentina

Posted 24 October 2011 - 08:03 PM

amell2020,
Me gustaría que seas más profundo y detallista para explicarte.
No comprendo a lo que persigues con "enlazar". Tu dices que se trata de hacer que el hijo muestre los datos del padre ¿Que datos? ¿En qué, o para que, consiste el formulario Padre? ¿Y el hijo? ¿Que función cumple?


Algo me dice que estás mal interpretando el concepto de herencia, y no sólo el concepto de herencia visual (que no es más que una extensión y caso particular de la herencia).


Explícate bien, cuanto más nos puedas decir más fácil será ayudarte. No se te va a cobrar por la cantidad de palabras.


Saludos,
  • 0

#16 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 posts
  • LocationEn un solo Lugar

Posted 24 October 2011 - 08:58 PM

jejeje okay amigos. bien miren lo que quiero hacer un form que lo usare como plantilla para crear los de mas form,  yo solo que quiero es que en el form que yo coja como plantilla tenga los datos como  los Adoquery, Adotable.

Y para decir no se bien como funciona la herencia, pero ya evisto formulario con herencia y la verdad que me interesa para hacer lo que quiero.

yo tengo un form que buscar los datos de la base de datos, que  estan en otro form, para no repedir los form, lo quiero asi heredados donde yo cambie solo los tipo de conexion y algunas cosa que agregaria
  • 0

#17 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1092 posts
  • LocationMurcia, España

Posted 25 October 2011 - 05:43 AM

Los componentes comunues a todos tus forms, como los adoquery y esas cosas, van en el padre, y en el hijo los modificas, por ejemplo la SQL cambia.

Si añades un componenete en el hijo, es solo para ese hijo, si lo haces en el padre, aparece en todos sus hijos automaticamente.
  • 0

#18 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 posts
  • LocationEn un solo Lugar

Posted 25 October 2011 - 07:17 AM

perfecto, me podrian dar un un ejemplo en vista con imagen, de como se hace eso que explica. porque eso es lo que quiero aprender amigo
  • 0

#19 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1092 posts
  • LocationMurcia, España

Posted 25 October 2011 - 09:27 AM

Solo busca en google por "delphi visual inheritance" y tienes tutorial con fotos y codigo de ejemplo, por ejemplo este http://etutorials.or...rm Inheritance/
  • 0




IP.Board spam blocked by CleanTalk.