Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Eliminar un registro de DBGRid (https://www.clubdelphi.com/foros/showthread.php?t=83569)

giulichajari 02-07-2013 00:08:19

Eliminar un registro de DBGRid
 
Bueno amigos tengo un DBGrid, con la propiedad de SelectRows en true, es decir que si seleeccion una fila se negrea.
Tengo el siguiente codigo en un menu:

Código Delphi [-]
Query1->Close();
        Query1->SQL->Clear();

 Query1->SQL->Add("DELETE FROM GASTO WHERE Fecha = :VALUE");
 Query1->ParamByName("VALUE")->Value = DBGrid1->Fields[0]->Value;
 Query1->ExecSQL();

Y me da error: Creating cursor handle. No se que puede ser.
Tambien me gustaria que se actualize el DBGRid al borrar un dato.

Muchas gracias.

TiammatMX 02-07-2013 00:35:07

Donde hay flechas, hay apaches...
 
Quiero suponer que donde tienes "->" deberían estar puntos "."; si es así, no veo dónde pudiera estar el problema, a menos que al momento de sustituir tu parámetro venga en nulo...

ecfisa 02-07-2013 00:49:21

Hola.

Como dice tiammat, tál como está ese código no tendría que dar error.

Revisa que en el código original no te haya quedado:
Código:

  Query1->Close();
  Query1->SQL->Clear();
  Query1->SQL->Add("DELETE FROM GASTO WHERE Fecha = :VALUE");
  Query1->ParamByName("VALUE")->Value = DBGrid1->Fields[0]->Value;
  Query1->Open(); // <= aquí

Por que si estuvieras usando el método Open en ese caso, te daría exáctamente el error que mencionas.

Saludos. :)

giulichajari 02-07-2013 21:34:54

Respuesta
 
Me funciono, el caso es que no se actualiza en el acto. Muchas gracias

ecfisa 03-07-2013 05:20:14

Cita:

Empezado por giulichajari (Mensaje 463119)
Me funciono, el caso es que no se actualiza en el acto. Muchas gracias

Hola.

Eso sin dudas es debido a que el TDBGrid está asociado a otro componente distinto a "Query1". Al finalizar el borrado tendrías que hacer un Refresh() sobre el otro componente (o cerrarlo y abrirlo).

Saludos :)

giulichajari 03-07-2013 12:46:34

Respuesta
 
Coloque el codigo que me dijiste pero dice
Query1 Cannot perform this operation on a closed dataset, pero no quise ponerle un Query1- open por lo que me dijiste anteriormente.

ecfisa 03-07-2013 13:57:46

Hola.

A ver.... Si DBGrid1 está vinculado a Query1 no se puede hacer de la forma anterior ya que al llamar al método Close() se cierra la consulta que alimenta a DBGrid1 y al referenciar a Fields[x] se elevaría una excepción.

Entonces, hay que salvar el valor del campo previamente al cerrado:
Código:

{
  Variant aux = DBGrid1->Fields[0]->Value; // resguardar valor

  Query1->Close();
  Query1->SQL->Text = "DELETE FROM GASTO WHERE Fecha = :PVALUE";
  Query1->ParamByName("PVALUE")->Value = aux;
  Query1->ExecSQL();
  ...
}

Si el caso fuera otro, sería bueno que explicaras con que consulta o dataset está vinculado el DBGrid y el código completo de la consulta.

Saludos :)

giulichajari 03-07-2013 16:52:20

Respuesta
 
Pues me sigue tirando error, y esto para mi se debe a que el DBGrid esta vinculado a un DataSource, entonces este debe estar cerrado. Gracias


La franja horaria es GMT +2. Ahora son las 16:20:13.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi