Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Leer fila en la que estoy situado en un DBgrid (https://www.clubdelphi.com/foros/showthread.php?t=12140)

RyAr 07-07-2004 10:26:19

Leer fila en la que estoy situado en un DBgrid
 
Buenas a todos, tengo un problemilla con un dbgrid. El caso es que tengo men formulario un dbgrid basado en un query a una tabla paradox, y me gustaria que al seleccionar una fila en el dbgrid, al darle a un boton de modificar me saliera otro form con dbedits para poder editar los datos de la tabla. Mi pregunta es, ¿como se en la fila en la que estoy posicinado en el dbgrid?

Saludos, y gracias

tcp_ip_es 07-07-2004 11:56:30

La fila es fácil ya que tu dbgrid esta moviendo el propio cursor de tu consulta asi que en el momento de posicionarte en una determinada fila puedes preguntar por cualquier campo identificativo/indice de la consulta y por ejemplo a su vez hacer un locate en una tabla.

Código Delphi [-]
tutabla.locate ("campoindicetabla", query1.fieldbyname("campoindice").value,[]);
// aqui abririas tu form con tus dbedits apuntando a tutabla.

Saludos, Tony

RyAr 07-07-2004 12:34:44

Buenas, lo que me has dicho funciona, pero tengo un problema tal y como lo he puesto, y es que si el mismo dia hay varias reservas me saca la solo la primera. El codigo que he metido es este:

Código Delphi [-]
Form2.Table2.Locate ('FECHARESERVA', Form2.Query2.Fieldbyname('FECHARESERVA').value,[]);

Tambien tengo estos campos como clave EMPRESA2, HORAINICIO, HORAFIN, ANULADO2, por lo que me gustaria incluirlos en el locate para que vaya a ese registro, y no al primero del dia, que puede ser de otra reserva, como lo meto??

Saludos, y gracias

tcp_ip_es 07-07-2004 12:47:15

No tienes ningun campo clave que te identifique un único registro??? si no lo tienes en el locate puedes meter varios campos:

Código Delphi [-]
Form2.Table2.Locate('EMPRESA2;HORAINICIO;HORAFIN;ANULADO2', VarArrayOf([Form2.Query2.Fieldbyname('FECHARESERVA').value, 
Form2.Query2.Fieldbyname('HoraInicio').value, Form2.Query2.Fieldbyname('HoraFin').value,Form2.Query2.Fieldbyname('Anulado2').value]), []);

Espero que te sirva, saludos, Tony

RyAr 07-07-2004 12:59:46

Buenas, no tengo campo unico, ya que te comento. Esta tabla esta relacionada con otra mediante el campo EMPRESA2, y lo que hace es almacenar simplmente las fechas de las reservas de los salones, y es que he declarado todos los campos como clave primeria, ya que dos empresas puede tener el mismo dia, y a las mismas horas una reserva, y que ambas no esten anuladas.

El codigo que me has dado, siempre se posiciona en el primer registro de la tabla. ¿Alguna idea mas?.

Gracias por tu paciencia :)

Saludos

tcp_ip_es 07-07-2004 13:10:59

No te entiendo muy bien, vamos a ver si haciendo un locate con esos cuatro campos no existe un registro unico sino varios, es lógico que se posicione en el primero que encuentra, si tu tabla solo tiene esos cuatro campos y hay varios registros con esos cuatro campos iguales lo que deberías hacer es mostrar un dbgrid editable ya que sobre dbedits solo puedes editar/mostrar un solo registro.

Pon un if a ver si te realiza el locate:

Código Delphi [-]
if Form2.Table2.Locate('EMPRESA2;HORAINICIO;HORAFIN;ANULADO2', VarArrayOf([Form2.Query2.Fieldbyname('FECHARESERVA').value, 
Form2.Query2.Fieldbyname('HoraInicio').value, Form2.Query2.Fieldbyname('HoraFin').value,Form2.Query2.Fieldbyname('Anulado2').value]), []) then 
// abres tu form
else
 showmessage('No existen entradas');

Saludos, Tony

RyAr 07-07-2004 13:18:03

Buenas, y gracias por tu explicacion, solo tengo una duda del codigo que me has puesto. Porque en el locate en la primera parte pones EMPRESA2, y excluyes FECHARESERVA, y en la segunda parte incluyes FECHARESERVA y excluyes EMPRESA2.

Una aclaracion, al hacer la consulta selecciono FECHARESERVA, HORAINICIO, HORAFIN, ANULADO2, es decir, que no incluyo el campo empresa, ya que esa parte la meto en el WHERE de la consulta para comprar si es la empresa a o no. Al no incluir EMPRESA2 en la consulta, como modificaria tu codigo.

Gracias, gracias y gracias

tcp_ip_es 07-07-2004 13:31:00

upss se me ha pasado meter el campo empresa :D , faltaría que lo metieses y ya esta....

RyAr 07-07-2004 14:58:04

Buenas, ya me va bien, asi que muchisimas gracias por tu paciencia.

Saludos

ramonibk 08-07-2004 19:35:57

Una pequeña duda.

yo tengo algo parecido y tambien estoy buecando la manera de poder habrir desde el Dbgrid basado en Query un formulario para modificacion de datos.
pero en mi caso se complica por que lo que tengo son barios Query que mandan los datos a un DataSource. el cual es el que pinta en el DbGrid.

Código:


procedure TfrmBuscar.btnBuscarClick(Sender: TObject);

begin
 if rbEmpresa.checked then Begin
  qryEmpresas.close;
  qryEmpresas.ParamByName('Buscar').asString := edit1.Text+'%';
  dsBuscar.dataSet:=qryEmpresas;
  qryEmpresas.Open;
 End Else
 If rbNombre.checked Then Begin
  qryNombre.Close;
  qryNombre.ParamByName('Buscar').asString := edit1.Text+'%';
  dsBuscar.DataSet:=qryNombre;
  qryNombre.Open;
 End Else
 If rbApellido.checked Then Begin
  qryApellido.Close;
  qryApellido.ParamByName('Buscar').asString := edit1.Text+'%';
  dsBuscar.DataSet:=qryApellido;
  qryApellido.Open;
 End Else
 If rbTelefono.checked Then Begin
  qryTelefono.Close;
  qryTelefono.ParamByName('Buscar').asString := edit1.Text+'%';
  dsBuscar.DataSet:=qryTelefono;
  qryTelefono.Open;
  End;
end;

procedure TfrmBuscar.Salir1Click(Sender: TObject);
begin
 Close;
end;

Este es el codigo que estoy Usando para las diferenres busquedas.

tcp_ip_es 09-07-2004 09:54:45

Pues en el evento que abras ese formulario (ya sea un boton, o en el OnDblClick del DbGrid), pon los if que estás colocando en el btnBuscar, y dependiendo de cual este checked, haces un locate sobre una tabla u otra.

Saludos, Tony


La franja horaria es GMT +2. Ahora son las 12:49:11.

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