Ir al contenido


Foto

Duda con un IF


  • Por favor identifícate para responder
14 respuestas en este tema

#1 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 27 abril 2009 - 09:47

nuevamente Yo
la duda es tengo un if con otro if adentro como hago para que mmm mejor les pongo el codigo y por favor diganme como hago para que en caso de que se cumpla la primera condicion se termine el proceso !!



delphi
  1. procedure TForm2.Button1Click(Sender: TObject);
  2. var InputStr, trab, comillas, comodin, nom:string;
  3. begin
  4.   InputStr:='nombre';
  5.   if InputQuery(
  6.     'NOMBRE',
  7.     'Nombre del trabajador',
  8.     InputStr) then
  9.     Label1.Caption := InputStr ;
  10.     comillas:='"';
  11.     comodin:= '%';
  12.     zquery1.Close;
  13.     zquery1.SQL.Clear;
  14.     zquery1.SQL.Text:='SELECT cuenta.folio, cuenta.nombre from cuenta where cuenta.nombre like '+comillas+
  15.                       InputStr + comodin + comillas +
  16.                       'GROUP BY cuenta.folio ORDER BY cuenta.nombre ASC' ;
  17.     zquery1.Open;
  18.     While not ZQuery1.Eof do
  19.   begin
  20.       if Zquery1.RecordCount > 10 then
  21.         Application.MessageBox(
  22.         pchar(  'Afina tu busqueda has dado un rango demasiado amplio'),
  23.         pchar('Error'),
  24.         0+16+0);
  25.       end ;
  26.       trab:=(zquery1.Fields[0].text);
  27.       nom:=(zquery1.Fields[1].text);
  28.       Label2.Caption := trab + '' + nom ;
  29.       zquery1.Close;
  30.       zquery1.SQL.Clear ;
  31.   end;
  32. end.


por ejemplo hay si la respuesta del query es mayor a 10 registros
te manda un mensaje de error pero como hago que se termine el proceso hay  ???
o en caso de que no sea asi tome el otro camino ??
  • 0

#2 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 27 abril 2009 - 10:02

Hola
No se exactamente lo que buscas, pero si quieres que se muestren solo un máximo de 10 registros por que no usas un TOP o un Last o algo así­ en la sentencia directamente?.
No se en el caso de MySql cual se usa.
Por otro lado.
Si la sentencia If no comienza Begin y termina End, pues eso?
Saludos
  • 0

#3 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 27 abril 2009 - 10:08



delphi
  1. procedure TForm2.Button1Click(Sender: TObject);
  2. var InputStr, trab, comillas, comodin, nom:string;
  3. begin
  4. InputStr:='nombre';
  5. if InputQuery(
  6.   'NOMBRE',
  7.   'Nombre del trabajador',
  8.   InputStr) then
  9.   Label1.Caption := InputStr ;
  10.   comillas:='"';
  11.   comodin:= '%';
  12.   zquery1.Close;
  13.   zquery1.SQL.Clear;
  14.   zquery1.SQL.Text:='SELECT cuenta.folio, cuenta.nombre from cuenta where cuenta.nombre like '+comillas+
  15.                     InputStr + comodin + comillas +
  16.                     'GROUP BY cuenta.folio ORDER BY cuenta.nombre ASC' ;
  17.   zquery1.Open;
  18.   if Zquery1.RecordCount > 10 then
  19.       Application.MessageBox(
  20.       pchar(  'Afina tu busqueda has dado un rango demasiado amplio'),
  21.       pchar('Error'),
  22.       0+16+0)
  23.   else
  24.   begin
  25.       While not ZQuery1.Eof do
  26.     begin
  27.         trab:=(zquery1.Fields[0].text);
  28.         nom:=(zquery1.Fields[1].text);
  29.         Label2.Caption := trab + '' + nom ;
  30.         zquery1.Close;
  31.         zquery1.SQL.Clear ;
  32.     end;
  33.   end;
  34. end.


  • 0

#4 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 27 abril 2009 - 11:11

Hola
No se exactamente lo que buscas, pero si quieres que se muestren solo un máximo de 10 registros por que no usas un TOP o un Last o algo así­ en la sentencia directamente?.
No se en el caso de MySql cual se usa.
Por otro lado.
Si la sentencia If no comienza Begin y termina End, pues eso?
Saludos


pues si
si se puede limitar que la respuesta sea hasta 10
solo se agrega la clausula LIMIT
pero si lo hago asi solo podria ver los primero 10 resultados
la idea es que si el resultado de la busqueda es demasiado grande de mas datos para localizar



  • 0

#5 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 27 abril 2009 - 11:27

No logro entender del todo lo que buscas, lo que si serí­a recomendable es que sangraras o identaras mejor el código. Sobre todo cuando se trata de construcciones IFs. Yo al menos cuando debo hacer uso de IF sangro el código de esta manera:



delphi
  1. IF (condicion)
  2.     then begin
  3.           end
  4.     else begin
  5.           end;



A mi me marea y hace más difí­cil la lectura cuando se estila el uso de:



delphi
  1. IF (condicion) then ....



Si me lo permites, yo a tu código lo sangriarí­a así­. Hice unos comentarios a tu código para que veas donde es posible que existan los problemas.



