FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Eliminar Registros de u n DBGrid C++ Builder
ola amigos. Tengo un problema: Estoy tratando de borrar registros de un DBgrid de los que se denominan "no actualizables", es decir, los que muestran el resultado de una consulta que utiliza dos o más tablas relacionadas. Por ejemplo, supongamos que tenemos una tabla llamada EMPLEADOS con el código de empleado y su nombre, y otra llamada ARTICULOS (de venta) con el código del artículo, el nombre de dicho artículo y el código del empleado que ha vendido dicho artículo.En el DBGrid muestro el resultado de una consulta que indica el código del artículo y el nombre del empleado (no el código) que ha vendido ese artículo. Lo que trato de hacer es eliminar registros del DBGrid, pero no sé como hacerlo. Evidentemente, al hacer DBGrid->SelectedRows->Delete() me da un error, puesto que es un Grid no actualizable.Al hacerlo a través de un elemento UpdateSql y Query->Delete() (con la opcoión CachedUpdate=true) consigo eliminar el registro, pero al volver otra vez al DBGrid sigue estando ahí el registro. ¿Alguien me puede decir como puedo hacerlo? Muchas gracias de antemano. Saludos.
|
#2
|
||||
|
||||
Hola zuzito76.
Agregá otro componente query. El ejemplo lo hice con componentes IBX y uso como nombres IBQuery1 para el query asociado al TDBGrid y IBQueryTmp para el que ejecutará el borrado: Código:
void __fastcall TForm1::btnBorrarClick(TObject *Sender) { IBQueryTmp->Close(); IBQueryTmp->SQL->Clear(); IBQueryTmp->SQL->Add("DELETE FROM TU_TABLA WHERE TU_CAMPO = :VALUE"); IBQueryTmp->ParamByName("VALUE")->Value = DBGrid1->Fields[0]->Value; IBQueryTmp->ExecSQL(); /* si deseas ver reflejado el cambio en el DBGrid tendrías que agregar: IBQuery1->Close(); IBQuery1->Open(); */ } Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#3
|
|||
|
|||
Hola Ecfisa. Acabo de probarlo y me ha funcionado correctamente. Es como tú dices salvo algunos detallitos. Efectivamente tenía que usar un query auxiliar (o temporal), pero en mi versión de builder no tengo elementos IBX, así que lo hice directamente con un query auxiliar y un elemento UpdateSql asociado a dicho query auxiliar para realizar la consulta con DELETE, ya que no lo puedo hacer con el query. Me explico: Haciendo QueryTemp->SQL->Add("DELETE FROM Mi Tabla WHERE...") obtengo un error que dice "Invalid Token Delete...". Así que lo que hice fue lo siguiente:
1)Asociar un elemento UpdateSQL a mi Query auxiliar (o temporal) 2)UpdateSql->DeleteSQL->Text="DELETE FROM Mi Tabla WHERE..."; 3)QueryTemp->Delete(); 4)QueryTemp->Open(); (o QueryTemp->ExecSQL() 5)Como tu bien dices, para ver reflejado el cambio en el DBGrid: Query1->Close(); Query1->Open(); Y ha funcionado perfectamente...Problema solucionado. Así que muchísimas gracias por tu ayuda, llevaba comiéndome la cabeza bastante tiempo... y enhorabuena por este gran foro. Un saludo. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Eliminar registros de ADO | david.rguez | Conexión con bases de datos | 1 | 15-10-2007 13:18:48 |
Eliminar Registros | look | OOP | 4 | 03-10-2007 17:42:17 |
Eliminar y actualizar registros con SQL | Jheysson13 | SQL | 3 | 28-07-2006 22:32:01 |
eliminar opcion de eliminar en un dbgrid | morfeo21 | Varios | 3 | 14-07-2005 17:05:32 |
Eliminar Registros Duplicados ? | Jvilomar | Firebird e Interbase | 14 | 16-03-2004 22:14:35 |
|