Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-01-2008
faraonDX faraonDX is offline
Miembro
 
Registrado: jun 2007
Posts: 24
Poder: 0
faraonDX Va por buen camino
Relación varios a varios

El diseño de la base de datos de una aplicación es importante como lo es tambien el diseño de la entrada de los datos.
Pieso que no hay nada mejor que explicar mediante ejemplo y mi duda la hare de esta forma:
Me dirijo a hacer una aplicación y sale un diseño de base de datos con tres tablas:
Almacen(CodAlm, Decrip), Inventario(codAlm,CodProd, CAntidad ), Productos(CodProd, Descrip)
Ahora bien hasta lo que yo se, me convendría hacer una consulta con las tablas Inventari y Productos ya que cada vez que entro un producto tengo que entrar su cantidad, hasta ahi bien, realizo la consulta con los campos de una + la otra, bien hay dos situaciones cuando voy a entrar por consulta un producto que no esta en la tabla producto no hay problemas funciona pero cuando no esta me da un error, en acces no da ese problema porque automaticamente cuando entras el CodProd en consulta, llena los otros campos automaticamente y resuelto el problema pero en delphi no hace esto ¿Como puedo simular lo que hace acces en delphi?
desde ya gracias
Responder Con Cita
  #2  
Antiguo 23-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Supongo que lo que haces es enlazar un programa delphi con access, si es asi con que componentes lo enlazas?.
No entiendo el problema.
Saludos
Responder Con Cita
  #3  
Antiguo 25-01-2008
faraonDX faraonDX is offline
Miembro
 
Registrado: jun 2007
Posts: 24
Poder: 0
faraonDX Va por buen camino
Muchos a Muchos

Primeramente gracias por la respuesta.
Exactamente enlazo delphi con acces mediante los componentes adoconection, AdoTable, AdoQuery, este ultimo lo utilizo para hacer una consulta de los campos de dos tablas las tablas: productos e inventarios.
en acces esta consulta funciona perfectamente a la hora de entrar la información pero en delphi me da un error la que en delphi no llena automaticamente los campos de referencia entre las dos tablas la consulta es la sig:
SELECT Inventario.CdProd, Inventario.CdAlm, Inventario.Cantidad, Prod.CdProd, Prod.Descrip
FROM Prod INNER JOIN Inventario ON Prod.CdProd = Inventario.CdProd;

La misma como decia la utlizo para entrar información y que automaticamente llene las tablas correspondiente.

espero que esto siba para que comprendas mejor mi problemas

Muchas gracias.
Responder Con Cita
  #4  
Antiguo 25-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Segun entiendo lo que haces es una consulta a ciertos campos de las dos tablas y con esta consulta pretendes que se actualicen estos campos con la informacion que le introduzcas.
Si es asi tienes que tomar en cuenta varias cosas.
1- una consulta no se puede modificar.
2- para modificar campos de una tabla se tiene que tener en cuenta los campos clave de la misma de lo contrario no actualizara.
3- te recomiendo hacer un update para cada tabla, asi podras hacer las modificaciones facilmente y a los campos que te interesen.
4- Usa parametros.
Si me equivoco me lo dices.
Saludos
Responder Con Cita
  #5  
Antiguo 25-01-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por faraonDX Ver Mensaje
Primeramente gracias por la respuesta.
Exactamente enlazo delphi con acces mediante los componentes adoconection, AdoTable, AdoQuery, este ultimo lo utilizo para hacer una consulta de los campos de dos tablas las tablas: productos e inventarios.
en acces esta consulta funciona perfectamente a la hora de entrar la información pero en delphi me da un error la que en delphi no llena automaticamente los campos de referencia entre las dos tablas la consulta es la sig:
SELECT Inventario.CdProd, Inventario.CdAlm, Inventario.Cantidad, Prod.CdProd, Prod.Descrip
FROM Prod INNER JOIN Inventario ON Prod.CdProd = Inventario.CdProd;

La misma como decia la utlizo para entrar información y que automaticamente llene las tablas correspondiente.

espero que esto siba para que comprendas mejor mi problemas

Muchas gracias.
Hola faraonDX, hay algo en esa explicación que está faltando... y/o fallando...

¿Como es que empleas la consulta SELECT para llenar una tabla? ¿Que no es que se necesita un INSERT?

No termino de comprender lo que deseas hacer... Tomate el tiempo que necesites para describir mejor tu problema. Aportando todo detalle que esté a tu alcance para que podamos comprenderte.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 28-01-2008
faraonDX faraonDX is offline
Miembro
 
