Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Eliminar registro (https://www.clubdelphi.com/foros/showthread.php?t=73265)

lucas05 12-04-2011 04:34:25

Eliminar registro
 
Hola, podrian decirme como eliminar un registro de un DBGrid. Utilizo Delphi y MySQL.
En el form tengo una grilla, un ADOQuery y un Button.
Lo que pretendo es poder eliminar cualquier registro haciendo clic en el button.

Muchas Gracias.

Casimiro Notevi 12-04-2011 09:36:49

Al final de esta página, abajo del todo, tienes varios enlaces que te ayudarán.

lucas05 13-04-2011 17:20:57

Hola, este es el código que pongo en el button para borrar un registro de un dbgrid. Lo hago correr y no aparece ningun error, pero no funciona.

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('delete articulo');
ADOQuery1.SQL.Add('where articulo.id_articulo=id_articulo');
ADOQuery1.Parameters.ParamByName('id_articulo').Value:=DBGrid1.DataSource.DataSet.Fields[id_articulo].AsInteger;
ADOQuery1.ExecSQL;
ADOQuery1.Open;

Pueden mirar el código y decirme donde puede estar el error, sobre todo la linea que esta en negrita (creo que ese es el problema).
Pregunta ¿Para borrar un registro solo es suficiente eliminar el campo clave, o hay que eliminar todos los campos de ese registro?

Muchas Gracias

oscarac 13-04-2011 17:31:57

Cita:

Empezado por lucas05 (Mensaje 396921)
ADOQuery1.SQL.Add('where articulo.id_articulo=id_articulo');

me parece que el problema esta aqui... no estas definiendo ningun parametro

prueba asi
Código Delphi [-]
ADOQuery1.SQL.Add('where articulo.id_articulo=:id_articulo');

nota que he puesto : antes de id_Articulo
y nos comentas

Casimiro Notevi 13-04-2011 17:33:05

La sentencia para borrar es:

delete from tabla where loquesea.

Caro 13-04-2011 18:58:13

Hola lucas05, cuando ejecutas una consulta que va hacer cambios en tu BD (insert, update, delete) debes utilizar solo ExecSQL, por lo que esto "ADOQuery1.Open;" esta demas.

Con lo que te hemos mencionado, tu consulta quedaría asi:

Código Delphi [-]
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Delete From articulo');
ADOQuery1.SQL.Add('Where id_articulo=:id_articulo');
ADOQuery1.Parameters.ParamByName('id_articulo').Value:=DBGrid1.DataSource.DataSet.Fields[id_articulo].AsInteger;
ADOQuery1.ExecSQL;

Si te da algún error, no te olvides mencionar el error que te esta saliendo.

Saluditos

oscarac 13-04-2011 19:05:59

:) me olvide comentarte lo del open...

lucas05 13-04-2011 20:40:27

Muchas gracias a todos por responder.
Realice los cambios que me sugirieron (puse los dos puntos antes del id_articulo y borre la linea ADOQuery1.Open;)
Cuando lo hago correr aparece el siguiente error:
Undeclared identifier: 'id_articulo'
El error esta en esta linea (puedes ser el id_articulo que esta entre corchetes):
Query1.Parameters.ParamByName('id_articulo').Value:=DBGrid1.DataSource.DataSet.Fields[id_articulo].AsInteger;

Nuevamente Muchas Gracias.

Casimiro Notevi 13-04-2011 21:02:52

Cita:

Empezado por lucas05 (Mensaje 396976)
Query1.Parameters.ParamByName('id_articulo').Value:=DBGrid1.DataSource.DataSet.Fields[id_articulo].AsInteger;

Yo no conozco la nomenclatura con ADO, pero seguramente faltan las comillas del nombre del campo.

Código Delphi [-]
Query1.Parameters.ParamByName('id_articulo').Value:=DBGrid1.DataSource.DataSet.Fields['id_articulo'].AsInteger;

lucas05 14-04-2011 23:19:34

Hola, logre eliminar un registro de una grilla, pero aparecio un pequeño problemita. Les explico:
En el Form1 tengo una grilla y un button, cuando hago clic en el button(form1) abro el Form2 donde muestro todos los datos (en distintos dbedit) del registro seleccionado. Luego hago clic en el button eliminar(form2) que tiene el siguiente codigo para eliminar el registro.
Form1.ADOQuery1.delete;
Form1.ADOQuery1.SQL.Clear;
Form1.ADOQuery1.SQL.Add('delete from articulo where id_articulo= :id_articulo');
Form1.ADOQuery1.Parameters.ParamByName ('id_articulo').Value:=Form2.DBEdit1.Text;
Form1.ADOQuery1.ExecSQL;

Luego de que se borro el registro cierro el form2 y vuelvo al form1 donde esta la grilla.
El registro se borro, pero los otros registros que no borre no se pueden ver, la grilla queda en blanco. Aclaro que el unico registro que se borro es el que seleccione, los otros no se borraron pero para poder verlos debo volver a compilar el programa.
Espero haber sido claro y que puedan ayudarme.

Muchas Gracias.

oscarac 14-04-2011 23:39:28

los datos que estan en el FORM1 en la grilla o grid...

son de una tabla? de un query?

lo que puedes hacer es refrescar la tabla o query

Código Delphi [-]
 
qryAlimentos.Refresh;

Me parece que la Primera linea esta demas
Código Delphi [-]
 
Form1.ADOQuery1.delete;
Form1.ADOQuery1.SQL.Clear;
Form1.ADOQuery1.SQL.Add('delete from articulo where id_articulo= :id_articulo');
Form1.ADOQuery1.Parameters.ParamByName ('id_articulo').Value:=Form2.DBEdit1.Text;
Form1.ADOQuery1.ExecSQL;

lucas05 15-04-2011 05:56:20

Hola oscarac, los datos en la grilla son de un ADOQuery.
Segui tu consejo y agrega la siguiente linea al final de mi codigo:
Form1.ADOQuery1.Refresh;
Pero sigue sin mostrar nada.
Lo que necesito hacer luego de eliminar el registro es refrescar el adoquery en tiempo de ejecución. Como puedo hacer eso.

Muchas Gracias

oscarac 15-04-2011 06:21:55

mmmm otra cosa que se me ocurre es que lo cierres y lo vuelvas a abrir


La franja horaria es GMT +2. Ahora son las 16:06:31.

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