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
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.