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 15-11-2008
deprimera deprimera is offline
Miembro
 
Registrado: jul 2008
Posts: 26
Poder: 0
deprimera Va por buen camino
guardar datos de una fila seleccionada de un dbrig en variables

hola

toy con un problemita en delphi..queria ver si tenian idea de como solucionarlo

tengo un dbgrid con la propiedad options: rowselect en true para que me pueda mostrar toda la fila seleccionada. Lo que yo kiero hacer es q cuando selecciono una fila m guarde los datos en variables.
Tengo las columnas Código, Servicio y Precio y las keria guardar en las variables cod, desc y precio y tengo un boton agregar para q cuando selecccione la fila lo apreto y ahi m guarde las variables. Puse esto pero no anda:

procedure Tcodigo.BitBtn1Click(Sender: TObject);
begin
if DBGrid1.SelectedRows.Count>0 then
with DBGrid1.DataSource.DataSet do
for i:=DBGrid1.SelectedRows.Count-1 downto 0 do
begin
GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
cod:=adotable1.fieldbyname('Código').AsInteger;
desc:=adotable1.fieldbyname('Servicio').AsString;
end;

edit1.Text:=inttostr(cod);
edit2.Text:=desc;
end;

si tienen idea de como solucionarlo, avisenme.

Saludos
Responder Con Cita
  #2  
Antiguo 15-11-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Pregunto:
Donde declaras las variables??.
Código Delphi [-]
procedure Tcodigo.BitBtn1Click(Sender: TObject);
var
cod: Integer;
desc: String;
begin
if DBGrid1.SelectedRows.Count>0 then
with DBGrid1.DataSource.DataSet do
for i:=DBGrid1.SelectedRows.Count-1 downto 0 do
begin
GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
cod:=adotable1.fieldbyname('Código').AsInteger;
desc:=adotable1.fieldbyname('Servicio').AsString;
end;

edit1.Text:=inttostr(cod);
edit2.Text:=desc;
end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 15-11-2008
deprimera deprimera is offline
Miembro
 
Registrado: jul 2008
Posts: 26
Poder: 0
deprimera Va por buen camino
gracias x tu rapida respuesta...yo las tengo declaradas en las variables globales y no hace nada...si las pongo dentro del procedimiento como m dijist m tira en el edit1 un número (4434496) q no es el código y en el edit2 no pone nada
Responder Con Cita
  #4  
Antiguo 15-11-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Bueno, y asi:
Código Delphi [-]
procedure Tcodigo.BitBtn1Click(Sender: TObject);
var
cod: Integer;
desc: String;
begin
cod:=  adotable1.fieldbyname('Código').Value;
desc:= adotable1.fieldbyname('Servicio').Value;
edit1.Text:=inttostr(cod);
edit2.Text:= desc;
end;
Si las variables son globales, se salen del procedimiento y podrian contener cualquier otro valor inicial.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #5  
Antiguo 15-11-2008
deprimera deprimera is offline
Miembro
 
Registrado: jul 2008
Posts: 26
Poder: 0
deprimera Va por buen camino
gracias por lo q m pasast FUNCIONO BIEN!!!
pero ahora tengo otra duda...si pongo otro dbgrid2 y necesito hacer lo mismo pero hay un campo q se llama distinto...en vez d servicios es descripción...tendria q chekear q dbrgid es el q esta seleccionado no? m podrias pasar ese codigo? t mando la foto para q veas el diseño
Responder Con Cita
  #6  
Antiguo 15-11-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No se si entiendo bien, pero me da la impresion de que vas a poner dos dbgrid enlazados al mismo table.
Si es asi, no tendras que hacer nada simplemente pones la nueva variable con el nuevo campo.
Recuerda que todo esta en el adotable, NO en el dbgrid.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #7  
Antiguo 15-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola, debes hacerlo como lo ultimo que te indica Caral, aunque no tenga el foco tu DBGrid siempre va a estar en el primer registro, SelectedRow se utilza cuando tu propiedad MultiSelect esta en True para ver cuales de tus filas estan marcadas.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #8  
Antiguo 15-11-2008
deprimera deprimera is offline
Miembro
 
Registrado: jul 2008
Posts: 26
Poder: 0
deprimera Va por buen camino
aca t mando el archivo adjunto

pienso q tengo q agregar este codigo y chekear q dbgrid esta seleccionado:

procedure Tcodigo.BitBtn1Click(Sender: TObject);
var
cod: Integer;
desc: String;
begin
cod:= adotable1.fieldbyname('Código').Value;
desc:= adotable1.fieldbyname('Servicio').Value;

cod:= adotable2.fieldbyname('Código').Value;
desc:= adotable2.fieldbyname('Descripción').Value;


edit1.Text:=inttostr(cod);
edit2.Text:= desc;
end;
Archivos Adjuntos
Tipo de Archivo: zip delphi.zip (23,3 KB, 10 visitas)
Responder Con Cita
  #9  
Antiguo 15-11-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Para mi esto es un masterdetail, creo que nos falta informacion de tu parte
Saludos
__________________
Siempre Novato
Responder Con Cita
  #10  
Antiguo 15-11-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Que base de datos usas?.
Que tan grande es el programa?.
Esto te lo digo para saber si lo envías en un zip, tal vez me guío mas.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #11  
Antiguo 15-11-2008
deprimera deprimera is offline
Miembro
 
