Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   DBGrid combinacion de tablas (https://www.clubdelphi.com/foros/showthread.php?t=34619)

silviodp 15-08-2006 23:20:41

DBGrid combinacion de tablas
 
Estoy haciendo una aplicacion en la que combino dos tablas mediante un campo, por ejemplo Clientes.Codigo de la tabla Clientes con Comprob.Cliente de la tabla Comprobantes en un componente DBEdit de un form (que esta relacionado con la tabla Comprobantes) lleno con el Codigo del cliente, luego visulizo los datos en un DBGrid, el problema es que en el DBGrid se visuliza obviamente el código del cliente y no su nombre, y quiero que lo que se visualice sea el nombre del mismo.
Espero puedan ayudarme, saludos y gracias.-

S.D.P.

Caral 15-08-2006 23:31:44

Creo que lo estas haciendo con dos tablas y para visualizar los datos del nombre que esta en otra tabla tienes que hacerlo con un query
saludos

anghell77 16-08-2006 09:09:30

Tal como te dice Caral, necesitas realizarlo con una consulta.
Me supongo que en la tabla Clientes, tienes el Código y el Nombre, más los demás atributos.
Un código más o menos rápido del SQL

Código SQL [-]
Select *from Clientes, Comprobantes
where Codigo.Clientes=Comprobantes.Clientes
and Comprobantes.CLientes=:entrada

Al ejecutar la consulta:
Código Delphi [-]
Query.Close;
Query.ParamByName('entrada').AsString:=trim(DBEdit.Text);//Aquí especificar el número del DBEdit o el nombre del campo. 
Query.Open;

EL DBGrid, debe estar asociado al DataSource de dicha consulta y a éste, puedes cargarle sólo las columnas que requieras...Sí se te hacen muchos campos, selecciona, los campos en la consulta:

Código SQL [-]
Select Codigo, Nombre from Clientes, comprobantes...y lo demás

Ojalá te sirva..

{Saludos}

Caral 16-08-2006 17:22:26

Me parece muy bien mas claro el agua, creo que con esto ya puedes hacer la consulta completa, solo que yo lo haria en vez de un dbedit con un DBComboBox para que se visualice el cliente o numero directamente y sin tener que escribirlo, que piensas.
saludos

silviodp 16-08-2006 17:34:30

DBGrid combinación de tablas
 
Si esta bien eso funciona perfecto y se los agradezco, pero se me presenta otro problema: el form con que actualizo esta relacionada con la tabla Comprobantes y no con el query, como hago cuando tengo que agregar un registro???
Gracias.-

kuan-yiu 16-08-2006 18:20:08

Depende de cómo quieras hacerlo. ¿En el propio grid? ¿En edits?...

Caral 16-08-2006 18:41:12

Yo lo haria de mil maneras, es muy dificil entender el problema sin verlo pero creo que facilmente o lo actualizas en el grid como dice Kuan, si lo tienes en el mismo form y si no haces un enlace con: bien sea otro query u otro grid.
La respuesta esta en la puta de la nariz,lo facil funciona muy bien esto es lo bonito de Delphi su simpleza.
saludos

Lepe 16-08-2006 19:14:07

Yo si que no entiendo ahora mismo cual es el problema....

Tienes:
- tabla Clientes
- tabla Comprobantes
- consulta de union de ambas.

En el mismo Form, puedes poner el grid (ReadOnly a true) conectado a la consulta y despues los DBEdits conectados a sus tablas correspondientes. Al insertar un registro lo haces directamente en las tablas (Clientes.Insert). Cuando haces el Post de la tabla, cierras la consulta y la vuelves a abrir para refrescar los datos.

Saludos

silviodp 16-08-2006 21:55:51

DBGrid combinación de tablas
 
Es dificil comprender para Uds. como lo es tanto para mi explicar lo que quiero hacer, pero lo que tengo es esto:

- Tabla Clientes (codigo, nombre, domicilio, etc.)
- Tabla Comprobantes (numero, cod_cliente, fecha, importe, estado, fech_pago)

La interface de Comprobantes es un form con un DBGrid y cuatro botones (Agregar, Modificar, Eliminar, Cerrar), cuando quiero agregar un registro (click en BtnAgregar) abro otro form con controles para cada campo de la tabla comprobantes y dos botones (Aceptar, Cancelar), en el DBEdit correspondiente a cod_cliente ingreso el codigo del cliente y quiero que al lado de este componente aparezca el nombre del cliente que elegi en el DBEdit (ese es otro problemita), y bueno una vez que llene todos los campos al hacer click en BtnAceptar grabe los datos, cierre éste formulario y quede el formulario que tiene el DBGrid y figure el nuevo registro recien cargado.
Y es asi a grandes rasgos como quiero que funcione esta parte de la aplicacion.
El primer problema que se me presento es que como el campo cod_cliente es de tipo numero en mi DBGrid en lugar de aparecer el nombre del Cliente va a figurar el Codigo del mismo. (que lo levanto de la tabla Clientes)
Espero que ahora les quede un poco mas claro lo que quiero hacer.
Gracias.

Caral 16-08-2006 22:25:10

Tienes un form enlazado a estas tablas, abres otro form que tambien tienen que estar enlazados a estas tablas o query bueno:
nunca de un dbedit sacaras eso, porque este enseña lo que esta en la tabla, usa un edti normal y ligalo al dbedit asi-- Edit1.Text:= DBEdit1.text;
con este edit ligado puedes hacer lo que quieras como un query

TQuery1.SQL.Text := ('SELECT * From Clientes, Comprobantes');
TQuery1.SQL.Add('WHERE Clientes.Codigo = '+Edit1.Text+'');
TQuery1.Open;
Con respecto a que aparezca el nombre haces lo mismo con otro edit

Edit2.Text:= DBEdit1.Text;
y en inspector de objetos en borderStyle ponle none y cambiale el color
espero te sirva

saludos

anghell77 16-08-2006 22:51:38

A ver si ando bien... En la interfaz de Comprobantes esté el Grid con Los datos de los Clientes?....bueno, si es que es así ojalá te sirva lo siguiente.

Si deseas que al hacer CLick sobre algún Codigo o Nombre de Cliente quieres que aparezca en el Siguiente Form el Código y Nombre de Cliente, entonces creo que el codigo :

Código SQL [-]
Select *from Clientes, Comprobantes where Codigo.Clientes=Comprobantes.Cod_Cliente
and Comprobantes.Cod_Cliente=:entrada
Más

Código Delphi [-]
select_Cliente.Close;
select_Cliente.ParamByName('entrada').AsString:=trim(DBGrid1.SelectedField.Asstring);
select_Cliente.Open;
Form_Detalles.Show;

Donde, el evento onShow de éste Form:


Código Delphi [-]
TablaComprobantes.Close;
TablaComprobantes.ReadOnly:=false;
TablaComprobantes.Open;
TablaComprobantes.Append;
//Abre la tabla comprobantes sin datos visibles para que puedas agregar lo que desees.


y Coloca Dos DBEdit que vengan de la consulta select_Cliente, correspondientes a Codigo Cliente y Nombre. De ésta manera tendrás éstos dos datos visibles sin tener que capturar nuevamente el mismo codigo de cliente ni el nombre.

Ahora, al presionar Guardar o Aceptar.

Código Delphi [-]
if Application.MessageBox('Desea Agregar Otro Registro de Comprobantes para el mismo cliente?', 'Atención', MB_YesNo+Mb_IconQuestion)=IDYes then
begin
TablaComprobantes.Close;
TablaComprobantes.ReadOnly:=false;
TablaComprobantes.Open;
TablaComprobantes.Append;
end
else
Select_Cliente.CLose;//cierra la consulta que se ejecuto mediante el DBgrid
Form_Comprobantes.Close;//Devuelve al formulario original
//Si el DBGrid está ligado al DataSource de la tabla de Comprobantes 
TablaComprobantes.Active:=true;
//Si está ligado a una Consulta que despliegue los datos
Consulta.Close;
COnsulta.Open;//Para que se cargue el dato agregado

Eso es suponiendo "... En la interfaz de Comprobantes esté el Grid con Los datos de los Clientes?"

{Saludos}


La franja horaria es GMT +2. Ahora son las 11:21:24.

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