Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-07-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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
  #2  
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
  #3  
Antiguo 07-07-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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
  #4  
Antiguo 08-07-2012
Josephjht Josephjht is offline
Registrado
NULL
 
Registrado: jul 2012
Posts: 3
Poder: 0
Josephjht Va por buen camino
y ordeenar los datos por cedula?

Cita:
Empezado por ecfisa Ver Mensaje
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.


brother y para ordenar estos datos del stringgrid original a uno nuveo ordenandolos por cedula de menor a mayor?


sabes que se tiene varios datos por cada ingreso.

nombre apellido cedula ..... ...... .....

henoc Duran 22222 --- ---- ----

Hector Rodrig 333333 .... .... ...

Juan Campos 12 ---- --- ---


lo que sw quiere es que esto pase a una nueva stringggrid de la siguiente manera.


nombre apellido cedula ..... ...... .....

Juan Campos 12 ---- --- ---

Hector Rodrig 1111 .... .... ...

Hector Rodrig 333333 .... .... ...
Responder Con Cita
  #5  
Antiguo 08-07-2012
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.679
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por Josephjht Ver Mensaje
brother y para ordenar estos datos del stringgrid original a uno nuveo ordenandolos por cedula de menor a mayor?
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración
Responder Con Cita
  #6  
Antiguo 03-08-2012
Henoc Henoc is offline
Registrado
NULL
 
Registrado: jul 2012
Posts: 7
Poder: 0
Henoc Va por buen camino
Buenas presento una duda respecto al buscador:

para esta parte del codigo
Cita:
for(int i = SG->FixedRows; i < SG->RowCount && !Existe; i++)
if(SG->Cells[COL_CEDULA][i] == Nombre) Existe = true;
return Existe;
mi duda es: ( i < SG->RowCount) por que ajuro tiene que ser menor? simplemente no puede ser igual? asi de igual si hay 10 registros correria los 10 (1 a 10), pienso que podria ser asi ( i == SG->RowCount) , creo que hay lo estaria igualando ya que si pongo un solo = me dice que posible error, yo entiendo en tu codigo que por ejemplo: son 10 items en el stringgrid, y pongo(i < SG->RowCount) nada mas correria hasta 9 ya que i tiene que ser menor a rowcount.

yo lo entiendo asi:

Cita:
"Para i= a la cantidad de filas arregladas (las que se tildan de una caja gris) ; i sea menor a la cantidad de de filas que haya y que sea diferente( lo del booleano, creo que a eso te refieres con el signo de exclamación); que se sumen i+1"
muchas gracias de antemano y disculpen el testamento
Responder Con Cita
  #7  
Antiguo 03-08-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 amigo Henoc.

Cita:
mi duda es: ( i < SG->RowCount) por que ajuro tiene que ser menor? simplemente no puede ser igual?
La razón es que la propiedad Cells, comienza en las posiciones [0][0] y finaliza en las posiciones [ColCount - 1] [RowCount-1].

Cita:
yo entiendo en tu codigo que por ejemplo: son 10 items en el stringgrid, y pongo(i < SG->RowCount) nada mas correria hasta 9 ya que i tiene que ser menor a rowcount.
0 1 2 3 4 5 6 7 8 9 = 10 items.


La mejor forma de respetar las celdas fijas(en gris) para trabajar con un TStringGrid es usar las propiedades FixedCols, FixedRows por ejemplo:
Código:
 for(int c = StringGrid1->FixedCols; c < StringGrid1->ColCount; c++ )
    for(int r = StringGrid1->FixedRows; r < StringGrid1->RowCount; r++)
     ...
FixedCols nos devuelve el número de columnas que no son desplazables (celdas en gris). FixedRow hace lo propio para las filas.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 03-08-2012 a las 19:45:25. Razón: corregir texto
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 03:34:38.


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