Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Obtener contenido de celda en DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=84865)

Kannon 18-12-2013 00:01:28

Obtener contenido de celda en DBGrid
 
Bueno pues tengo una base de datos llamada "Ciudadanos " en la cual hay una tabla llamada "personas" en esta tabla se muestras los campos: código, nombre, edad y genero. en la aplicación de c++ builder (utilizo el XE5) uso un DBGrid para mostrar las búsqueda de un Query.

Una vez realizada esta búsqueda y mostrado su resultado en el DBGrid, cuando se da clic derecho sobre algún registro aparece un Popup en el cual se dan las opciones de: "Modificar Usuario", "Eliminar Usuario" y "Enviar E-mail"( Esto pienso hacerlo mediante Indy SMTP ).

Mi problema es que para poder modificar o eliminar un registro necesito saber en que fila fue el clic, para con ese numero de fila desplazarme hasta la columna 1 ( donde se encuentra el código ) y ahora con este valor poder ejecutar en el query la sentencia: DELETE * FROM personas WHERE idCiudadano= (el valor que recupero del DBGrid). He estado viendo algunas funciones de este pero la verdad no encuentro la forma.

Para la conexión a base de datos ( La cual esta hecha en MySql ) uso: Database, Datasource, Query. Tenia en mente un codigo parecido a este:

Código:

try
        {
          Query1->Close();
          Query1->SQL->Clear();
          Query1->SQL->Add("DELETE * FROM personas WHERE idCiudadano='"+DBGrid1->Fields->+"'");
          Query1->Active=true;

          if(Query1->RecordCount==0)
                {
                  MessageDlg("Error al eliminar el usuario",mtError,TMsgDlgButtons()<< mbOK,0);
                  return;
                }
        }
        catch(...)
        {
          MessageDlg("Error de Eliminación",mtError,TMsgDlgButtons()<< mbOK,0);
          return;
        }
        MessageDlg("Usuario Eliminado",mtInformation,TMsgDlgButtons() << mbOK,0);

Pero la verdad no encuentro la manera de poder lograrlo, les agradezco mucho por la ayuda que puedan brindarme ( soy nuevo en el foro y principiante en delphi, espero haberme explicado bien )

Caminante 18-12-2013 00:32:30

Código Delphi [-]
Query1->SQL->Add("DELETE * FROM personas WHERE idCiudadano='"+DBGrid1->datasource->dataset->fieldbyname('codigo')->asstring+"'");

Bueno creo q mas o menos asi. No manejo C++ buider..

Saludos

Kannon 18-12-2013 01:03:21

Cita:

Empezado por Caminante (Mensaje 470878)
Código Delphi [-]
Query1->SQL->Add("DELETE * FROM personas WHERE idCiudadano='"+DBGrid1->datasource->dataset->fieldbyname('codigo')->asstring+"'");

Bueno creo q mas o menos asi. No manejo C++ buider..

Saludos


Pues la verdad es que me ha dado resultado, es increíble. De verdad te lo agradezco.

ecfisa 18-12-2013 01:28:18

Hola Kannon.

También podrías hacer:
Código:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if (MessageBox(Handle,
                "¿Desea eliminar el registro?","",
                MB_YESNO + MB_ICONQUESTION)== IDYES) {
    Query1->Close();
    Query1->SQL->Text = "DELETE FROM PERSONAS WHERE IDCIUDADANO = :PID";
    Query1->ParamByName("PID")->Value =
      DBGrid1->DataSource->DataSet->FieldByName("IDCIUDADANO")->Value;
    Query1->ExecSQL(); 
  }
}

Saludos :)


La franja horaria es GMT +2. Ahora son las 03:20:40.

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