Club Delphi  
    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 12-12-2005
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 20
Nbull Va por buen camino
Question Asociar tablas en un dbgrid

Hola, tengo un problemilla con el dbgrid, la base de datos es access y tengo dos tablas, en una guardo todos los tipos de formato de grabación y tiene dos campos Reg-->Numero y formato-->texto y en la principal tengo un campo llamado Reg-->Tipo número en este campo lo asocio con Reg de la primera tabla y asi se me guarda el numero del formato.Trabajo con Delphi7 y componentes AdoQuery.

TABLA Formato

REG----- FORMATO
1 ------- Betacam
2 ------- Umatic
| -------|
| -------|
etc----- etc

TABLA PRINCIPAL

REG
1---->Quiero que el Dbgrid muestre Betacam


El Dbgrid en vez de mostrame Betacam me muestra 1, en vez de Umatic un 2, y asi sucesivamente.

Yo lo que quiero es que muestre Betacam en vez de un 1.
A la hora de agregar registros no he tenido problemas con el DblookUpcombobox Me pone Betacam o lo que sea el formato y me lo guarda en la tabla principal como el numero que corresponde con ese formato.

Lo que quiero es que a la hora de mostrarlo en el Dbgrid sabiendo el número de formato vaya a la tabla formato y me ponga por ejemplo Betacam si es ese.

No se si me he explicado bien, espero que si.

Muchas gracias por todo.Un saludo.

Última edición por Nbull fecha: 12-12-2005 a las 12:45:27.
Responder Con Cita
  #2  
Antiguo 12-12-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Supongo que el DBGrid lo debes tener conectado a un ADOTable o a un ADOQuery cin una SQL similar a ésta:

Código SQL [-]
   Select * from TablaPrincipal


Modificalo para que el DBGrid esté conectado a un ADOQuery con una consulta similar a ésta:

Código SQL [-]
   SELECT TablaPrincipal.Reg ,TablaFormato.Formato 
FROM TablaPrincipal INNER JOIN TablaFormato 
ON TablaFormato.Reg=TablaPrincipal.Reg
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 12-12-2005
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 20
Nbull Va por buen camino
Hola Neftalí gracias por tu respuesta.Encantado de volverte a saludar, despues de la temporada que he estado desconectado del Delphi.

No me funciona, me sigue apareciendo el campo formato con numeros, y además ahora los demás campos me salen vacios.


No se que puede estar mal en la consulta que me has dicho pero no me funciona,muchas gracias de todas formas.

Un saludo
Responder Con Cita
  #4  
Antiguo 12-12-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Lanza ésta consulta en Access a ver qué sale (si sale bien o no).
Y desde el Grid, elimina las columnas que habías creado y vuelve a crearlas de nuevo, para que aparezcan los valores.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 12-12-2005
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 20
Nbull Va por buen camino
Hola Neftalí,no me funciona, si borro las columnas y las vuelvo a añadir solo me deja seleccionar dos campos el campo formato y Reg. Tengo este codigo


Código SQL [-]
 size="1">
SELECT Archivo.Registro2, Tema.Tema
 
From Archivo INNER JOIN Tema
 
ON Tema.REGISTRO2=Archivo.REGISTRO2;

Para que me salgan todos los campos he puesto el siguiente pero no me soluciona el problema inicial:

Código SQL [-]
size="1">
SELECT *, Archivo.Registro2, Tema.TEMA
 
FROM Archivo INNER JOIN Tema
 
ON Tema.REGISTRO2=Archivo.REGISTRO2;
 
A ver si ves tu lo que puedo estar haciendo mal por que no lo entiendo.

Última edición por Nbull fecha: 12-12-2005 a las 17:33:00.
Responder Con Cita
  #6  
Antiguo 13-12-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Nbull
Para que me salgan todos los campos he puesto el siguiente pero no me soluciona el problema inicial...
Coloca la siguiente consulta:

Código SQL [-]
size="1"> SELECT Archivo.*, Tema.*
 FROM Archivo INNER JOIN Tema
 ON Tema.REGISTRO2=Archivo.REGISTRO2;

Eso debería generar una consulta que obtiene todos los campos de las dos tablas.
Una vez que la tengas conectada al DBGrid, activala y pulsa Click derecho sobre el Grid; Añade todos los campos a la lista; Una vez que los tengas todos, para cada uno de los campos cambia la propiedad Visible para dejar visibles en el Grid los que te interesen.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 13-12-2005
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 20
Nbull Va por buen camino
Ahora si que me ha funcionado muchisimas gracias Neftalí.

Perdona que te haga otra pregunta, tengo otro campo en el mismo Grid que me pasa lo mismo, estoy intentando anidar 'INNER JOIN' de la siguiente manera y no me deja:
Código SQL [-]
size="1">SELECT Archivo.* ,Tema.*size="1">, Formato.*

size="1">FROM Archivo INNER JOIN Temasize="1"> INNER JOIN Formato

size="1">ON Archivo.REGISTRO2= Tema.REGISTRO2

size="1">ON Archivo.id = Formato.Id;

Me da un error de sintaxis en la clausula From, he probado poniendole parentesis y corchetes y nada. He leido que si que se pueden anidar las clausulas INNER JOIN, pero no consigo saber como.

Se que soy un pesado,pero es que no tengo ni pajolera idea de Sql.

