Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 09-04-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por roman
¡Caray! Es justo lo que me pasó hace tres o cuatro días. Como venía de bajada puede orillarme y detenerme. Al cabo de dos o tres intentos encendió nuevamente. Aun no he mandado revisarlo, sospecho de la batería pero como ha funcionado..

// Saludos
Afortunadamente un programa que tú haces puedes modificarlo tú mismo. No creo que estes diciendo que el error de zvf deba obviarse ..., no es tu estilo .

Ya que hablamos de mecánica... de la bateria fijo que no es, ya que una vez que está en funcionamiento, la batería no hace nada (sino recargarse). Cuando hace su función es al tiempo de arrancar el vehículo.

Bien podría ser de "pelusas" en el carburador (motores de gasolina) que no dejen pasar la cantidad de gasolina necesaria, filtros de aire muy sucios que no dejan pasar el aire para realizar la mezcla, bujias deterioradas, etc.

Un saludo aceitoso
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #22  
Antiguo 10-04-2006
zvf zvf is offline
Miembro
 
Registrado: abr 2006
Posts: 158
Poder: 19
zvf Va por buen camino
Ya quite muchisimas lineas de codigo, para dejar solo la parte en donde se genera el error y ya la tengo, vean son 4 procedimientos con una tabla que tengo en una base de datos.

Me gustaria enviarles los procedimientos nuevamente para que puedan checar con menos lineas de codigo, para ver si me pueden ayudar a encontrar el error.

Solo que veo que este hilo ya tiene muchas consultas, ¿podrian borrarlas para empezar de nuevo?
Responder Con Cita
  #23  
Antiguo 11-04-2006
zvf zvf is offline
Miembro
 
Registrado: abr 2006
Posts: 158
Poder: 19
zvf Va por buen camino
Bien, el codigo que ahora tengo es el siguiente:

Tengo una tabla de una base de datos llamada categorias, esta tabla guarda lo siguiente:

Es un conjunto de categorias por ejemplo tengo:

Lacteos y dentro de lacteos tengo yogurth y leche.
En otra categoria tengo Carnes frias y dentro de ella tengo jamon y salchichas, de tal manera que la tabla para conocer los descendientes de cada categoria es la siguiente:

cat_nivel : guarda el nivel de la categoria (Lacteos es nivel 1 y sus descendientes son nivel 2 y asi consecutivamente cada nivel)

cat_codigo: para cada nivel, cada categoria tiene un codigo para identificarla, lacteos tiene el codigo 1(nivel 1), carnes frias codigo 2(nivel1), leche codigo 1(nivel2), yogurth codigo 2(nivel2), etc...

cat_padre: guarda el codigo del la categoria de la cual son descendientes, por ejemplo el padre de yogurth y leche es el numero 1, que pertenece a la categoria Lacteos.

cat_descripcion : guarda el nombre de la categoria, por ejemplo Lacteos.

Bien, a cotinuacion pondre cada uno de los 4 procedimientos que mando llamar:
Responder Con Cita
  #24  
Antiguo 11-04-2006
zvf zvf is offline
Miembro
 
Registrado: abr 2006
Posts: 158
Poder: 19
zvf Va por buen camino
El procedimiento para crear los botones es el siguiente:
Código Delphi [-]
Procedure TFPrincipal.CreaBoton;
  var NewBoton : TLabel;
      nombre : string;
      scontador:string;
   begin
       if (band = 0) then  //PRIMER BOTON QUE CREA
               begin
               margen_izq := margen_izq_ini;
               margen_sup := margen_sup_ini;
               band := 1;
               end
        else
               begin
                margen_izq := margen_izq_ant;
                margen_sup := margen_sup_ant + alto_boton + margen_sup_ini;
                if (margen_sup > margen_inf) then
                    begin
                     margen_izq := margen_izq + margen_izq_ini;
                     margen_izq := margen_izq + ancho_boton;
                     margen_sup := margen_sup_ini;
                    end;
               end;
     with NewBoton do
        begin
        NewBoton := TLabel.create(FPrincipal.GroupBoxProd1);
        Parent := FPrincipal.GroupBoxProd1;
        scontador:= IntToStr (contador);
        nombre:= 'Boton';
        Name := nombre+scontador;
        Color:= clMoneyGreen;
        Width := ancho_boton;
        Height := alto_boton;
        Left := margen_izq;
        Autosize := false;
        Top := margen_sup;
        Caption := varCaption;
        OnClick := mostrar_productos;
        margen_izq_ant := margen_izq;
        margen_sup_ant := margen_sup;
      end; //fin del con hacer
  end;
