PDA

Ver la Versión Completa : ejecutar codigo y si tiene valor nulo no de error


edgar_prospero
04-10-2012, 19:16:26
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 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:

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:

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:

if edit1.text = ''
then MessageBox(...)
else Proceso;

O en todo caso un:

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 :

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:


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
[...]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
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
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 (http://es.wikipedia.org/wiki/Indentaci%C3%B3n)es un anglicismo de Indentation.

Saludos,

roman
04-10-2012, 21:53:06
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

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
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.


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
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
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
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: