Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Problemas con Arreglos

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Problemas con Arreglos Responder citando

Tengo un arreglo para sacar unformación de una consulta de un Query y colocar cada resultado en un Edit, de la sig. forma:

for(i=1;i< 8;i++)
{
Query1->ParamByName("fecha1")->AsDate = StrToDate(fecha1);
Query1->ParamByName("fecha2")->AsDate = StrToDate(fecha2);
Query1->ParamByName("marca")->AsString = yao[i];
Query1->Close();
if (!Query1->Prepared)
Query1->Prepare();
Query1->Open();
a = AnsiString(IntToStr(Query1->FieldByName("conteo")->AsInteger));
Edit(i)->Text = a;
}

Pero me manda el error:
[C++ Error] reporte_capturistas.cpp(49): E2268 Call to undefined function 'Edit'

y ya probé con Edit[i]->Text
Editi->Text
Edit"i"->Text... bla bla bla

Podrían decirme cual es mi error?????
_________________
Sin pena, ni gloria
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Podrias publicar la declaracion de tu arreglo de edit's ya que por lo que veo en tu ejemplo quieres acceder al Text de un arreglo de ellos.... ¿estoy en lo correcto?. Ya que de ser asi deberias haber declarado en Ejecucion tu arreglo.

Código:
TEdit *Edit[N];



Ya que si tienes un Edit1, Edit2, Editn puesto en diseño, nunca de va a funcionar asi...

Saludos!
_________________
"Ser inteligente no es ser mas, solo equivocarse menos y no usar Visual Basic"
Atte.
Victor Yañez

Apoyen el Proyecto OpenSource del Club Builder. Ya tenemos componentes Listos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Gracias Viktor, por contestar, y si,
los tengo como Edit1,Edit2... Editn. Y como tu dices no tendré lo que quiero, haber si me puedes ayudar a como declaro le arreglo de Edit's y como los mando llamar conforme a el código que estoy utilizando, por favor.

Gracias de antemano.
Volver arriba
Mensaje    Asunto: Responder citando

Hola, puedes usar la funcion FindComponent, seria algo como esto, pensando en que tengo cuatro Edit's, desde el Edit1 al Edit4, solo les asigno el valor de i:


Código:
TObject *EditActual;
for(int i=1;i<=4;i++)
{
  EditActual = FindComponent("Edit"+IntToStr(i));
 ((TEdit*)EditActual)->Text = i;
}


Haber si eso te sirve Wink
Saludos!
_________________
"Ser inteligente no es ser mas, solo equivocarse menos y no usar Visual Basic"
Atte.
Victor Yañez

Apoyen el Proyecto OpenSource del Club Builder. Ya tenemos componentes Listos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

ok, déjame lo pruebo en cuanto regrese de comer, gracias Viktor.
_________________
Sin pena, ni gloria
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Que onda Viktor, pues veras que he probado con el código que has enviado pero me envía un error super garrafal ¡¡¡¡¡¡¡ lo probé con:

Código:

 TObject *EditActual[3];
 for(i=1;i< 3;i++)
  {
    Query1->ParamByName("fecha1")->AsDate = StrToDate(fecha1);
    Query1->ParamByName("fecha2")->AsDate = StrToDate(fecha2);
    Query1->ParamByName("marca")->AsString = yao[i];
    Query1->Close();
     if (!Query1->Prepared)
       Query1->Prepare();
    Query1->Open();
   EditActual[i] = FindComponent("Edit"+IntToStr(i));
   a = AnsiString(IntToStr(Query1->FieldByName("conteo")->AsInteger));
    ((TEdit*)EditActual)->Text = a;
 }


y con :

Código:


TObject *EditActual;
for(i=1;i< 3;i++)
 {
   Query1->ParamByName("fecha1")->AsDate = StrToDate(fecha1);
   Query1->ParamByName("fecha2")->AsDate = StrToDate(fecha2);
   Query1->ParamByName("marca")->AsString = yao[i];
   Query1->Close();
   if (!Query1->Prepared)
      Query1->Prepare();
   Query1->Open();
   EditActual = FindComponent("Edit"+IntToStr(i));
   a = AnsiString(IntToStr(Query1->FieldByName("conteo")->AsInteger));
  ((TEdit*)EditActual)->Text = a;
 }


Y con los dos me recorre el ciclo, pero después de que terminal, me envia un error:

Proyect: C:\bin\reporte.exe faulted with message:'access violation at 0x00000000: reda of address 0x00000000'.Process stoped.Use Step or Run to continue.

Y me manda diplomaticamente a la chi&%$$# y sin escalas.

Como ves, alguna idea????
_________________
Sin pena, ni gloria
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Haber, puedes explicar en palabras que es lo que quieres hacer con el resultado de la consulta, ya que al tener el Query dentro del ciclo abres las 3 veces el mismo registro y no creo que sea eso lo que quieres...

Saludos!
_________________
"Ser inteligente no es ser mas, solo equivocarse menos y no usar Visual Basic"
Atte.
Victor Yañez

Apoyen el Proyecto OpenSource del Club Builder. Ya tenemos componentes Listos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Pues mira Viktor, no abro el mismo registro con el Query, si te fijas, tengo un paràmetro dentro del query que lo voy cambiando con el arreglo, yao[N], y de esa forma me envìa diferenctes resultados, y lo quiero hacer por la razòn que pongo en uno de los post, donde especifico que utilizo como 80 Query`s pero me manda un error,(la informaciòn la saco de un .dbf), entosces lo que quiero hacer es, primero poner el resultado del Query en diferentes Edit`s con la informaciòn que necesito y asì no utilizar mucho Query`s.... Me entiendes????


Y muchas gracias por la ayuda que puedas otorgarme, creeme que yo he dado una y dos respuestas a post`s, pero con lo que estoy aprendiendo aquì, algun dia ayudarè màs.
_________________
Sin pena, ni gloria
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hola, lo unico que veo que pueda estar mal, asi a simple vista es que al recorrer tu arreglo, llamado "yao", empiezas desde la posicion 1 (segun el valor de i), otra cosa es que la forma en que tienes hecho el for es para 2 edit's, por lo que entiendo tu arreglo tiene 3 posiciones y tienes 3 Edit's, verdad ? si es asi el codigo tendria que quedar de la siguiente manera:

