Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Sigo sin entender el error... (https://www.clubdelphi.com/foros/showthread.php?t=32615)

gandalf_27 10-06-2006 20:16:59

Sigo sin entender el error...
 
Esto es lo que declaro en el Form1: Es decir, si se elije esta opcion...

//////////////////////////////////////////

void Ap (RegAgenda Arr[], int &cont)
{
Agenda4=fopen("C:\\Asegurados.dat","a+b");
fseek (Asegurados,0,SEEK_SET);//Busca el inicio del archivo
cont=0;
IniArre(Arr,tam);
Ini_R(Reg);
AnsiString g;
while (!(feof(Asegurados)) && (cont<=tam))
{
fread(&Reg,sizeof(Reg),1,Asegurados);
g=Form7->Edit1->Text.c_str();
if (strcmp(Reg.ApeNom,"")!=g)
{
cont++;
Arr[cont]=Reg;
}
}
cont--;

}

/////////////////////////////////////////

void Apellido()
{
int i,j,P;

Verificar(P);
if (P!=1)
{
Aseguados=fopen("C:\\Asegurados.dat","a+b");
Form1->Hide();
Form7->Label1->Caption=("Ingrese Apellido a buscar");
Form7->Edit1->Text;
Form7->Edit1->Clear();
Form7->Edit1->Visible=true;
Form7->Show();
Form7->Edit1->SetFocus();
i=0;
Ap(Arre,i);
Ordenar(Arre,i);
Mostrar(Arre,i);
fclose(Asegurados);
}
}
/////////////////////////////////////////////

Y en el Form7, que es donde se va a producir la busqueda....

if (Form1->RadioGroup1->ItemIndex==4)
{
Edit1->Clear();
Edit1->Visible = true;
Edit1->Enabled = true;
Form7->Edit1->Clear();
Form7->Show();
if (Form7->Edit1->Text=="-1")
ShowMessage ("No se acepta campo vacío. Ingrese una opcion");
else
{
AnsiString g;
g=Form7->Edit1->Text;
strcpy(nom,g.c_str());
while (!(feof(Asegurados))&& (i<=tam))
{
fread(&Reg,sizeof(Reg),1,Asegurados);
if (nom==Reg.ApeNom)
{
i=i+1;
Arre[i]=Reg;
}
}
if (i>0)
{
if (i>1)
i--;
Ordenar(Arre,i);
Muestra (Arre,i);
Form7->Edit1->Clear();
}

//////////////////////////////////////////////////

Por que...al cambiar del Form1 al Form7, es dcir en ese cambio de ventana me dice que no se puede convertir String en Double...Sigo sin entender....Algiuen detecta mi error?????Desde ya...muchas gracias

OSKR 11-06-2006 16:35:46

Código:

void Ap (RegAgenda Arr[], int &cont)
{ Agenda4=fopen("C:\\Asegurados.dat","a+b");
  fseek (Asegurados,0,SEEK_SET);//Busca el inicio del archivo
    cont=0;
    IniArre(Arr,tam);
    Ini_R(Reg);
    AnsiString g;
    while (!(feof(Asegurados)) && (cont<=tam))
          { fread(&Reg,sizeof(Reg),1,Asegurados);
              g=Form7->Edit1->Text.c_str(); //No es necesario esto ultimo
              if(strcmp(Reg.ApeNom,"")!=g)//Comparando un AnsiString con un
                                                    //número?

                { cont++;
                          Arr[cont]=Reg;
                }
  }
  cont--;
}

Esa estructura llamada Reg debería ser inicializada antes de escribir en ella con el fread, xq si esta fallase...como sabrías si escribió o no? al menos q lo iguales a un entero y ahí tendrás la cantidad de caracteres leídos,
Supón q nada se leyó....entonces Reg.ApeNom es nula, como está en una estructura y es un arreglo (no declarado como puntero...me imagino) entonces para saber si realmente hay algo allí sería
Código:

if(Reg.ApeNom[0]!=0) // o NULL o '\0'...igual
luego...si no es nula, puedes comparar con el AnsiString g así:
Código:

if(AnsiString(Reg.ApeNom)!=g)
ya q el operador == y el != están sobrecargados para el AnsiString
Código:

Arr[cont]=Reg;
Supongo q RegAgenda es una clase con el operador = sobrecargado para soportar estructuras como Reg, sino fuese así.....pues habría q copiar el contenido...y suponiendo q te fuera válido esa asignación yo lo haría así:
Código:

memcpy(&Arr[cont],&Reg,sizeof(Reg));
No he ojeado el resto del código, empieza por arreglar esta parte....otra cosa..con el Debugger puedes saber en q línea ocurrela excepción.


La franja horaria es GMT +2. Ahora son las 16:55:35.

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