Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   No corre (https://www.clubdelphi.com/foros/showthread.php?t=38309)

silviodp 11-12-2006 12:11:50

No corre
 
Hola a todos, alguien puede ver este codigo y decirme como solucionarlo para que se ejecute ya que me da error en el ELSE //(4), y puedo hacerlo andar.
Código:

procedure TForm14.DBEdit2KeyPress(Sender: TObject; var Key: Char);
Var
 n,m:Variant;
begin //(1)
If Key=#13 Then
 begin //(2)
  ModuloDatos.TblComprobantes.Active:=True;
  If ModuloDatos.TblComprobantes.Locate('Numero',TxtNumero.Text,[]) Then
  begin //(3)
    If ModuloDatos.TblComprobantes.FieldValues['Estado']<>'P' Then
    begin //(4)
      m:=ModuloDatos.TblComprobantes.FieldValues['Cod_soc'];
      If ModuloDatos.TblSocios.Locate('Cod_soc',m,[]) Then
        begin
        TxtSocio.Text:=m;
      end;
      n:=ModuloDatos.TblComprobantes.FieldValues['Cod_periodo'];
      If ModuloDatos.TblPeriodos.Locate('Cod_periodo',n,[]) Then
        begin
        TxtPeriodo.Text:=n;
      end;
      TxtImporte.Text:=ModuloDatos.TblComprobantes.FieldValues['Importe'];
      Confirmar.SetFocus
    Else //(4)
      begin
      ShowMessage('La factura Nº'+' '+TxtNumero.Text+' '+'ya fue cobrada!!!');
      (Sender as TDBEdit).SelectAll;
      end
  Else //(3)
    begin
    ShowMessage('Factura no encontrada. Verifique el Número de la misma.');
    (Sender as TDBEdit).SelectAll;
    end; //(3)
 end; //(1)
end;

Muchas gracias, saludos.

Silvio.-

Neftali [Germán.Estévez] 11-12-2006 12:18:42

Cita:

Empezado por silviodp
...ya que me da error en el ELSE //(4)

¿Y qué error te da?

rcarrillom 11-12-2006 12:54:34

A primera vista a riego de equivocame, antes del Else //4,falta el end que cierra al begin //4

silviodp 11-12-2006 13:12:53

No corre
 
Uno de los errores que da es mas o menos: "END expected but ELSE", pero si le pongo el END como sugirio rcarrillom, me da otro error ya probe agregando END en todas partes y no hay forma que funcione...

Bicho 11-12-2006 13:19:25

Hola, parece que está claro,

Cuenta los BEGIN que hay en la función (8) y los END que has puesto (6), te faltan 2.
Prueba a indentar el código para meter los bloques begin-end unos dentro de otros para poder separarlos y tenerlos más claro visiblemente y no te ocurrirá este tipo de errores, que por otra parte es muy común en tipo de código como el que has puesto, con multitud de condiciones.

Ej:
Código Delphi [-]
If ModuloDatos.TblComprobantes.FieldValues['Estado']<>'P' Then
begin //(4)
     m:=ModuloDatos.TblComprobantes.FieldValues['Cod_soc'];
     If ModuloDatos.TblSocios.Locate('Cod_soc',m,[]) Then
     begin
          TxtSocio.Text:=m;
     end;
     n:=ModuloDatos.TblComprobantes.FieldValues['Cod_periodo'];
     If ModuloDatos.TblPeriodos.Locate('Cod_periodo',n,[]) Then
     begin
          TxtPeriodo.Text:=n;
     end;
     TxtImporte.Text:=ModuloDatos.TblComprobantes.FieldValues['Importe'];
     Confirmar.SetFocus;
end;

Espero te sirva.

Saludos

kuan-yiu 11-12-2006 13:23:37

Te faltan 2 "end", creo que uno antes de cada "else".

Ñuño Martínez 11-12-2006 13:28:44

Cita:

Empezado por Neftali
Cita:

Empezado por silviodp
...ya que me da error en el ELSE //(4)

¿Y qué error te da?

Que haya que preguntar esto a un principiante ya es molesto, ¡pero a alguien que ya lleva 200 mensajes en este foro!

Lo siento, pero es que me saca de quicio :mad: .

silviodp 11-12-2006 15:26:22

No corre
 
Bueno a mi tambien me sacaste de quicio la verdad!!!!, si pregunto es porque probe un monton de formas y no funciona, no me queda otra alternativa, de ultima el foro es para que nos ayudemos, sino tenes ganas ni siquiera contestes..., quien te crees que sos????????, no sabia que Bill Gate se hacia llamar Ñuño Martinez...

silviodp 11-12-2006 15:29:49

No corre
 
Solo queria que vieran el codigo ya que por ahi ven errores en el mismo que no me doy cuenta..., nada mas que eso, igual, gracias.

Bicho 11-12-2006 15:37:10

Jod... comó está la peña últimamente, es que no se puede decir nada a nadie.
Vamos hombre, que estamos en Navidad (casi casi),

Felices fiestas a todos,

Un abrazo

silviodp 11-12-2006 16:12:41

No corre
 
La verdad que ultimamente hay bastante mala onda en el foro!!!!!

Casimiro Notevi 11-12-2006 16:34:07

Cita:

Empezado por silviodp
La verdad que ultimamente hay bastante mala onda en el foro!!!!!

¿en qué lo notaste? :confused:
¿verdad que algunos no se dan por aludidos? :D

Lo que hay oir/leer :eek:

Albano 11-12-2006 16:57:15

Tranquilos...
 
Cita:

Empezado por Bicho
Prueba a indentar el código para meter los bloques begin-end unos dentro de otros para poder separarlos y tenerlos más claro visiblemente y no te ocurrirá este tipo de errores

La verdad es que necesitas un poco mas de orden en la manera de redactar tu codigo y tus preguntas en el foro silviodp y con 200 mensajes debes de tener la experiencia de que "mientras mas detalles des en tus hilos, mas rápido obtienes respuesta".
Aqui ya no te debe marcar el error que mencionas.
Código Delphi [-]
procedure TForm14.DBEdit2KeyPress(Sender: TObject; var Key: Char);
Var
  n,m:Variant;
begin //(1)
  If Key=#13 Then
  begin //(2)
    ModuloDatos.TblComprobantes.Active:=True;
    If ModuloDatos.TblComprobantes.Locate('Numero',TxtNumero.Text,[]) Then
    begin //(3)
      If ModuloDatos.TblComprobantes.FieldValues['Estado']<>'P' Then
      begin //(4)
        m:=ModuloDatos.TblComprobantes.FieldValues['Cod_soc'];
        If ModuloDatos.TblSocios.Locate('Cod_soc',m,[]) Then TxtSocio.Text:=m;
        n:=ModuloDatos.TblComprobantes.FieldValues['Cod_periodo'];
        If ModuloDatos.TblPeriodos.Locate('Cod_periodo',n,[]) Then TxtPeriodo.Text:=n;
        TxtImporte.Text:=ModuloDatos.TblComprobantes.FieldValues['Importe'];
        Confirmar.SetFocus
      end
      Else //(4)
      begin
        ShowMessage('La factura Nº'+' '+TxtNumero.Text+' '+'ya fue cobrada!!!');
        (Sender as TDBEdit).SelectAll;
      end;
    end
    Else //(3)
    begin
      ShowMessage('Factura no encontrada. Verifique el Número de la misma.');
      (Sender as TDBEdit).SelectAll;
    end; //(3)
  end; //(2)
end; //(1)

Bicho 11-12-2006 17:05:38

Todo son maneras de trabajar más cómodamente, yo además de indentar el código suelo colocar los begins en la misma linea del condicional, ya que se que el begin esta siempre en la primera linea, pero no donde está el END. Al tenerlo indentado veo claramente el condicional y el END.
Además otra a la que me acostumbro mucho últimamente es a dejar una linea en blanco siempre antes de un condicional o de cualquier bloque begin-end. Vease:

Código Delphi [-]
procedure TForm14.DBEdit2KeyPress(Sender: TObject; var Key: Char);
Var
  n,m:Variant;
begin //(1)

  If Key=#13 Then begin //(2)
    ModuloDatos.TblComprobantes.Active:=True;

    If ModuloDatos.TblComprobantes.Locate('Numero',TxtNumero.Text,[]) Then begin //(3)

      If ModuloDatos.TblComprobantes.FieldValues['Estado']<>'P' Then begin //(4)
        m:=ModuloDatos.TblComprobantes.FieldValues['Cod_soc'];

        If ModuloDatos.TblSocios.Locate('Cod_soc',m,[]) Then TxtSocio.Text:=m;

        n:=ModuloDatos.TblComprobantes.FieldValues['Cod_periodo'];

        If ModuloDatos.TblPeriodos.Locate('Cod_periodo',n,[]) Then TxtPeriodo.Text:=n;

        TxtImporte.Text:=ModuloDatos.TblComprobantes.FieldValues['Importe'];
        Confirmar.SetFocus
      end
      Else begin//(4)
        ShowMessage('La factura Nº'+' '+TxtNumero.Text+' '+'ya fue cobrada!!!');
        (Sender as TDBEdit).SelectAll;
      end;
    end
    Else begin//(3)
      ShowMessage('Factura no encontrada. Verifique el Número de la misma.');
      (Sender as TDBEdit).SelectAll;
    end; //(3)
  end; //(2)
end; //(1)


Cita:

Empezado por casimiro notevi
Cita:
Originalmente Escrito por silviodp
La verdad que ultimamente hay bastante mala onda en el foro!!!!!

¿en qué lo notaste?
¿verdad que algunos no se dan por aludidos?

Ahí le has dado. :D La verdad es que yo no iba por lo que había escrito Ñuño, pero en fin...

Paz hermanos.

Saludos

Ñuño Martínez 11-12-2006 17:47:10

Cita:

Empezado por Bicho
La verdad es que yo no iba por lo que había escrito Ñuño, pero en fin...

Paz hermanos.

Ciertamente, hoy no debí salir de casa... :(

silviodp 11-12-2006 18:00:21

No corre
 
Bueno muchas gracias, lo voy a probar...
Disculpen las molestias ocasionadas no fue mi intención, por ahi con 500 mensajes aprendo, gracias a la gente perfecta yo puedo aprender.
Saludos.-

Lepe 11-12-2006 19:54:37

silviodp ¿no tienes las GExperts instaladas?

Tiene una opción maravillosa: pones el ratón en un begin pulsas CTRL + ALT + < cursor derecho > y te salta a su end correspondiente.

El hecho de "leerte la cartilla" por el mal identado es una crítica constructiva aunque no lo creas, un buen identado hace que encuentres los errores rápidamente, además de ser una de las principales bases en programación.

Añade un :
Código Delphi [-]
 With Modulodatos do
y verás como el código se clarifica muchísimo más, porque hace las líneas más cortas y por ende lees más rápido.

Si a esto le añades el acceso a campos persistentes tu código quedaría así:
Código Delphi [-]
procedure TForm14.DBEdit2KeyPress(Sender: TObject; var Key: Char);
Var
  n,m:Variant;
begin //(1)

  If Key=#13 Then 
  with ModuloDatos do  
  begin //(2)
    TblComprobantes.Active:=True;
    If TblComprobantes.Locate('Numero',TxtNumero.Text,[]) Then 
    begin //(3)
      If TblComprobantesEstado.Value <>'P' Then 
      begin //(4)
        m:=TblComprobantesCod_soc.Value;
        If TblSocios.Locate('Cod_soc',m,[]) Then 
         TxtSocio.Text:=m;
        n:=TblComprobantesCod_periodo.Value;
        If TblPeriodos.Locate('Cod_periodo',n,[]) Then 
          TxtPeriodo.Text:=n;
        TxtImporte.Text:=ModuloDatos.TblComprobantesImporte.Value;
        Confirmar.SetFocus
      end
      Else 
      begin//(4)
        ShowMessage('La factura Nº '+TxtNumero.Text+' ya fue cobrada!!!');
        (Sender as TDBEdit).SelectAll;
      end;
    end
    Else 
    begin//(3)
      ShowMessage('Factura no encontrada. Verifique el Número de la misma.');
      (Sender as TDBEdit).SelectAll;
    end; //(3)
  end; //(2)
end; //(1)

Fíjate también que he eliminado las líneas en blanco porque hace que tu vista pierda el identado.

Personalmente me gusta colocar el begin debajo de su if ya que aumenta la percepción visual de ese identado; además deja claro que lleva su begin correspondiente y por tanto hay más de una línea de código afectada. Si pones el begin al final de la línea, se olvida muchas veces al leerlo.

Creo que ambas formas de poner el begin pertenecen a estandares distintos, solo es cuestión de decidirse por uno de ellos.

Puede que te parezcan tonterías, el tiempo me dará la razón ;).

Otra cosita más, cuando hiciste ese código estabas algo dormido....
Código Delphi [-]
'La factura Nº'+' '+TxtNumero.Text+' '+'ya fue cobrada!!!'
los espacios en blanco que añades a txtnumero se pueden quitar y añadir en el lado izquierdo y derecho, ahorrando 2 concatenaciones de Strings :D

Saludos

DANY 11-12-2006 21:20:00

Simplemente de acuerdo con el primer comentario de nuño martinez.
Cual es la duda si vos mismo sabes que estan mal los begin end?.
Queres que te resuelvan el trabajo?.
no es una cuestion de mala onda del foro.
A mi siempre me ayudaron, a decir verdad, mas de lo que ayude.
pero siempre con preguntas conceptuales que estoy seguro de que con su sola lectura ayudaban a los demas.
perdon por mi opinion, soy medio zurdo como dicen en latinoamerica.
Saludos...

silviodp 11-12-2006 21:42:22

No corre
 
DANY yo dije que alguna vez no me ayudaron???, solo que hay formas y formas de decir las cosas, ademas no quiero que ni vos ni nadie haga mi trabajo, (apenas que podras con el tuyo...), solo que pedi ayuda porque habia probado varias formas y no andaba, obvio que sabia que el problema era con el begin-end..., además nunca me ayudaste en nada vos.
Insisto en algo: hay veces que por mas que las cosas sean obvias, para algunos, por ahi para otros no tanto y hay que responder amablemente, no hacerse el "hombre" porque no nos vemos y estamos lejos...

DANY 11-12-2006 21:46:01

La verdad nunca es triste, lo que no tiene es remedio...
La verdad no ofende.


La franja horaria es GMT +2. Ahora son las 03:05:01.

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