//////  FIN DEL PROCEDIMIENTO CREAR UN BOTON EN TIEMPO DE EJECUCION   /////////
Responder Con Cita
  #25  
Antiguo 11-04-2006
zvf zvf is offline
Miembro
 
Registrado: abr 2006
Posts: 158
Poder: 19
zvf Va por buen camino
El procedimiento para destruirlo es :
Código Delphi [-]
procedure TFPrincipal.DestruirBotones;
  var i, botonesCreados:integer;
begin
  botonesCreados:=FPrincipal.GroupBoxProd1.ControlCount;
 for i:=botonesCreados-1 downto 0 do
       begin
       FPrincipal.GroupBoxProd1.Controls[i].Free;
       end;
 inicializa;
end;
Responder Con Cita
  #26  
Antiguo 11-04-2006
zvf zvf is offline
Miembro
 
Registrado: abr 2006
Posts: 158
Poder: 19
zvf Va por buen camino
El procedimiento siguiente, se manda llamar al dar click en un tlabel:

Código Delphi [-]
procedure TFPrincipal.mostrar_productos(sender : TObject);
var consulta,seleccionado : string;
    avanza,pos : integer;
begin
   pos:= -1;
   seleccionado:=(Sender as TLabel).Caption;
   // busca el seleccionado en el arr_descripciones, ya que lo encuentra ve el cod. en arr_codigos
   avanza :=0;
   while avanza < pos_descripciones do
    begin
     if arr_descripciones[avanza] = seleccionado then
       begin
         pos := avanza;
         avanza := pos_descripciones;
       end;
     avanza := avanza+1;
    end;
    nivel := nivel+1;
    padre := strtoint(arr_codigos[pos]);
    mostrar_productos1;
end;
Responder Con Cita
  #27  
Antiguo 11-04-2006
zvf zvf is offline
Miembro
 
Registrado: abr 2006
Posts: 158
Poder: 19
zvf Va por buen camino
El procedimiento mostrar_productos1 es el que destruye los label existentes y crea nuevos con las categorias, ya dandole un nivel y un padre:

Código Delphi [-]
procedure TFPrincipal.mostrar_productos1;
var  avanza: integer;
     snivel,spadre,sclasif, consulta : string;
begin
       snivel := IntToStr (nivel);
       spadre := IntToStr (padre);
      //CONSULTA EN CATEGORIAS
      ZQNueva.SQL.Clear;
      consulta := 'SELECT `cat_descripcion`, `cat_codigo` FROM `categorias` WHERE `cat_nivel`= '+ #39 +  snivel + #39 +' and `cat_padre`= '+ #39 +  spadre + #39 +';';
      ZQNueva.SQL.Add(consulta);
      ZQNueva.Open;
      if ZQNueva.RecordCount > 0 then
      begin
       pos_descripciones :=0;
       for avanza:=0 to 99 do
           BEGIN
           arr_descripciones[avanza]:='';
           arr_codigos[avanza]:='';
           END;
       while not ZQNueva.Eof do
       begin
        arr_descripciones[pos_descripciones]:= ZQNueva.Fields[0].AsString;
        arr_codigos [pos_descripciones]:= ZQNueva.Fields[1].AsString;
        pos_descripciones := pos_descripciones +1;
        ZQNueva.Next;
       end;
       DestruirBotones;
       for avanza:=0 to pos_descripciones-1 do
         begin
         Contador := Contador+1;
         varCaption:= arr_descripciones[avanza];
         CreaBoton;
         end;
     end
     else
       begin
       nivel := nivel-1;
       showMessage ('Categoria vacia');
       end;
