PDA

Ver la Versión Completa : Eliminar un registro de DBGRid


giulichajari
02-07-2013, 00:08:19
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:

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
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:

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
Me funciono, el caso es que no se actualiza en el acto. Muchas gracias

ecfisa
03-07-2013, 05:20:14
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
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:

{
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
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