Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-04-2010
MARLON1 MARLON1 is offline
Miembro
 
Registrado: nov 2007
Posts: 118
Poder: 17
MARLON1 Va por buen camino
Arreglo!!!

Hola a todos:

Les comento mi problema , estoy trabajando en delphi 1o, pero resulta que quiero guardar una variable en un arreglo que se encuentra en un ciclo for,pero me arroja un error "acces violation at adrres 004078a2 in module 'puerto.exe. write of address 0000000", la verdad nose a ke se deba este error, espero y me haya explicado les dejo el codigo que tengo. saludos
Código Delphi [-]
 
var
 
resultx: array of string;
 uno,dos,Xutm: real;
begin
 
for ini:=0 to fin do begin

 uno:=dbgrid2.DataSource.DataSet.FieldValues['x'];
 dos:=dbgrid2.DataSource.DataSet.FieldValues['y'];
 
"proceso esta informacion y arrojo un resultado"
 
resultx[ini]:=FloatToStr(Xutm)  ;
 
dbgrid2.DataSource.DataSet.Next;
 
end;
 end;
end.
Responder Con Cita
  #2  
Antiguo 08-04-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola, MARLON1, por favor, pon títulos descriptivos a los temas para saber de qué trata, ya que luego a la hora de buscar no sirve de nada a nadie que quiera encontrar algo sobre el mismo tema, te recomiendo que leas la guía de estilo de clubdelphi, gracias.

En cuanto a tu pregunta, está el código un poco "lioso" con variables que no se saben de donde vienen ni qué son, pero de todas formas, me parece que te olvidaste de declarar el tamaño del array.
Código:
resultx: array [xxx] of string;
Responder Con Cita
  #3  
Antiguo 08-04-2010
MARLON1 MARLON1 is offline
Miembro
 
Registrado: nov 2007
Posts: 118
Poder: 17
MARLON1 Va por buen camino
Gracias!!

Cita:
Empezado por Casimiro Notevi Ver Mensaje
Hola, MARLON1, por favor, pon títulos descriptivos a los temas para saber de qué trata, ya que luego a la hora de buscar no sirve de nada a nadie que quiera encontrar algo sobre el mismo tema, te recomiendo que leas la guía de estilo de clubdelphi, gracias.

En cuanto a tu pregunta, está el código un poco "lioso" con variables que no se saben de donde vienen ni qué son, pero de todas formas, me parece que te olvidaste de declarar el tamaño del array.
Código:
resultx: array [xxx] of string;

QUE TAL CASIMIRO:

YA TRATE DECLARANDO EL TAMAÑO DEL ARREGLO PERO AUN ASI SIGUE EL PROBLEMA, PERO MUCHAS GRACIAS DE TODAS FORMAS, NO PUSE EL CODIGO COMPLETO POR QUE PENSE KE SERIA MAS ENREDO, PERO AHORA LO PONGO IGUAL Y SIRVE DE MAS AYUDA.

Código Delphi [-]
var
uno,dos,ttotal,total,A_X,B_Y,Ema,eme,emac,emec,rest,rauz,e1,e2,e2c,c1,alpha1,mA_X,mB_Y,gA_Xr,gB_Yr,m  gA_Xr,mgB_Yr,Huso,Lo,pi,pid,DeL,A,E,N,cose2,V,C2,A1,A2,J2,J4,J6,ALPHA,alp1,BETHA,alp2,alp3,GAMMA,Bo,  Xutm,Yutm :real;
raizc,Xut,Yut:real;
inc,ino,ini,fin: integer;
resultx : array of string;
begin
QUERY2.Close;
QUERY2.SQL.Clear;
QUERY2.SQL.Add('SELECT *FROM DATOS WHERE MAQUINA=:MAQ && DR= && MODULO=:MO && DIA=I && MES=:ME && ANO=:AN');
QUERY2.ParamByName('MAQ').Value:=EDIT1.Text;
QUERY2.ParamByName('D').Value:=EDIT2.Text;
QUERY2.ParamByName('MO').Value:=EDIT3.Text;
QUERY2.ParamByName('DI').Value:=EDIT4.Text;
QUERY2.ParamByName('ME').Value:=EDIT5.Text;
QUERY2.ParamByName('AN').Value:=EDIT6.Text;
QUERY2.Open;
dbgrid2.DataSource.DataSet.First;
ini:= dbgrid2.DataSource.DataSet.Fields[0].Value;

  fin:=0;
  inc:=0;
