Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ejecutar codigo y si tiene valor nulo no de error (https://www.clubdelphi.com/foros/showthread.php?t=81043)

edgar_prospero 04-10-2012 19:16:26

ejecutar codigo y si tiene valor nulo no de error
 
que hay amigos aqui con un pequeño problema resulta que tengo un edit en el cual mediante el evento keypress al meter un numero de codigo me trae el resultado a varios edit bueno hasta ahi todo bien, mi problema esta en que si en ese edit no le pongo ningun valor y le doy enter me arroja un error que dice
Código Delphi [-]
evariant invalid arg error with mensaje 'invalid argument'
entones lo intente con lo siguiente pero no me funciono porque pone el letrero pero no detiene el proceso:
Código Delphi [-]
 if(codigo.Text='')then
  Messagebox(Handle,PChar('el campo no puedo estar en blanco'),PChar('Atencion!!!'),Mb_ok);

Delphius 04-10-2012 19:21:27

Este... sino detiene el proceso no es error de delphi sino de la capa 8 del modelo OSI :D

Seguramente tienes algo:

Código Delphi [-]
if edit1.text = ''
   then MessageBox(....);
Proceso;
Es evidente entonces el porqué continúa con el proceso ¿no? :rolleyes:

Para que funcione deberías tener algo como:

Código Delphi [-]
if edit1.text = ''
   then MessageBox(...)
   else Proceso;

O en todo caso un:

Código Delphi [-]
if Edit1.Text = ''
   then begin
            MessageBox(...);
            Exit;
          end;

Yo me inclino por el if-then-else.

Saludos,

edgar_prospero 04-10-2012 19:30:03

gracias por la respuesta pero sigue marcandome el erro acontinuackion agrego mi codigo a ver si ayuda un poco mas :

Código Delphi [-]
procedure TForm4.codigoKeyPress(Sender: TObject; var Key: Char);
var Total: double;
begin

 if Key = #13 then
  begin


       if codigo.Text='' then
    Messagebox(Handle,PChar('el campo no puedo estar en blanco'),PChar('Atencion!!!'),Mb_ok);

  end
else begin



    query2.Close;
    query2.SQL.Text := 'select * from productos where codigo=:codigo';
    query2.Params[0].Value := codigo.Text;

    query2.Open;


    descripcion.Text := query2.FieldByName('descripcion').asString;
    precio.Text := query2.FieldByName('precio').asString;
   //existencia.Text := query2.FieldByName('existencia').asString;

    form4.clientdataset1.Append;

  form4.clientdataset1['codigo'] := codigo.Text;
  form4.clientdataset1['descripcion'] := descripcion.Text;
  form4.clientdataset1['precio'] := precio.Text;
  form4.clientdataset1['cantidad'] := cantidad.Text;
  form4.clientdataset1['folio'] := folio.Text;
  form4.clientdataset1['fecha'] := fecha.Date;
  form4.clientdataset1['subtotal'] :=  floatToStr( StrTofloat(cantidad.Text) * StrTofloat(precio.Text) );

        form4.clientdataset1.Post;


  query2.Close;
     query2.SQL.Text:='SELECT folio FROM venta ORDER BY folio ASC LIMIT 1';
     query2.Open;
    folio.text := floatToStr( StrTofloat(folio.Text) + StrTofloat(numero.Text)) ;


          ClientDataSet1.First;
   while not ClientDataSet1.eof do begin
      total := total + clientdataset1.FieldByName('subtotal').AsFloat;

      ClientDataSet1.Next;

   end;

      total2.Caption := FormatFloat('###0.00', total);


    begin
      if Key = #13 then
      begin
        Key := #0;
        Perform(WM_NEXTDLGCTL, 0, 0);
        codigo.SetFocus;

      end

    end;

end;

end;

roman 04-10-2012 19:52:07

Parece que no estás poniendo el else en lugar adecuado. Tendría que estar como parte del if interno y no del externo.

// Saludos

Delphius 04-10-2012 19:58:49

Mi ojo compilador me dice que en este código hay un begin-end sobrantes:

Código Delphi [-]
begin
      if Key = #13 then
      begin
        Key := #0;
        Perform(WM_NEXTDLGCTL, 0, 0);
        codigo.SetFocus;

      end

    end;

Justamente el begin y el end exteriores.

En lo demás tendría que probarlo. Por otro lado: Sugiero empezar a identar de forma apropiada el código, por favor. Asi no hay quien le entienda.

Saludos,

Al González 04-10-2012 21:30:29

Cita:

Empezado por Delphius (Mensaje 446352)
[...]Sugiero empezar a identar de forma apropiada el código[...]

Sangrar o dar sangrado, mi estimado Delphius. ;)

Casimiro Notevi 04-10-2012 21:36:38

Yo suelo usar "tabular".
¿De qué palabra habrá derivado "identar"?

Delphius 04-10-2012 21:39:52

