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 11-11-2009
fedee fedee is offline
Miembro
 
Registrado: feb 2009
Posts: 14
Poder: 0
fedee Va por buen camino
Problema con funcion VOID

Es un poco rústica la función, pero me sale un problema.. que es el siguiente..

"Access violation at address 00401f59 in module 'SEPAF.exe'. Read of address 72745313"

Lo que hace la funcion es ver si ese día tal persona cumple años y si es asi la agrega a un ComboBox... El codigo es el siguiente..



void cumpleaños_h() {

Form1->ComboBox3->Clear();
TDateTime dia;
AnsiString aux = dia.CurrentDate();
aux = aux.SubString(0,5);
AnsiString año = dia.CurrentDate();
año = año.SubString(7,9);
paciente p;
fstream archi("C:/Pacientes.dat", ios::in | ios::binary | ios::app);
archi.seekg(0, ios::beg);

archi.read((char*)&p,sizeof(p));
while(!archi.eof())
{
AnsiString aux1 = p.fecha_nac;
AnsiString año1 = p.fecha_nac;
aux1 = aux1.SubString(0,5);

if(aux1 == aux){
AnsiString d;
char z[40];
char x[3];
AnsiString r = ", ";
char y[45];
AnsiString q = " (";
AnsiString t = ")";

strcpy(z,p.apellido);
strcpy(y,p.nombre);
strcpy(x,r.c_str());

strcat(z,x);
strcat (z,y);

año1 = año1.SubString(7,9);
int años = StrToInt(año) - StrToInt(año1);
AnsiString total = z+q+años+t;


Form1->ComboBox3->Items->Add(total);

}
archi.read((char*)&p,sizeof(p));
}


¿Puede ser que sea problema de los "ios::" en el fstream?

Desde ya muchas gracias!
Responder Con Cita
  #2  
Antiguo 12-11-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
fede, deberías mostrarnos la declaración de la estructura paciente y el formato del archivo pacientes.dat, para poder analizar porqué tienes ese error de memoria, que seguramente se debe a un puntero mal utilizado.

Esta parte del código puede resultar problemática por poder provocar un desbordamiento de buffer:
Código:
strcpy(z,p.apellido);
srcpy(y,p.nombre);
strcpy(x,r.c_str());

strcat(z,x);
strcat (z,y);
Saludos.
Responder Con Cita
  #3  
Antiguo 12-11-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
A falta de conocer la estructura paciente y como está organizado el archivo Pacientes.dat, considera que tu código se podría ir optimizando de esta manera:

Código:
void CumpleAnos()
{
    WORD D_Hoy, M_Hoy, D_Cumple, M_Cumple, Year;

    DecodeDate(Now(), Year, M_Hoy, D_Hoy);

    paciente p;
    fstream archi("C:/Pacientes.dat",  ios::in | ios::binary | ios::app);
    archi.seekg(0, ios::beg);

    archi.read((char*)&p,sizeof(p));
    while(!archi.eof()){
      TDate Nacimiento(p.fecha_nac);
      DecodeDate(Nacimiento, Year, M_Cumple, D_Cumple);
      if(M_Hoy == M_Cumple && D_Hoy == D_Cumple){
          int edad = ((int)(Now() - Nacimiento)) / 365;
          String Total =  String(p.apellido) +  ", " + String(p.nombre);
          Total = Total + " (" + IntToStr(edad) + ") ";
          Form1->ComboBox3->Items->Add(Total);
       }
       archi.read((char*)&p,sizeof(p));
    }
}
En lugar de usar un fstream puedes usar cualquier otro sistema de manejo de ficheros. Tu decides lo que tienes que hacer.

Saludos.

Última edición por escafandra fecha: 14-11-2009 a las 01:11:38.
Responder Con Cita
  #4  
Antiguo 12-11-2009
fedee fedee is offline
Miembro
 
Registrado: feb 2009
Posts: 14
Poder: 0
fedee Va por buen camino
Código:
struct paciente {
struct paciente {
    char apellido[50];
    char nombre[50];
    char sexo[50];
    char edad[50];
    char dni[50];
    char fecha_nac[50];
    char ciudad[50];
    char provincia[50];
    char direccion[50];
    char telfijo[50];
    char telcel[50];
    char email[50];
    char estado_civil[50];
    char hijos[50];
    char profesion[50];
    char n_tajeta[50];
    char ini_act[50];
    char fin_act[50];
    char importe_pago[50];
    char forma_pago[50];
}

y al final arreglé la funcion cambiando lo siguiente..

Código:
...
...
fstream archi("C:/Pacientes.dat",  ios::in | ios::binary | ios::app);
    archi.seekg(0, ios::beg);
...
...
por esta:

Código:
...
...
fstream archi("C:/Pacientes.dat",  ios::in | ios::binary );
// archi.seekg(0, ios::beg);
...
...

MUCHAS GRACIAS ESCAFRANDA POR ESA OPTIMIZACION, PERO NO ME RECONOCE LA PALABRA "WORD"
Responder Con Cita
  #5  
Antiguo 12-11-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
WORD es un unsigned short:
Código:
typedef unsigned short WORD,  PWORD;
Este te lo debería reconocer si estás compilando incluyendo windows.h, en otro caso o utilizas la definición descrita arrba o pones unsigned short.

Prueba el ejemplo que te puse, yo no lo he podido probar ni compilar por desconocer la estructura paciente y el archivo de datos, pero creo que debe funcionar.

Cita:
Empezado por escafandra Ver Mensaje
...En lugar de usar un fstream puedes usar cualquier otro sistema de manejo de ficheros...
Para este caso, los streams no aportan ventajas, quizás el uso del sistema estándar de archivos del C o la misma API de windows te sirve igual y consume menos recursos.

No se que compilador estás usando pero te diré que en el Builder 5 encontré y reparé un bug en la función
Código:
template<class charT, class traits>
  basic_istream<charT, traits>&
  basic_istream<charT, traits>::
  getline(char_type *s, streamsize n, char_type delim);
Posiblemente ese bug se mantuvo por el escaso uso que se le suele dar a los stream, aunque en determinadas ocasiones son realmente potentes.

Saludos.
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
problema con funcion!! MOCOSO07 HTML, Javascript y otros 0 12-01-2009 16:39:40
Problema con una funcion Alliance Varios 5 09-10-2008 02:38:32
Problema con declaración de función vivamotos C++ Builder 1 25-04-2008 10:35:56
Problema con la funcion mail JulioGO PHP 2 26-09-2005 11:24:15
problema al llamar una función sgarrido Varios 3 27-07-2004 01:14:33


La franja horaria es GMT +2. Ahora son las 18:09:53.


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