dbgrid2.DataSource.DataSet.First;
for fin:=0 to ini do begin

 uno:=dbgrid2.DataSource.DataSet.FieldValues['x'];
 dos:=dbgrid2.DataSource.DataSet.FieldValues['y'];
  //grados decimales
        A_X :=  uno; // w
        B_Y :=  dos; // N

     Ema := 6378388.000000;
      eme := 6356911.946130;
  emac:= Ema * Ema;
  emec:= eme * eme;
  rest:= emac - emec;
  rauz:= sqrt(rest);
    e1  := rauz/ Ema;
    e2  := rauz / eme;
    e2c := e2 * e2;
    c1   := Ema*Ema/eme;
  alpha1 := (Ema-eme)/Ema;
      mA_X := -A_X; // w
        mB_Y := -B_Y; // N
  //Convertirgrados rad
  gA_Xr := A_X*3.14159265358979323846/180; // w
        gB_Yr := B_Y*3.14159265358979323846/180; // N
  mgA_Xr := -gA_Xr; // w
    mgB_Yr := -gB_Yr; // N
    Huso := floor(mA_X/6+31);
  Lo   := Huso*6-183;
  pi:= Lo* 3.14159265358979323846;
  pid:= pi /180;
    DeL := mgA_Xr - pid;
  A  := cos(gB_Yr)*sin(DeL);
  E  := 1/2* ln(((1+A)/(1-A)));
    N  := arctan(tan(gB_Yr)/cos(DeL)) - gB_Yr;
  cose2 := cos(gB_Yr)*cos(gB_Yr);
  V  := c1* 0.9996/((1+e2c*cose2))*1/2;
  C2  := e2c/2 * $E*$E * cos(gB_Yr)*cos(gB_Yr);
  A1  := sin(2*gB_Yr);
  A2  := A1* cos(gB_Yr)*cos(gB_Yr);
    J2  := gB_Yr + A1/2;
  J4  := (3*J2 +A2)/4;
  J6  := (5*J4 +A2*cos(gB_Yr)*cos(gB_Yr))/3;
  ALPHA := 0.75 * $e2c;
  alp1:= ALPHA * ALPHA;
  BETHA:= 1.6666666666666666666666666666667 * alp1 ;
  alp2:= ALPHA * ALPHA;
  alp3:= alp2 * ALPHA;

  GAMMA := 1.2962962962962962962962962962963 * alp3;
    Bo  := 0.9996 * c1 * (gB_Yr-((ALPHA * J2) + BETHA )*( J4 - GAMMA ) * J6 );
 
  Xutm := E*V*(1+C2/3)+500000;
  Yutm := N*V*(1+C2)+Bo;
    Listbox2.Items.Add(FloatToStr(Xutm));
    Listbox3.Items.Add(FloatToStr(Yutm));
      resultx[fin]:=FloatToStr(Xutm);  -----------------------AKI ESTA EL ERROR
    dbgrid2.DataSource.DataSet.Next;
 end;
end;
Responder Con Cita
  #4  
Antiguo 09-04-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Te tengo que dar la misma respuesta que antes:

Tienes que darle un tamaño:
Código:
resultx:array [xxx] of string;
Código:
resultx[fin]:=FloatToStr(Xutm);  -----------------------AKI ESTA EL ERROR
Te aconsejo que leas sobre los arrays.
No puede asignar un valor a algo que no existe,

