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 06-07-2012
Henoc Henoc is offline
Registrado
NULL
 
Registrado: jul 2012
Posts: 7
Poder: 0
Henoc Va por buen camino
Post Ayuda con un buscador en un StringGrid

Buenas noches, mi nombre es Johnatan y tengo una duda amigos

desarrolle un buscador de texto para un stringgrid pero tengo un problema, yo ingreso lo que yo quiera, despues lo busco por su cedula, y al buscar otro item me dice que no existe... ¿me podrian hechar una mano?( El fin de esto es que yo ingreso personas, y las tengo que buscar por su cedula)

este es el codigo de mi busqueda
Código:
void __fastcall TForm10::Button1Click(TObject *Sender)
{
int p;
for (p=1;p<=Form5->StringGrid1->RowCount;p++){
if (Edit1->Text == Form5->StringGrid1->Cells[3][p]){
Form9->Nombre->Text = Form5->StringGrid1->Cells[1][p];
Form9->Apellido->Text = Form5->StringGrid1->Cells[2][p];
Form9->CI->Text = Form5->StringGrid1->Cells[3][p];
ShowMessage("Se ha encontrado al Paciente");
p=0;
Form9->ShowModal();
Close();}
if (Edit1->Text != Form5->StringGrid1->Cells[3][p]){ShowMessage("El Paciente no existe"); Edit1->Text=""; p=0;}
break;
}
}
soy bastante nuevo referente a trabajar con c++ builder y orita es que me estan enseñando en mi universidad, gracias de antemano

Última edición por Casimiro Notevi fecha: 03-08-2012 a las 09:57:27.
Responder Con Cita
  #2  
Antiguo 06-07-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 Henoc y bienvenido a Club Delphi

Como a todos los que se inician te invitamos a que leas nuestra guía de estilo.

Yo haría:
Código:
#define COL_CEDULA 3   

bool ExistePaciente(TStringGrid *SG, AnsiString Nombre)
{
bool Existe = false;
  for(int i = SG->FixedRows; i < SG->RowCount && !Existe; i++)
    if(SG->Cells[COL_CEDULA][i] == Nombre) Existe = true;
  return Existe;
}

/* Llamada de ejemplo: */
void __fastcall TForm1::btnBuscarClick(TObject *Sender)
{
 if(ExistePaciente(StringGrid1, Edit1->Text))
   ShowMessage("Existe");
 else
   ShowMessage("No existe");
}
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 06-07-2012
Henoc Henoc is offline
Registrado
NULL
 
Registrado: jul 2012
Posts: 7
Poder: 0
Henoc Va por buen camino
Smile

Antes de todo, muchas gracias por tu ayuda ecfisa, veo que eres bastante profesional con este programa

referente a tu codigo, se lo que quieres hacer, como y con que xD, entendi todo tu codigo pero mi problema es ahora adaptarlo al mio, es decir, no se donde colocar las cosas(como dije soy bastante nuevo en el tema de c++ build referente a puntadores y demas), yo casi que el mes pasado estoy saliendo de pascal xD
mas o menos asi esta arreglado mi codigo:
Cita:
Form5->StringGrid1->Cells[3][x](esta es la columna donde se ubican todas las cedulas)
Form4->Edit1->Text( aqui es donde se compararia el valor ingresado en el stringgrid)
otra cosa, ademas de que tu codigo me da error, me apunta a
Cita:
bool ExistePaciente(TStringGrid *SG, AnsiString Nombre)
y que hace falta o que esperaba un ")"

tambien, y disculpa la molestia, sabrias decirme donde esta el error en mi codigo? (el del post), por que busca una vez perfectamente y a la segunda me dice que no existe?
Responder Con Cita
  #4  
Antiguo 07-07-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
Cita:
referente a tu codigo, se lo que quieres hacer, como y con que xD, entendi todo tu codigo pero mi problema es ahora adaptarlo al mio, es decir, no se donde colocar las cosas(como dije soy bastante nuevo en el tema de c++ build referente a puntadores y demas), yo casi que el mes pasado estoy saliendo de pascal xD
...
otra cosa, ademas de que tu codigo me da error, me apunta a
...
y que hace falta o que esperaba un ")"
Hola Henoc.

Te adjunto un ejemplo funcionando para que puedas revisar con tranquilidad como es la estructura y ubicación de funciones y demás.

El ejemplo realiza la búsqueda sobre la columna 3 en cuyas celdas pongo los nombres de meses del año a fin de simplificar ya que el tipo de dato no altera en absoluto el procedimiento de búsqueda. Está realizado en Builder C++ 6.