Registrado: jun 2007
Posts: 24
Poder: 0
faraonDX Va por buen camino
Bueno tratare de ser más explicito,
Mi problema es que no puedo lograr el mismo efecto de la cosulta que anteriormente expuse en delphi, ya que en access provoca un efecto deseable para mi, como le dije anteriormente quiero hacer una consulta o mejor dicho una vista en forma de consulta de tal forma que cuando el usuario introdusca un registro se llenen los datos de las tablas implicadas a continuación voy a explicar lo que sucede en el caso de access y delphi
Access
el usuario inserta un registro de la consulta, entra el código del producto(Tabla inventario), automáticamente cuando va a pasar al siguiente campo llena los datos de campo cdProd y descripción pero que pertenecen a la tabla relacionada pero que están el la misma consulta, este es en el caso de que en la tabla producto este el codProd tecleado, pero si no se encuentra el usuario tentdrá que teclearlo y mediante esto la tabla producto asimila lo que se tecleo. Perfecto esot es lo que quiero
Delphi
El usuario inserta un registro en la consulta, entra el codProd(Tabla inventario), en este caso Si el codigo tecleado se encuentra en la tabla producto, no lo llena automáticamente, solamente cuando posteo , cierro la consulta y vuelo abrir, en el otro caso si el usuario teclea y no se encuentra ese cdProd en (Producto) y vuelve a teclear cdProd pero para (producto) da un error pues no puden aber dos registros con los mismos valores ya que CdProd es llave de la tabla Producto.

Le pongo a disposición nuevamente el diseño para que puedan entender:
Almacen(CodAlm, descrip)
Inventario(CodAlm, CodProd, Cantidad)
Producto(CdProd, Descrip)

Aclaración:
para Delphius
La consulta no es de acción es de selección pero sirve como vista de los registro para que los usuario inserten o modifiquen los datos de las tablas implicadas.

para carnal
Si puedo utilizar parámetros, lo que en el ejemplo que puse no lo especifique para que fuerta más sencilla, pero puede ser un parámetro para CodAlm, en una relación Master - Detail.

Saludos y gracias por su precupación
Responder Con Cita
  #7  
Antiguo 30-01-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por faraonDX Ver Mensaje
Bueno tratare de ser más explicito,
Mi problema es que no puedo lograr el mismo efecto de la cosulta que anteriormente expuse en delphi, ya que en access provoca un efecto deseable para mi, como le dije anteriormente quiero hacer una consulta o mejor dicho una vista en forma de consulta de tal forma que cuando el usuario introdusca un registro se llenen los datos de las tablas implicadas a continuación voy a explicar lo que sucede en el caso de access y delphi
Access
el usuario inserta un registro de la consulta, entra el código del producto(Tabla inventario), automáticamente cuando va a pasar al siguiente campo llena los datos de campo cdProd y descripción pero que pertenecen a la tabla relacionada pero que están el la misma consulta, este es en el caso de que en la tabla producto este el codProd tecleado, pero si no se encuentra el usuario tentdrá que teclearlo y mediante esto la tabla producto asimila lo que se tecleo. Perfecto esot es lo que quiero
Delphi
El usuario inserta un registro en la consulta, entra el codProd(Tabla inventario), en este caso Si el codigo tecleado se encuentra en la tabla producto, no lo llena automáticamente, solamente cuando posteo , cierro la consulta y vuelo abrir, en el otro caso si el usuario teclea y no se encuentra ese cdProd en (Producto) y vuelve a teclear cdProd pero para (producto) da un error pues no puden aber dos registros con los mismos valores ya que CdProd es llave de la tabla Producto.

Le pongo a disposición nuevamente el diseño para que puedan entender:
Almacen(CodAlm, descrip)
Inventario(CodAlm, CodProd, Cantidad)
Producto(CdProd, Descrip)

Aclaración:
para Delphius
La consulta no es de acción es de selección pero sirve como vista de los registro para que los usuario inserten o modifiquen los datos de las tablas implicadas.

para carnal
Si puedo utilizar parámetros, lo que en el ejemplo que puse no lo especifique para que fuerta más sencilla, pero puede ser un parámetro para CodAlm, en una relación Master - Detail.

Saludos y gracias por su precupación
Después de días de volver y volver a leer este hilo... aún no me sigue quedando en claro. Se que haz hecho un esfuerzo para redactar el problema pero la verdad es que aún sigo sin comprenderte. Me mareo en tu explicación... y aún siento que hay una fallta en tu modelo.

Te pido que por favor si te arroja errores, que me lo hagas saber cuales son. ¿Puedo ver una muestra de tu código?