Cita:

Empezado por Al González (Mensaje 446364)
Sangrar o dar sangrado, mi estimado Delphius. ;)

Cierto...
Esta palabra me cuesta acordármela. No me acostumbro, me recuerda a la sangre. :D

Saludos,

Delphius 04-10-2012 21:45:54

Cita:

Empezado por Casimiro Notevi (Mensaje 446365)
Yo suelo usar "tabular".
¿De qué palabra habrá derivado "identar"?

Tabular podría servir... uno de sus significados es justamente: accionar el tabulador de una máquina de escribir. Y justamente el teclado ha heredado de éste.

Identar posiblemente haya derivado del inglés... A mi me cuesta sacarme esta palabra.

EDITO: encima que no es correcta la palabra, ¡la digo mal! Es Indentar. Y según wikipedia es un anglicismo de Indentation.

Saludos,

roman 04-10-2012 21:53:06

Cita:

Empezado por Casimiro Notevi (Mensaje 446365)
Yo suelo usar "tabular".
¿De qué palabra habrá derivado "identar"?

Creo que tabular, si bien coincide con la segunda acepción registrada por la RAE

Cita:

2. tr. Accionar el tabulador de una máquina de escribir.
no sería lo más adecuado, pues sólo se refiere al mecanismo usado para lograr el efecto de sangrado en un ordenador, pero este sangrado no corresponde al de disponer los datos en una tabla.

El término indentar seguramente viene del ingles indent, que, presumiblemente deriva de dent, que significa abolladura. Figuradamente podría verse el sangrado como una abolladura en el margen izquierdo del texto.

Por otra parte, me cuesta mucho más trabajo entender el origen del término sangrado para estos menesteres.

Si bien trato de usar el español de forma correcta, también hay que entender que un lenguaje no es un ente estático, sino que evoluciona constantemente. En este caso específico, doy preferencia al anglicismo.

// Saludos

Casimiro Notevi 04-10-2012 21:57:02

Es que yo uso el tabulador de mi "máquina de escribir" electrónica :)

roman 04-10-2012 21:59:30

Sí. Igualmente yo. Pero si usamos tabular por el hecho de accionar el tabulador, también podríamos usar control K I :D De hecho, en Delphi (al menos hasta la versión 7) a diferencia de entornos más modernos, la tecla TAB no sirve para indentar.

// Saludos

Delphius 04-10-2012 22:02:15

Cita:

Empezado por roman (Mensaje 446369)
Por otra parte, me cuesta mucho más trabajo entender el origen del término sangrado para estos menesteres.

Es lo que me pasa a mi, no sólo me suena a sangre, sino que al asociarlo al concepto de sangría lo siento como ajeno... que no calza bien.

Cita:

Empezado por roman (Mensaje 446369)
Si bien trato de usar el español de forma correcta, también hay que entender que un lenguaje no es un ente estático, sino que evoluciona constantemente. En este caso específico, doy preferencia al anglicismo.
// Saludos

Pues si el español como cualquier otro idioma es vivo. De que hay que hacer un esfuerzo por tratar de hablar lo más apropiadamente posible hay ciertas palabras que ha decir verdad, uno se mal acostumbra...

El término correcto en nuestro idioma es sangría/sangrado. Y su concepto es justamente lo que hacemos... dar espacios en blanco para dar comienzo a un "párrafo". Asi que es lo más correcto, aunque a mi mente le suena raro.

Saludos,

Casimiro Notevi 04-10-2012 22:13:29

Cita:

Empezado por roman (Mensaje 446371)
De hecho, en Delphi (al menos hasta la versión 7) a diferencia de entornos más modernos, la tecla TAB no sirve para indentar.

¿Cómo que no?, yo siempre he usado la tecla TAB para indentar/tabular/sangrar.

¿O he entendido otra cosa? :confused:

roman 04-10-2012 22:17:20

Ja, ja. Debí ser más específico.

La tecla TAB en delphi, a diferencia de otros lenguajes, no sirve para indentar bloques de código.

Quizá con algún aditamento como cnpacks, pero no de caja.

// Saludos

maeyanes 04-10-2012 22:27:24

Hola...

Acabo de probar en Delphi 2010 y si puedo "identar" bloques de código usando la tecla TAB (es una instalación nueva, sin asistentes ni nada).


Saludos...

Casimiro Notevi 04-10-2012 22:46:15

Cita:

Empezado por roman (Mensaje 446375)
La tecla TAB en delphi, a diferencia de otros lenguajes, no sirve para indentar bloques de código.

Ahora sí lo entiendo :)
Es como dices, sí.

kapcomx 05-10-2012 20:34:14

cnpack
 
Para evitar todo esto yo instalo en cnpack (buscar en google)
este pack dibuja lineas de diferentes colores en los begin y sus correspondientes end.


Saludos...:cool:


La franja horaria es GMT +2. Ahora son las 07:59:28.

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