Saludos.
Archivos Adjuntos
Tipo de Archivo: zip Henoc.zip (34,5 KB, 13 visitas)
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 07-07-2012
Henoc Henoc is offline
Registrado
NULL
 
Registrado: jul 2012
Posts: 7
Poder: 0
Henoc Va por buen camino
Muchas gracias por tu ayuda eficsa, sinceramente has sido de gran ayuda, pero si no es molestia se me presento un problema con las fechas..

veras el profesor me mando un buscador "Paciente con fecha de nacimiento iguales a:" y "Pacientes con fecha de nacimiento menores a:"
sinceramente se me ha complicado como no tienes idea, ya eh buscado en google y hasta aqui en el foro xD, asi es como lo eh hecho:

en clases.h tengo esto puesto
Cita:
class Todo{
private:
public:
TDateTime fecha;
int x;
void FNI_Busq(TDateTime fecha ,int x); - Fecha de Nacimiento iguales, asi lo llame
despues en clases .cpp tengo puesto:
Cita:
void Todo::FNI_Busq(TDateTime fecha, int x){
for (x=1;x<=Form5->StringGrid1->RowCount;x++){
if (fecha == StrToDateTime(Form5->StringGrid1->Cells[6][x])){
Form15->StringGrid1->Cells[4][fch] = Form5->StringGrid1->Cells[4][fch];
}
}
};
/// Form5->StringGrid1->Cells[6][x] es donde estan las fechas de nacimiento
///Form15->StringGrid1->Cells[1][x] = Form5->StringGrid1->Cells[1][x]; es donde quiero almacenar la busqueda (col 1 es Nombre del Paciente)

y al final de todo en la forma 15, donde quiero realizar la busqueda con el boton
Cita:
void __fastcall TForm14::Button1Click(TObject *Sender)
{
int x;
fechalol->FNI_Busq(fecha1,x);
Form15->Show();
}
y me sale este error
Cita:
Project Project1.exe raised exception class EAccessViolation with message 'Access Violation at address 004032EE in module 'Project1.exe'. Read of Address 00000030'. Process Stoped
Disculpa la molestia en serio, pero eres el profesional mas cercano que tengo por ahora y sinceramente soy novato xD, el profesor creo que nisiquiera dio eso en clase y lo quiere para el lunes
Responder Con Cita
  #6  
Antiguo 07-07-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 Henoc.

Segun entiendo el problema se resume a pasar columnas de un TStringGrid (origen) a un TStringGrid (destino), para lo cuál debes basarte en la elección previa de un criterio que puede ser:
  • Nacidos en la misma fecha.
  • Nacidos en fecha previa.

Creo que lo más sencillo es usar un TEdit para ingresar la fecha y un TComboBox para seleccionar el criterio y cuyos Items sean:
  • Igual (0)
  • Menor (1)

Entonces podrías hacer:
Código:
#define COL_FENAC 6

void PacientesXFecha(TStringGrid *Orig, TStringGrid *Dest, TDate aDate, char TC)
{
int n = Dest->FixedRows, r;

  /* Limpiar destino */
  for(r = n; r < Dest->RowCount; r ++) Dest->Rows[r]->Clear();
  /* Copiar datos */
  for( r = Orig->FixedRows; r < Orig->RowCount; r++) {
    // Igual a
    if(TC == 0 && StrToDate(Orig->Cells[COL_FENAC][r]) == aDate) {
      for(int c= Dest->FixedCols; c < Dest->ColCount; c++)
        Dest->Cells[c][n] = Orig->Cells[c][r];
      n++;
    }
    // Menor a
    if(TC == 1 && StrToDate(Orig->Cells[COL_FENAC][r]) < aDate) {
      for(int c= Dest->FixedCols; c < Dest->ColCount; c++)
        Dest->Cells[c][n] = Orig->Cells[c][r];
      n++;
    }
  }
}
Ejemplo de llamada:
Código:
void __fastcall TForm1::btnBuscarClick(TObject *Sender)
{
  PacientesXFecha(Form5->StringGrid1,
                  Form15->StringGrid1,
                  StrToDate(Edit1->Text),
                  ComboBox1->ItemIndex);
}
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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
ayuda stringgrid Rasecma Varios 1 18-10-2007 10:12:56
Ayuda en el Uso del StringGrid doncowboy OOP 2 24-04-2007 19:26:33
Ayuda con Stringgrid estebanx OOP 4 01-06-2006 20:20:24
Ayuda En DbLookUpComboBox buscador Sql? Solojuegospc.tk Conexión con bases de datos 0 05-07-2005 21:11:09
mysql + delphi ayuda con buscador daregon MySQL 0 10-01-2005 19:54:35


La franja horaria es GMT +2. Ahora son las 17:34:01.


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