Registrado: jul 2008
Posts: 26
Poder: 0
deprimera Va por buen camino
tengo 2 tablas distintas una d productos y otra d servicios...necesito guardar en las variables cod y desc lo seleccionado por el usuario para luego pasarlo a una factura...toy haciendo un software de una pelukeria para un final d la facultad...q otros datos necesitas?
Responder Con Cita
  #12  
Antiguo 15-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por deprimera Ver Mensaje
gracias por lo q m pasast FUNCIONO BIEN!!!
pero ahora tengo otra duda...si pongo otro dbgrid2 y necesito hacer lo mismo pero hay un campo q se llama distinto...en vez d servicios es descripción...tendria q chekear q dbrgid es el q esta seleccionado no? m podrias pasar ese codigo? t mando la foto para q veas el diseño
No necesitas chekear, ambos dbGrids estan enlazados a dos diferentes DataSet(tus AdoQuerys), por lo tanto estaran apuntando a un registro, al principio al peimero hasta que tu lo cambies, solo tienes que obtener los valores del registro donde se encuentra en ese momento.

Código Delphi [-]
cod:= adotable1.fieldbyname('Código').AsInteger;
desc:= adotable1.fieldbyname('Servicio').AsString;
 
codDelOtro := adotable2.fieldbyname('Código').Value;
descDelOtro := adotable2.fieldbyname('Descripcion').AsString;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #13  
Antiguo 15-11-2008
deprimera deprimera is offline
Miembro
 
Registrado: jul 2008
Posts: 26
Poder: 0
deprimera Va por buen camino
la base de datos la hice en access y el programa zipeado con la base de datos pesa 1.93 mb.. como t lo puedo enviar?
Responder Con Cita
  #14  
Antiguo 15-11-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
hola, puedes usar directamente el dataset de cada dbgrid

Código Delphi [-]

cod1 := DBGrid1.DataSource.Dataset.FieldByName('cod').Asinteger;
cod2 := DBGrid2.DataSource.DataSet.FieldByName('cod').Asinteger;
Responder Con Cita
  #15  
Antiguo 15-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Parece que no me estan leyendo , ni modo.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #16  
Antiguo 15-11-2008
deprimera deprimera is offline
Miembro
 
Registrado: jul 2008
Posts: 26
Poder: 0
deprimera Va por buen camino
caro gracias por tus respuestas lo q m pasast funciona bien...pero lo q yo kiero es guardar los datos en cod y desc ya sea si se esta pulsando el dbgrid1 o el dbgrid2 no kiero hacer otras variables para desp pasarlo a una factura
Responder Con Cita
  #17  
Antiguo 15-11-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Caro, yo si te leo, como no hacerlo.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #18  
Antiguo 15-11-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Yo es que no entiendo bien bien que es lo que quiere hacer...

para coger los valores de cada campo (por cierto, código no es un nombre de campo correcto) puedes o bien, sabiendo a que dataset esta relacionado

Código Delphi [-]

cod := AdoQuery1.FieldByName('codigo').Asinteger;

o bien desde el dataset del dbgrid (que es el mismo solo que accedido de manera mas relativa)

Código Delphi [-]

cod := DBGrid1.DataSource.DataSet.FieldByName('codigo').Asinteger;

no sobreescribas variables, pues no tienes sentido
Cita:
procedure Tcodigo.BitBtn1Click(Sender: TObject);
var
cod: Integer;
desc: String;
begin
cod:= adotable1.fieldbyname('Código').Value;
desc:= adotable1.fieldbyname('Servicio').Value; // con lo de despues...esto para que sirve?

cod:= adotable2.fieldbyname('Código').Value;
desc:= adotable2.fieldbyname('Descripción').Value;


edit1.Text:=inttostr(cod);
edit2.Text:= desc;
end;
y si nos explicas un poco mejor que es lo que quieres hacer...
Responder Con Cita
  #19  
Antiguo 15-11-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Vamos a ver si entiendo.
Tienes dos dbgrid
Estos, estan enlazados a dos adotables independientes
Quieres que cuando se presione en alguno de los dos dbgrid este dato se pase a los edits, independientemente de cual dbgrid o table sea.
Es asi?.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #20  
Antiguo 15-11-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
si lo que quieres es coger cod, descr (que existen tanto en productos como servicios) entonces si, tendras que averiguar que dbgrid es la seleccionada (aunque si lo miras bien, puedes usar una unica tabla productos+servicios y en ella que este incluidos todos los trabajos/ventas). Puedes usar DBGrid.Focused, por ejemplo:

Código Delphi [-]

if DBGrid1.Focused then 
begin     
    cod := DBGrid1.DataSource.DataSet.FieldByName('cod').Asinteger;
...
end
else
if DBGrid2.Focused then 
begin
    cod := DBGrid2.DataSource.DataSet.FieldByName('cod').Asinteger;
...

end;

lo malo es que al clickar el boton, las grids te perderan el foco. Creo que tendrias que ponerlo todo en una unica tabla o bien hacer dos botones de agregar, uno por productos y otro por servicios. saludos.
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
Fila Seleccionada DBGrid lacovera OOP 1 26-09-2008 15:58:40
marcar una fila seleccionada!! candido OOP 10 19-10-2007 15:53:46
Borrar fila seleccionada de un componente TStringGrid JM75 OOP 3 16-11-2006 10:31:06
cambiar color en fila seleccionada en un dbgrid gmontes OOP 2 05-05-2005 22:33:24
cambiar color a la fila seleccionada de un grid!! triniti OOP 2 03-08-2004 13:00:42


La franja horaria es GMT +2. Ahora son las 13:01:23.


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