Gracias por tu ayuda.Un Saludo.
Responder Con Cita
  #8  
Antiguo 14-12-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cada INNER debe ir junto a su ON; Prueba a ponerlo debajo:

Código SQL [-]

Select...
INNER....ON.....
INNER... ON...
WHERE ...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 14-12-2005
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 20
Nbull Va por buen camino
Hola Neftalí, mira tengo la siguiente consulta SQL funcionando como tu me dijiste:
Código SQL [-]
size="1">SELECT Archivo.* ,Tema.*
 
FROM Archivo INNER JOIN Tema 
 
ON Archivo.REGISTRO2 = Tema.REGISTRO2;

Hasta aqui todo perfecto, ahora el problema es que quiero hacer lo mismo con una tabla formato y la misma tabla Archivo, y pongo la siguiente consulta

Código SQL [-]
size="1">SELECT Archivo.* ,Tema.*,FORMATO.*
 
FROM Archivo INNER JOIN Tema 
 
ON Archivo.REGISTRO2 = Tema.REGISTRO2size="1">,
 
size="1">INNER JOIN FORMATO 
 
ON Archivo.Id = Formato.Id;
 

Y esto que a mi parecer deberia funcionar me da un error de sintaxis en la clausula From.
Le he dado mil vueltas al código y no consigo nada.

Gracias.Un saludo.

Última edición por Nbull fecha: 14-12-2005 a las 13:40:21.
Responder Con Cita
  #10  
Antiguo 14-12-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Por lo pronto, sobra una coma (,) después de:

Código SQL [-]
...Tema.REGISTRO2


Por lo demás la veo bien; Asegurate de que los campos que usas para los INNER de unas tablas con otras sean los correctos.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #11  
Antiguo 14-12-2005
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 20
Nbull Va por buen camino
He probado lo que me dices de la coma y llevas razón, pero no me deja unir las dos tablas me dice que falta operador en la consulta:

Código SQL [-]
Archivo.REGISTRO2 = Tema.REGISTRO2 INNER JOIN FORMATO 
 
ON Archivo.Id = Formato.Id;
No se que operador me puede faltar, a ver si alguien sabe lo que me puede estar pasando y me hecha una mano.

He probado hacer la unión por separado y si que me deja, osea que descarto que sea fallo de los campos.

Un Saludo Neftalí y gracias por todo.Eres una maquina.

Última edición por Nbull fecha: 14-12-2005 a las 16:55:01.
Responder Con Cita
  #12  
Antiguo 20-12-2005
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 20
Nbull Va por buen camino
Perdonar que reabra el hilo, pero es que me ha surgido un problema. Tenia un boton que me borraba el registro seleccionado en mi dbgrid con el siguiente codigo:


Código Delphi [-]
procedure TFGestion.BborrarClick(Sender: TObject);
var
button : integer;
begin
button := application.messagebox ('¿Realmente desea borrar la cinta seleccionada?', 
'¿Seguro?', MB_yesno + mb_iconwarning); // Mostramos un mensaje de advertencia
if button = IDYes then begin // Si ha pulsado si...
//Borramos el registro seleccionado solamente de la tabla archivo
DBGrid2.DataSource.DataSet.Delete;
Showmessage('La cinta Nº '+DbNumCinta.Field.Text+' ha sido borrada con éxito');
//Refresco la tabla
AdoQuery2.Active:=false;
AdoQuery2.SQL.Text := 'SELECT Archivo.* , Tema.*,Formato.* FROM (Archivo '+
' LEFT OUTER JOIN Tema ON Archivo.Registro2=tema.Registro2) '+
' LEFT OUTER JOIN Formato ON Archivo.Id=Formato.Id';
AdoQuery2.Active:=True;
end;//sino no hacemos nada

Mi problema es que antes solo me borraba el registro seleccionado en la tabla archivo,pero, ahora me borra un registro en las tres tablas y solo quiero que me lo borre en la tabla archivo.

Como lo puedo solucionar.

Gracias Un saludo.
Responder Con Cita
  #13  
Antiguo 20-12-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Has añadido restricciones de borrados en cascada a tu Base de Datos?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #14  
Antiguo 20-12-2005
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 20
Nbull Va por buen camino
Neftalí, perdona mi ignorancia, pero, es que no tengo ni idea de como se hace eso en Access.

Si me puedes hechar un cable te estaria muy agradecido.
Responder Con Cita
  #15  
Antiguo 21-12-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si no las has uesto nada; Los borrados en cascada permiten borrar en cascada (como su nombre dice) registros de una tabla en el momento en que se borran los de otra; Por ejemplo, si tienes la tabla "Clientes" y relacionada con clientes la tabla "Personas de contacto"; Si al borrar un cliente te interesa borrar todas sus personas de contacto, se puede hacer directamente usando borrados en cascada.

Es la única forma que se me ocurre de borrar registros de varias tablas de una sóla vez.

Pero si no las has puesto, no te preocupes, entonces tu problema va por otro lado.

En access creo recordar que los borrados en cascada se definen cuando añades relaciones entre tablas.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #16  
Antiguo 21-12-2005
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 20
Nbull Va por buen camino
Gracias Neftalí por responderme de nuevo, he mirado en access las relacciones de mis tablas y no tengo seleccionadas los borrados en cascada.
¿Cual puede ser el problema?
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


La franja horaria es GMT +2. Ahora son las 17:54:22.


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