Ejemplo:
Código:
var
  personas : array [3] of string;  // array de 3 elementos
begin
  personas[0] := 'manolo';  // posición 1
  personas[1] := 'maría';   // posición 2
  personas[2] := 'pedro';  // posición 3
  personas[3] := 'juan';   // ERROR !!!  no existe sitio en el array para 4 elementos !!!

end;
Responder Con Cita
  #5  
Antiguo 09-04-2010
MARLON1 MARLON1 is offline
Miembro
 
Registrado: nov 2007
Posts: 118
Poder: 17
MARLON1 Va por buen camino
casimiro:

te agradezco mucho te ayuda, pero como te digo ya lo intente o nose si lo estoy declarando mal el arreglo, lo declaro asi pero aun me marca error, gracias por la ayuda
Código Delphi [-]
resultx : array[1..100] of string;
Responder Con Cita
  #6  
Antiguo 09-04-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
En tu código declaras 'fin' y le das el valor cero.
Luego haces un bucle 'for' desde 0 (el valor de fin) hasta 'ini', que lo sacas de aquí:
Código:
ini:= dbgrid2.DataSource.DataSet.Fields[0].Value;
¿cuánto vale esa variable 'ini'?
Luego asignas al array, en la posición 'fin' un valor.
Código:
resultx[fin]:=floattostr(Xutm)
Pues bien, como al principio has declarado el array
Código:
resultx : array[1..100] of string;
si la variable 'fin' tiene un valor menor de 1 o mayor de 100 ---> ¡¡¡crack!!!
y por supuesto, si la declaras sin tamaño... no puede hacerse eso.
Tienes varias soluciones, pero para empezar te hago una pregunta:
¿qué valores mínimo y máximo puede resultar de aquí: dbgrid2.DataSource.DataSet.Fields[0].Value
Responder Con Cita
  #7  
Antiguo 09-04-2010
JosepGA JosepGA is offline
Miembro
 
Registrado: jun 2007
Ubicación: Tarragona
Posts: 166
Poder: 17
JosepGA Va por buen camino
Hola MARLON1, creo que Casimiro tiene razón, no puedes asignar un valor a una posición del array que no existe, yo tambien pienso que hay tienes el problema.

Un saludo
Responder Con Cita
  #8  
Antiguo 09-04-2010
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
Prueba con SetLength

Como ya te han comentado, si declaras el array con un tamaño y "te pasas", te da error.

Una solución sería aumentar el tamaño del array en tiempo de ejecución,
ya que si sabes (en ejecución) el tamaño máximo de ese array.

Código Delphi [-]
dbgrid2.DataSource.DataSet.First;
SetLength(resultx, ini); // Redimensionado del array
for fin:=0 to ini do begin
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...
Responder Con Cita
  #9  
Antiguo 12-04-2010
MARLON1 MARLON1 is offline
Miembro
 
Registrado: nov 2007
Posts: 118
Poder: 17
MARLON1 Va por buen camino
Gracias a todos

Pues si ese era el error!! que el tamaño de mi arreglo lo declaraba [1..n], y mas abajo fin lo igualaba a "cero", y ps ahi tronaba , muchas gracias a todos, lo unico que tenia que hacer era lo que uds me decian declarar el tamaño de mi arreglo asi [0..n].


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
Arreglo String Carliviris Varios 7 11-09-2006 23:26:26
Recorrer arreglo Perrero80 Varios 3 18-05-2006 22:52:27
De una cadena a un arreglo D-MO PHP 2 06-01-2006 19:19:45
arreglo con Campos ahkimpech Firebird e Interbase 0 01-06-2005 04:26:23
Imprimir un arreglo Luli Varios 2 15-05-2005 07:57:55


La franja horaria es GMT +2. Ahora son las 23:08:29.


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