Espero que no tomes a mal mis comentarios. Quisiera que este hilo no quede en el olvido.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #8  
Antiguo 05-02-2008
faraonDX faraonDX is offline
Miembro
 
Registrado: jun 2007
Posts: 24
Poder: 0
faraonDX Va por buen camino
Muchas gracias por preocuparse en darme respuesta.

La verdad que he tratado de explicarme lo mejor posible, quizas caral se acerco un poco cuando expreso:
Cita:
Empezado por caral
Hola
Segun entiendo lo que haces es una consulta a ciertos campos de las dos tablas y con esta consulta pretendes que se actualicen estos campos con la informacion que le introduzcas.
Si es asi tienes que tomar en cuenta varias cosas.
1- una consulta no se puede modificar.
2- para modificar campos de una tabla se tiene que tener en cuenta los campos clave de la misma de lo contrario no actualizara.
3- te recomiendo hacer un update para cada tabla, asi podras hacer las modificaciones facilmente y a los campos que te interesen.
4- Usa parametros.
Si me equivoco me lo dices.
Saludos
El entiende la esecia del problema que quiero resolver, en access la consulta funciona con el efecto que quiero lograr pero en delphi no, esta conulta que elaboro podría ser el resultado de (una agregación) y cumple con las regas que plantea caral.

Lo que quiero realizar es el no tener que ir a una tabla llenar los datos de esta y despues tener que ir a la otra y tambien llenarlos , me parece que mediate esta consulta puedo matar dos pajaros de un tiro

saludos

Última edición por faraonDX fecha: 05-02-2008 a las 16:28:45.
Responder Con Cita
  #9  
Antiguo 05-02-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Access tiene lo que en otras bases de datos se llama vistas, me explico:
Por ejemplo hago una consulta en access (con el creador de consultas del mismo), esta consulta me muestra las tablas y campos que me interesan, osea funciona.
Lo que se hace es que desde delphi se llama a esta consulta como si fuera una tabla.
Por ejemplo:
Hago una consulta (a las tablas que sean, ojo, si se van a modificar tienen que estar ligadas y contener los campos clave).
A esta consulta le pongo el nombre de: ConSulTablas.
Entonces hago un llamado como si fuera otra tabla mas, asi:
Código SQL [-]
Select * from ConSulTablas
O simplemente uso un adoTable y lo enlazo a ConSulTablas en su propiedad table.
Es simple y efectivo.
Sigo sin saber si sera el problema.
Saludos
Responder Con Cita
  #10  
Antiguo 05-02-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 19
felipe88 Va por buen camino
A ver si entiendo...
La base de datos la tienes en acces y la interfaz la estas haciendo en delphi; las tablas tienen correctamente sus realciones y actualiza en cascada o algo asi... Cuando realizas la consulta
Código SQL [-]
SELECT Inventario.CdProd, Inventario.CdAlm, Inventario.Cantidad, Prod.CdProd, Prod.Descrip
FROM Prod INNER JOIN Inventario ON Prod.CdProd = Inventario.CdProd;
en acces te funciona y te permite actualizar ahi mismo... he ahi la diferencia como acces permite realizar tanto bd como interfaz, es muy versatil a la hora de trabajarlo; cuando tu lo conectas con delphi, desde este no podras hacer lo mismo (Como dirian: "El perezoso trabaja doble" ), lo que tienes que hacer es un Update en las tablas pero no desde tu consulta, aunque si inventas la forma podrias darle la "sensacion" al usuario de que es asi y no crear otra especie de formulario... Espero estar en lo correcto

Saludos
__________________
Web
Responder Con Cita
  #11  
Antiguo 05-02-2008
faraonDX faraonDX is offline
Miembro
 
Registrado: jun 2007
Posts: 24
Poder: 0
faraonDX Va por buen camino
Hola a todos.
Muchas gracias a caral por la pronta respuesta, asi como a todos los que han participado.

felipe88 creo que estas comprendiendo lo que quiero hacer, pues como dices
Cita:
Empezado por felipe88
he ahi la diferencia como acces permite realizar tanto bd como interfaz, es muy versatil a la hora de trabajarlo; cuando tu lo conectas con delphi, desde este no podras hacer lo mismo
especificamente eso, access tiene incorporado ciertas funciones que relizán algunas cosas automáticamente, principalente en los formularios y esto en delphi hay que hacerlo manualmente para lograr el mismo efecto