delphi
  1. procedure TForm2.Button1Click(Sender: TObject);
  2. var InputStr, trab, comillas, comodin, nom:string;
  3. begin
  4.   InputStr:='nombre';
  5.   if InputQuery('NOMBRE', 'Nombre del trabajador', InputStr)
  6.     then Label1.Caption := InputStr;
  7.  
  8.   // ¿Estas sentencias deben ejecutarse en la parte THEN, ELSE o fuera del IF?:
  9.   {Recuerda: si en una estructura IF, o en cualquier ciclo (excepto el REPEAT) hay que ejecutar más
  10.   de una instrucción debe ir necesariamente encerrada entre begin-end}
  11.  
  12.   comillas:='"';
  13.   comodin:= '%';
  14.   zquery1.Close;
  15.   zquery1.SQL.Clear;
  16.   zquery1.SQL.Text:='SELECT cuenta.folio, cuenta.nombre from cuenta where cuenta.nombre like ' + comillas +
  17.                     InputStr + comodin + comillas +
  18.                     'GROUP BY cuenta.folio ORDER BY cuenta.nombre ASC';
  19.   zquery1.Open;
  20.   While not ZQuery1.Eof do
  21.   begin
  22.     if Zquery1.RecordCount > 10
  23.       then Application.MessageBox(pchar('Afina tu busqueda has dado un rango demasiado amplio'),
  24.                                     pchar('Error'),0+16+0);
  25.   end; // Fin While not Zquery1.Eof
  26.  
  27.   // ¿Estas sentencias deben ejecutarse en la parte THEN, ELSE o fuera del IF?:
  28.   trab:=(zquery1.Fields[0].text);
  29.   nom:=(zquery1.Fields[1].text);
  30.   Label2.Caption := trab + '' + nom ;
  31.   zquery1.Close;
  32.   zquery1.SQL.Clear ;
  33. end; // fin Button1Click
  34.  
  35. end.



Saludos,
  • 0

#6 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 27 abril 2009 - 11:38

ok

si si de hecho se ve mejor y mas claro

GRACIAS
master Delphius

Entonces en resumen
va asi



IF <condicion> then
  // lo que hace el if, si es mas de una sentencia se encierran en begin y end
else
  // lo que pasa en caso contrario del mismo modo si es mas de una sentencia se encasilla en begin end
end //el final del IF




  • 0

#7 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 27 abril 2009 - 12:01

Asi es compañero arroyoj, sólo le hago una aclaración: la instrucción IF no finaliza con END.
Se debe hacer uso de begin-end sólo cuando en la parte THEN o ELSE exista dos o más sentencias. Si existe parte ELSE y la parte THEN está formada por begin-end ese END no debe ir seguido de punto y coma.

Es decir:



delphi
  1. if (condicion)
  2.   then begin
  3.             // sentencias....
  4.           end; // No hay ELSE, va el punto y coma.





delphi
  1. if (condicion)
  2.   then begin
  3.             // sentencias...
  4.           end // Hay ELSE, NO va el punto y coma.
  5.   else begin
  6.         end; // ¡Este punto y coma si va! Aquí­ finaliza la construcción IF



Según lo que interpreto de tu duda y tu código, lo que debes hacer es que una vez realizada la consulta, pongas la evaluación IF para comprobar el lí­mite de registros, si es SI lanzar el mensaje, SINO realizar el ciclo WHILE.

Saludos,
  • 0

#8 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 27 abril 2009 - 12:09

si de hecho asi como me ayudo eduarcol
corre de peluches

pero kiero entenderle bien al IF para no tener que estar pidiendo ayuda para cosas tan mmm sencillas
//en Mexico diriamos andar pidiendo chiche
pero si ya corre ahora solo me falta agregarle un if en el caso de que el resultado del query sea nulo
pero eso creo lo haremos para la version 2.0 por que si queda trabajando todo bien a la primera luego cuando cometes un error ya te kieren crusificar, mejor que se acostumbren a que haya errores

bueno por lo menos eso me funciona aki en la empresa si todo lo hago bien a la primera
el dia que hago algo mal me kierne linchar por que no estan acostumbrados a mi grado de humanidad y el cosiguiente margen de error


  • 0

#9 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 27 abril 2009 - 12:28

jajajja te pasas...  :p
  • 0

#10 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 27 abril 2009 - 12:51

Hola
Me extraña mucho que el recorrido de la tabla este detras de un else :-#, como es el caso de Eduarcol.
Como se puede hacer un eof si este no ha terminado el ciclo?. (6)
La opcion de Delphius es mas logica. 8-|
Lo siento Maistro Eduarcol. :D  (b)
No se, últimamente estoy mas Novato. :p
Saludos
  • 0

#11 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 27 abril 2009 - 01:31

Ok, es mi derecho a replica:

El recorrido esta detras del else. pero no tiene sentido que entre al recorrido si no cumple los criterios, y uno de los criterios es que el resultado sea menor de 10, en este caso si el resultado supera esa cifra lo avisa y se sale, de lo contrario recorre el resultado y lo carga.

Al igual no estoy muy conforme con la forma en que se programo, pero cada quien es libre de programar como se sienta mas comodo :D:D
  • 0

#12 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 27 abril 2009 - 01:53

pero a ver como seria lo correcto digo
apenas soy iniciado y la verdad no ando asi como que muy diestro en esto
puso el OEF por que asi me pasaron un ejemplo, me fije como es el asunto y voy aprendiendo 
pero digo cual seria , no digamos lo correcto por que de las dos maneras funciona
sino que lo mejor ??

Recuerden soy iniciado apenas !!!



  • 0

#13 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 27 abril 2009 - 02:01

Sigamos aqui
  • 0

#14 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 27 abril 2009 - 02:04

pero pss puse otro hilo por que
mmm
me dijeron que de a pregunta por respuesta
varias preguntas en un solo hilo no se vale
por que luego cuando llegue otro iniciado
le va a costar mas entenderle

digo
digo


  • 0

#15 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 27 abril 2009 - 02:15

es que lo hicistes bien amigo, solo que ahora las mejoras al codigo las estan proponiendo en el otro hilo...
  • 0




IP.Board spam blocked by CleanTalk.