Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > Conexión con bases de datos
Register FAQ Members List Calendar Guía de estilo Today's Posts

Conexión con bases de datos

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 10/02/2011
anubis's Avatar
anubis anubis is offline
Miembro
 
Join Date: Mar 2007
Posts: 863
Poder: 20
anubis Va por buen camino
problemas con dbgrid y otros db

Buenas
Estoy algo atascado por usar componentes directos del tipo dbgrid .
A ver si me dais una manita.
tengo 2 tablas,
contactos,
que contiene;
codigo
nombre
direccion.
...

telefonos,
que contiene,
codigotelefono
telefono
codigocontacto

Esto es para tener por contacto n telefonos.

el problema que tengo es, primero si esto se puede usar asi, puesto que en contactos no hay referencia a telefonos pero si al reves.
y lo segundo, al usar directamente un contactos.insert y posteriormente un dbedit y cambiar al dbgrid de telefonos el registro ya queda sin usar contactos.post y esto no tiene que ser posible por si decido cancelar el nuevo registro.

Lo otro, es relacionado con un dbgrid, si todavia no tengo el codigo primero como añado ese codigo a la tabla del dbgrid.

Me imagino que quiza sea dificil entender lo que quiero o no, pero bueno es simplemente por si me podeis echar la mano.

gracias
Reply With Quote
  #2  
Old 10/02/2011
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola anubis.

Quote:
el problema que tengo es, primero si esto se puede usar asi, puesto que en contactos no hay referencia a telefonos pero si al reves.
Se puede usar y sólo debés establecer una relación maestro/detalle entre los DataSets involucrados.
Como no especificas con que base de datos estás trabajando ni con que componentes, te ejemplifico con TIBDataSet.

Teniendo dos TDataSource y dos TIBDataSet relacionados así,

DataSourceContactos -> IBDataSetContactos ( maestro )
DataSourceTelefonos -> IBDataSetTelefonos ( detalle )

desde el Object Inspector, ponemos DataSourceContactos en la propiedad DataSource de IBDataSetTelefonos y el siguiente
código SQL siguiente en la propiedad SelectSQL:
Código SQL [-]
 SELECT * FROM TELEFONOS WHERE CODIGOCONTACTO = :CODIGO

O por bién por código:
Código Delphi [-]
 with IBDataSetTelefonos do
  begin
    Close;
    DataSource:= DataSourceContactos;
    SelectSQL.Clear;
    SelectSQL.Add('SELECT * FROM TELEFONOS');
    SelectSQL.Add('WHERE CODIGOCONTACTO = :CODIGO');
    Open;
  end;

Quote:
Lo otro, es relacionado con un dbgrid, si todavia no tengo el codigo primero como añado ese codigo a la tabla del dbgrid.
Lo siento, realmente no te entiendo esa parte.


Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Last edited by ecfisa : 10/02/2011 at 04:28.
Reply With Quote
  #3  
Old 10/02/2011
anubis's Avatar
anubis anubis is offline
Miembro
 
Join Date: Mar 2007
Posts: 863
Poder: 20
anubis Va por buen camino
Si gracias por contestar.

Voy a probar lo que dices a ver que sale.
Estoy usando los componentes zeos y de momento sqlite.

Lo que queria hacer es, si lo que me propones funciona ya no haria falta .
lo probare y vere si funciona, en cualquier caso lo posteare.

gracias de nuevo
Reply With Quote
  #4  
Old 10/02/2011
anubis's Avatar
anubis anubis is offline
Miembro
 
Join Date: Mar 2007
Posts: 863
Poder: 20
anubis Va por buen camino
Hola,

como no puedo editar el post tengo que añadir uno nuevo

Como comentaba uso librerias zeos y sqlite, este ultimo creo que no es relevante o si?.

Bueno, ya probe lo que me comentabas pero no me funciona nose si estara bien:

contactos.tzquery
contactos.tdatasource

telefonos.tzquery
telefonos.tdatasource

Esto me estaba quedando asi en el object inspector.

contactos.tzquery (como no hay tablename no pongo nada salvo en el sql que seria select * from contactos.

El contactos.tdatasource lo relaciono con contactos.tzquery

y luego en el telefonos.tzquery le pongo en mastersource contactos.tdatasource y ahi en masterfield el campo que se relaciona.

y el telefonos.tdatasource lo relaciono con el mismo telefonos.tzquery.

Que estoy hacendo mal?

un saludo y gracias de nuevo
Reply With Quote
  #5  
Old 10/02/2011
Chris's Avatar
[Chris] Chris is offline
Miembro Premium
 
Join Date: Apr 2007
Location: Jinotepe, Nicaragua
Posts: 1,678
Poder: 21
Chris Va por buen camino
Hasta donde pude entender (están un poco confusas tus palabras) uno de los problemas que tienes que cómo resolver esta paradoja:
Quote:
¿Cómo relacionar registros hilos (teléfonos) a su respectivo padre (contactos) si el padre aún no existe?
Es valida tu incógnita. De hecho es un problema un poco complejo que puede tener varias soluciones. El problema nace porque la mayoría de los motores de DB no te dejarán agregar un nuevo registro Hijo si el padre aún no ha sigo creado. Lo que yo hago para resolver este problema es utilizar una tabla temporal (o una tabla en memoria puede ser de mucha ayuda si tienes una estructura compleja). Si solo vas a guardar números de telefono, creo que basta con un array.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Reply With Quote
  #6  
Old 12/02/2011
anubis's Avatar
anubis anubis is offline
Miembro
 
Join Date: Mar 2007
Posts: 863
Poder: 20
anubis Va por buen camino
Tienes razon chris, probare con un dataset en memoria a ver como sale pero primero queria solucionar otro problema.

No hay forma de que el grid de la tabla detalle me muestre/filtre en funcion de la maestra, si uso un query (master) y table (detail) si lo hace pero con dos querys no.

Os resumo un poco como lo hago usando lo que posteo ecfisa.

tengo 2 datasource y 2 querys un dbgrid y un dbedit

query1.tquery (master)
sql.text:='select * from contactos'
datasource no pongo nada porque genera un bucle.

datasource1.tdatasource
dataset:=query1


query2.tquery(detail)
mastersource:=datasource1
masterfield:=codigo
linkedfields:=codigo2 (de la tabla2)
sql.text:='select * from telefonos where codigo2= :codigo'

No se donde me falta algo porque ya probe con varias cosas del inspector de objetos pero nada, no me filtra nada ni me deja ver nada, eso si, como os comentaba si uso una tabla como detalle en vez del query si me lo hace.

Es frustrante la verdad.

uso los componentes zeos

gracias de nuevo
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
problemas con dbgrid y otros db anubis Firebird e Interbase 4 18/02/2011 19:58
Objetos de sistema y otros problemas PaFernan99 Oracle 1 15/05/2008 23:16
Problemas con el DBGrid Shidalis Conexión con bases de datos 8 07/12/2005 15:53
Problemas con la aplicacion en otros equipos Mashabak Tablas planas 2 29/06/2004 17:16
Problemas con filtro... (y otros) sitrico Conexión con bases de datos 1 21/01/2004 21:52


All times are GMT +2. The time now is 14:03.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi