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)
-   -   Duda DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=78086)

Facu 19-03-2012 19:26:09

Duda DBGrid
 
Primero que nada quiero agradecer a Club Delphi por este espacio, y saludar a todos los programadores/ moderadores que van a leer este tema.

Paso a explicar mi duda.

Tengo un componente DbGrid en un formulario, está asociado con todos los componentes correspondientes a una base de datos en access,
mediante un edit, realizo un filtrado, simulando una busqueda en la base por "nombre", hasta ahi va todo perfecto.

Mi problema es el siguiente, lo que deseo hacer es que estando posicionado sobre una celda del dbgrid presionando un boton, se borre ese registro.

He intentado de varias formas las cuales pondré aquí a continuación.

1- DbGrid1.SelectedRows.Delete; Esto está pésimo.
2- Pensé, ya que hago consultas, borro con las consultas y sucedio otro problema
intento tomar lo que dice el dbgrid en un campo (haya sido reducida la lista con el edit o no) de la siguiente manera
var
nombre:string;
Begin
nombre:= DBgrid1.Fields[0].asString;
ADOQuery1.Close;
ADOQuery1.SQL.Text:= 'DELETE * FROM Herramientas WHERE Nombre='+ nombre;
ADOQuery1.Open;
End;

Creo que son burradas lo que estoy haciendo, si alguien me podria explicar como sacar el campo "nombre" de la celda que estoy clickeando, creo que lo podia borrar sin problemas, espero una respuesta, muchas gracias :)

kapcomx 19-03-2012 19:48:23

tomar nombre
 
Ke tal amigo Facu, mira, la dbgrid esta conectada a una tabla o query, (te soy sincero casi no he traabajado con access),

por lo cual no es necesario que hagas tanto busqueda, al darle un clic en cualquier celda, el puntero se coloca en ese registro de tu tabla o de tu query, asi lo unico que tienes que hacer para llamar ese datos que necesitas es:

Código Delphi [-]
 
TUQUERY1.FieldValues['NOMBRE']
 
o bien 
 
TUTABLA.FieldValues['NOMBRE']
y de ahi lo mandas a donde quieras

Código Delphi [-]
 
tuvariable:= TUTABLA.FieldValues['NOMBRE'];
 
edit1.text:= TUTABLA.FieldValues['NOMBRE'];
 
 
'DELETE  FROM tutabla WHERE Nombre='+ '"' + edit1.text + '"';  //asi seria la sintaxis en Mysql, desconozco como sea para access con ese adoquery
Saludos ...:cool:

Facu 19-03-2012 20:12:51

Hola Kapcomx, gracias por interesarte, y responder.

procedure TForm2.Button1Click(Sender: TObject);
begin
edit1.text:= DataModule5.ADOQuery1.FieldValues['Nombre'];
DataModule5.ADOQuery1.Close;
DataModule5.ADOQuery1.SQL.Text:=
'DELETE * from Herramientas WHERE Nombre=' + '"' + Edit1.Text + '"';
DataModule5.ADOQuery1.Open;
end;

Este es el código.
hay algo curioso, lo borra, pero inmediatamente lanza un error que dice: "ADOQuery1: CommandText does not return a result set."

ecfisa 19-03-2012 20:46:51

Hola Facu.

Por favor cuando incluyas código en tus mensajes, para darles más legibilidad usa los TAG's. Una imágen que explica su uso:

.

En cuanto al error, probá reemplazando la línea:
Código Delphi [-]
  DataModule5.ADOQuery1.Open;
Por:
Código Delphi [-]
  DataModule5.ADOQuery1.ExecSQL;
Cuando realizas consultas que no devuelven un cursor con datos, tales como: INSERT, UPDATE, DELETE, ..., tenés que utilizar ExcecSQL en lugar de Active u Open.


Saludos.

Pd: Muy bueno tu avatar :)

Facu 19-03-2012 22:38:58

Muchas gracias a ambos, problemin solucionado, era eso ExecSQL ahora voy a buscar info para aprender más y que mis consultas sean más precisas y poder ayudar a alguien también alguna vez :)

José Luis Garcí 20-03-2012 08:56:08

Yo al principio y aún de cuando en cuando uso el CREADORSQL, qu es para firebird, te permite de una manera grafíca, hacer más del 50% de tu consulta y es muy facil de manejar el resto. Permitiendo ver el resultado y dandote el código.

Un saludo.

ElDioni 20-03-2012 13:08:30

Hola,

en lugar de borrar el registro en el dbgrid hazlo en el query.

Código Delphi [-]
AdoQuery1.delete;
Esto borra el registro activo de la consulta de tu query que corresponde al que está señalado en el dbgrid.

También puedes hacerlo mediante consulta pero utilizando ExecSQL.

Código Delphi [-]
AdoQuery1.SQL.Text:='DELETE * FROM Herramientas WHERE nombre='+quotedstr(nombre);
AdoQuery1.ExecSQL;

Saludos.

Facu 20-03-2012 14:35:59

Muchas gracias a todos, me he dado cuenta de lo útil que es este foro, me encanta :)

Casimiro Notevi 20-03-2012 14:59:49

Cita:

Empezado por Facu (Mensaje 428035)
Muchas gracias a todos, me he dado cuenta de lo útil que es este foro, me encanta :)

Y a nosotros nos encanta que te encante :), gracias.


La franja horaria es GMT +2. Ahora son las 05:35:04.

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