Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-02-2012
zuzito76 zuzito76 is offline
Registrado
NULL
 
Registrado: mar 2011
Posts: 4
Poder: 0
zuzito76 Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 28-02-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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();
 */
}
Deberás adaptar los nombres de tabla, campo y el índice en el DBGrid que referencia al campo que utilizarás como condición del borrado.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 29-02-2012
zuzito76 zuzito76 is offline
Registrado
NULL
 
Registrado: mar 2011
Posts: 4
Poder: 0
zuzito76 Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 21:43:23.


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
Copyright 1996-2007 Club Delphi