Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-02-2011
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: 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
Responder Con Cita
  #2  
Antiguo 10-02-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: 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.

Cita:
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;

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

Última edición por ecfisa fecha: 10-02-2011 a las 04:28:47.
Responder Con Cita
  #3  
Antiguo 10-02-2011
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: 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
Responder Con Cita
  #4  
Antiguo 10-02-2011
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: 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
Responder Con Cita
  #5  
Antiguo 10-02-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: 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:
Cita:
¿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
Responder Con Cita
  #6  
Antiguo 12-02-2011
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: 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
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
problemas con dbgrid y otros db anubis Firebird e Interbase 4 18-02-2011 19:58:58
Objetos de sistema y otros problemas PaFernan99 Oracle 1 15-05-2008 23:16:29
Problemas con el DBGrid Shidalis Conexión con bases de datos 8 07-12-2005 15:53:50
Problemas con la aplicacion en otros equipos Mashabak Tablas planas 2 29-06-2004 17:16:55
Problemas con filtro... (y otros) sitrico Conexión con bases de datos 1 21-01-2004 21:52:12


La franja horaria es GMT +2. Ahora son las 23:02:08.


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