end;
///////FIN DEL PROCEDIMIENTO MOSTRAR PRODUCTOS1  /////////////////////////////
Responder Con Cita
  #28  
Antiguo 11-04-2006
zvf zvf is offline
Miembro
 
Registrado: abr 2006
Posts: 158
Poder: 19
zvf Va por buen camino
Si tienen tiempo, y lo checan, si ven algo extraño me dicen por favor.
Yo nose que es lo que pase, yo veo que el codigo esta bien, pero esos errores siguen apareciendo .

GRACIAS, DE ANTEMANO, GRACIAS POR SU COOPERACION Y AYUDA .
Responder Con Cita
  #29  
Antiguo 11-04-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Demasiadas variables, tantas que es imposible seguir el código. No usas parámetros para nada, sino que usas variables globales que despues tienes que adivinar si se ha modificado en algún sitio o no.

Código Delphi [-]
 if ZQNueva.RecordCount > 0 then
      begin
       DestruirBotones;
       contador := 0;
       while not ZQNueva.Eof do
       begin
          inc(contador);
          CreaBoton(contador, 
                    ZQnueva.Fields[0].AsString, 
                    ZQNueva.Fields[1].AsString
                   );
          ZQNueva.Next;
       end;
     end
     else
       begin
       nivel := nivel-1;
       showMessage ('Categoria vacia');
       end;

No necesitas arr_codigos, ni arr_descripciones, amén que solo tiene 99 posiciones; si la consulta da 200 resultados, adios arrays.

Código Delphi [-]
scontador:= IntToStr (contador);
        nombre:= 'Boton';
        Name := nombre+scontador;
Código Delphi [-]
Name := 'Boton'+ inttostr(contador)
Es lo mismo ¿si o si? Pues no, son 2 variables menos

Variables globales.... ninguna.

El código lo puedes guardar en el Label.Tag.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 11-04-2006 a las 16:09:27.
Responder Con Cita
  #30  
Antiguo 11-04-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Código Delphi [-]
procedure TFPrincipal.mostrar_productos(sender : TObject);
var padre: integer;
begin
//   seleccionado:=(Sender as TLabel).Caption;
// no sé para que se usa "seleccionado"

//no entiendo de donde viene nivel, pero en fins....
   nivel := nivel +1;
   padre := (Sender as Tlabel).tag;
   mostrar_productos1(inttostr(padre),inttostr(nivel));
end;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #31  
Antiguo 11-04-2006
zvf zvf is offline
Miembro
 
Registrado: abr 2006
Posts: 158
Poder: 19
zvf Va por buen camino
¿ Ustedes como harian un codigo para hacer esto que necesito y que funcione?

No importa que lo tenga que cambiar, solo quiero que no mande estos errores.

Y lo que necesito que haga es eso, de un tabla de una base de datos que describí arriba, cree los tlabel en tiempo de ejecucion, y al dar click en uno, muestre sus descendientes.

¿ Tienen sugerencias de como hacerlo?
Responder Con Cita
  #32  
Antiguo 12-04-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Te paso un programita adaptado para tí.

Verás que solo difiere en 2 cositas.
- Uso una "lista" para almacenar los labels que se crean y poder destruirlos comodamente.
- Añado efecto de hyperlink a los labels.... ya una pijotada

Por lo demás es tu codigo.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 10-10-2007 a las 20:56:21.
Responder Con Cita
  #33  
Antiguo 02-05-2006
guiweb guiweb is offline
Miembro
 
Registrado: may 2006
Posts: 17
Poder: 0
guiweb Va por buen camino
un Result??