Cuando dices:
Cita:
Empezado por felipe88
lo que tienes que hacer es un Update en las tablas pero no desde tu consulta
A que te refires con eso, es acaso que tengo que utilizar otros componetes adotables y hacerles updates o a que te refieres por favor explicame como podria hacer eso.

saludos.
Responder Con Cita
  #12  
Antiguo 05-02-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 19
felipe88 Va por buen camino
Cita:
Empezado por faraonDX Ver Mensaje
A que te refires con eso, es acaso que tengo que utilizar otros componetes adotables y hacerles updates o a que te refieres por favor explicame como podria hacer eso.

saludos.
Bueno, a lo que me refiero es que si vas a actualizar los datos las tablas (Despues de la consulta), lo que deberias hacer basicamente es un query, en este caso un update correspondiente a cada campo de cada tabla que deseas... un poco mas "complejo" de lo que querias, pero no es mayor esfuerzo

Saludos
__________________
Web
Responder Con Cita
  #13  
Antiguo 07-02-2008
faraonDX faraonDX is offline
Miembro
 
Registrado: jun 2007
Posts: 24
Poder: 0
faraonDX Va por buen camino
hola a todos.

Quiero especificar que lo que quiero usar para representar la consulta es un control DBGrid, me referia que en access el DBGrid es un poco más inteligente y realiza algunas cosas automáticamente como la acción que quiero que haga en delphi pero parece que el grid de Delphi no soporta lo que estoy pidiendo a lo mejor ustedes saben de DBGrid especiales que puedan realizar semejante empeño

Con la solución que me da felipe88 no resulevo mi cuestionamiento

Pienso que para poderme entener hay que:
todo esto en access
1:realizar el ejemplo que pongo con las tres tablas expuestas y realizar la consulta
2: Introducir datos supuestos
3: ir observando lo que sucede en la medida que se introduce

nota hay dos obciones: 1: que se entre en inventario un cod de prod que exista en producto
2: Que se entre en inventario un cod de prod que no exista en producto

Delphi
Hacer lo anterior pero en delphi.

saludos.
Responder Con Cita
  #14  
Antiguo 08-02-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 19
felipe88 Va por buen camino
Cita:
Empezado por faraonDX Ver Mensaje
Con la solución que me da felipe88 no resulevo mi cuestionamiento
1. Lamento no ser perfecto y no poder ayudarte mas... (No es mi obligacion tampoco)
2. Un BDGrid comun y corriente no te permite hacer eso... busca entonces un componente (TMS, Torry... etc)
3. Los querys se comportan como tablas en memoria...
4. Puedes crear un query auxiliar con el que puedas actualizar los datos...
5. Cuando haces lo que intentas en Delphi, que error te sale ? Como se te ocurre solucionarlo...???

Ayudate con estos 5 puntos y me cuentas como te va...

Saludos
__________________
Web

Última edición por felipe88 fecha: 05-06-2008 a las 16:46:59.
Responder Con Cita
  #15  
Antiguo 08-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
faraonDX, estuve dandole más vueltas al tema y llegué a un hecho: no hay manera de conseguir lo que deseas en Delphi (al menos en D6) con un DBGrid.

Lo que dice felipe es más certero. Sería útil que contemples la posiblidad de adquirir un componente de tercero que haya eso (si es que hay alguno).

La otra situación es que cambies el diseño, por algo más simple y no tan rebuscado.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #16  
Antiguo 11-02-2008
faraonDX faraonDX is offline
Miembro
 
Registrado: jun 2007
Posts: 24
Poder: 0
faraonDX Va por buen camino
Hola a todos.

Primeramente agradecerles a todos por la preocupación y aunque piensen que no sus respuesta me sirveron para aclarar algunas cosas.
Evidentemente el DBGrid de delphi no soporta estas funciones, hay que buscar en internet un control que soporte esas funciones, de todas formas si encuentran algo sobre el tema por favor escribame.

saludos a caral, felipe88 y al amigo delphius .
Responder Con Cita
  #17  
Antiguo 11-02-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 19
felipe88 Va por buen camino
Con gusto...

PD: Estaba tratando de pensar en un algoritmo... pero ultimamente no tengo cabeza para eso
__________________
Web
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
Varios informes en uno jonmendi Impresión 2 02-08-2006 10:47:37
varios update jam888 MS SQL Server 4 20-12-2005 13:21:13
uso de varios DetailBands i_berbeu Impresión 1 19-09-2005 08:30:35
varios count pepe2000 SQL 7 16-02-2005 18:16:51
agrupar de a 1 y varios raudelink SQL 3 16-11-2004 00:58:11


La franja horaria es GMT +2. Ahora son las 00:57:33.


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