Código:
TObject *EditActual;
for(i=0;i<= 3;i++)
{
   Query1->ParamByName("fecha1")->AsDate = StrToDate(fecha1);
   Query1->ParamByName("fecha2")->AsDate = StrToDate(fecha2);
   Query1->ParamByName("marca")->AsString = yao[i];
   Query1->Close();
   if (!Query1->Prepared)
      Query1->Prepare();
   Query1->Open();
   EditActual = FindComponent("Edit"+IntToStr(i)+1);
   a = AnsiString(IntToStr(Query1->FieldByName("conteo")->AsInteger));
  ((TEdit*)EditActual)->Text = a;
}



Espero asumir bien, de lo contrario indicame como esta la declaracion del arreglo yao y cuantos Edit's tienes...
Bueno eso, saludos y espero te sirva..
_________________
"Ser inteligente no es ser mas, solo equivocarse menos y no usar Visual Basic"
Atte.
Victor Yañez

Apoyen el Proyecto OpenSource del Club Builder. Ya tenemos componentes Listos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Gracias Viktor, en realidad como te comenté, son como 80 consultas las que haré , pero quería hacer la prueba con solo 2 o tres consultas, y el arreglo esta de la siguiente forma:

Código:
   int i;
   TObject *EditActual[3];
   AnsiString yao[3];
   AnsiString a,b,c;
   yao[1] = "+L%PAFA%";
   yao[2] = "-L%PAFA%";
   yao[3] = "+P%PAFA%";
   AnsiString fec1,fec2,fecha1,fecha2;
   fec1 = AnsiString(DateTimePicker1->Date);
   fec2 = AnsiString(DateTimePicker2->Date);
   fecha1 = fec1.SubString(1,10);
   fecha2 = fec2.SubString(1,10);

 ShortDateFormat = "dd/mm/yyyy";
for(i=1;i< 3;i++)
 {
 Query1->ParamByName("fecha1")->AsDate = StrToDate(fecha1);
 Query1->ParamByName("fecha2")->AsDate = StrToDate(fecha2);
 Query1->ParamByName("marca")->AsString = yao[i];
 Query1->Close();
 if (!Query1->Prepared)
    Query1->Prepare();
 Query1->Open();
 EditActual[i] = FindComponent("Edit"+IntToStr(i));
 a = AnsiString(IntToStr(Query1->FieldByName("conteo")->AsInteger));
((TEdit*)EditActual)->Text = a;
 }


Le ves algún defecto ????
[/code]
_________________
Sin pena, ni gloria
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hola, como te digo, los arreglos comienzan desde 0, es decir tu arreglo yao[3] tiene las pocisiones yao[0], yao[1], yao[2], entonces tu codigo quedaria de la siguiente forma, fijate tambien en la linea donde buscas los componentes, debido a que el i = 0 en el primer ciclo estarias buscando el "Edit0", y solo necesitas un EditActual, no un arreglo de ellos:


Código:
   int i;
   TObject *EditActual;
   AnsiString yao[3];
   AnsiString a,b,c;
   yao[0] = "+L%PAFA%";
   yao[1] = "-L%PAFA%";
   yao[2] = "+P%PAFA%";
   AnsiString fec1,fec2,fecha1,fecha2;
   fec1 = AnsiString(DateTimePicker1->Date);
   fec2 = AnsiString(DateTimePicker2->Date);
   fecha1 = fec1.SubString(1,10);
   fecha2 = fec2.SubString(1,10);

  ShortDateFormat = "dd/mm/yyyy";
  for(i=0;i< 3;i++)
  {
    Query1->ParamByName("fecha1")->AsDate = StrToDate(fecha1);
    Query1->ParamByName("fecha2")->AsDate = StrToDate(fecha2);
    Query1->ParamByName("marca")->AsString = yao[i];
    Query1->Close();
    if (!Query1->Prepared)
       Query1->Prepare();
    Query1->Open();
    EditActual = FindComponent("Edit"+IntToStr(i+1));
   a = IntToStr(Query1->FieldByName("conteo")->AsInteger);
   ((TEdit*)EditActual)->Text = a;



Prueba con eso...
_________________
"Ser inteligente no es ser mas, solo equivocarse menos y no usar Visual Basic"
Atte.
Victor Yañez

Apoyen el Proyecto OpenSource del Club Builder. Ya tenemos componentes Listos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Tienes toda la razón Viktor, ya me corrió a la perfección, perdona si pregunto vanalidades, pero empecé con Builder desde Junio del año pasado.


Muchas gracias otra vez.
_________________
Sin pena, ni gloria
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

No ahi problema Wink que si puedo ayudar lo hare siempre, ademas todos nos equivocamos en "tonteras" en algunos momentos y solo falta que alguien vea tu codigo para decir "ups ahi estaba el error" Razz

Bueno, suerte en eso Wink
_________________
"Ser inteligente no es ser mas, solo equivocarse menos y no usar Visual Basic"
Atte.
Victor Yañez

Apoyen el Proyecto OpenSource del Club Builder. Ya tenemos componentes Listos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.