Una consulta. pimero que todo, no he tenido el tiempo de lerme el codigo, pero a mi me ocurrio un error bastante similar "Abstract Error", esto se ocacionaba por culpa de una Funcion que pedia le devolviese un boolean, asi que lo unico que hice fue colocar un Result:= False; y se me acabo el problema, ojala que esto te pueda ayudar... aveces las cosas mas Obvias se nos escapan
Responder Con Cita
  #34  
Antiguo 08-09-2010
ElielEgo ElielEgo is offline
Registrado
 
Registrado: sep 2010
Posts: 1
Poder: 0
ElielEgo Va por buen camino
Hola mmmm se que quizá estan dando respuesta a la pregunta de alguien más, pero yo tengo el mismo problema y según yo no lo estoy haciendo de una forma erronea.

Les comento, Tengo una forma donde lo único que tengo es un TXMLDocument (name: xml_doc) con el que leo un cuestionario en xml. Este cuestionario por necesidades del mismo varía el número de respuestas que a efectos del sistema se convertirán en radiobuttons. Por tal motivo debo generarlos de manera dinámica cada vez que se cargue una pregunta. Sin embargo en ocasiones y no siempre en el mismo momento me marca este tipo de errores cuando genero los nuevos elementos.

este es mi código

Código Delphi [-]
procedure Tfrm_quiz.cargaPregunta(index:integer);
var
  pregunta:  IXMLNode ;
  arriba, i, max_node_child:integer;
  boton : TbitBtn;
  radio: TRadioButton;
  control : TControl;
  _label : Tlabel;
begin

  boton := nil;
  radio := nil;
  _label := nil;
  control := nil;
  //Index se refiere al número de nodo que leo del xml es decir el reactivo
  if (index <> 0) then
  begin    
    for i:= 0 to (self.ControlCount -1) do
    begin       
        control := self.Controls[0];//Siempre uso el 0 porque es como ir eliminando el primero que encuentra
        freeandnil(control);
    end;
  end;

  pregunta:= self.xml_doc.DocumentElement.ChildNodes[index];
  _label := TLabel.Create(nil);

  with _label do
    begin
      left := 16;
      top:= 16;
      caption := pregunta.ChildNodes['reactivo'].Text;
      parent:=self;
    end;


  max_node_child := pregunta.ChildNodes.Count - 1;
  arriba := 64;
  for i:= 1 to max_node_child do
  begin
    radio := TRadioButton.Create(nil);
    with radio do
    begin
      left := 16;
      top:= arriba;
      arriba := arriba +30;
      width := 560;
      name := 'rdb_'+inttostr(i);
      helpKeyword := pregunta.ChildNodes[i].Attributes['etiqueta'];
      caption := pregunta.ChildNodes[i].Text;
      onClick := evaluaClick;
      parent:=self;
    end;
  end;

  if (index < self.max_node -1) then
  begin
    boton := TbitBtn.Create (nil);
    with boton do
    begin
      caption := 'Siguiente';
      left := 506;
      top := 640;
      name := 'btn_siguiente';
      OnClick := BitBtn1Click;
      parent:=self;
    end;
  end
  else
  begin    
    boton := TbitBtn.Create (nil);
    with boton do
    begin
      caption := 'Finalizar';
      left := 506;
      top := 640;
      name := 'btn_finalizar';
      OnClick := finaliza;
      parent:=self;
    end;
  end;
end;

Muchas gracias a quien me pueda ayudar y seguimos en contacto por aca...
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
Detener un error de access violation de la DbGrid - delphi..... uper Varios 1 21-09-2005 21:54:42
Error Access Violation en Paquetes (Packages) DarKraZY OOP 4 13-09-2005 14:35:31
Maldito ... Access violation Error (QuickReports) User_baja1 Impresión 1 20-04-2005 10:29:32
Error Access Violation samame Conexión con bases de datos 1 01-04-2004 10:48:10
Error Access Violation con Crystal 9 samame Impresión 0 30-03-2004 14:03:17


La franja horaria es GMT +2. Ahora son las 14:02:58.


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