![]() |
Se puede hacer un else en un While not query1.eof Do?
hola a todos, tengo un inconveniete con un BUCLE, quiero ponerle un else a un While not query1.eof do pero me salta este error:
'END' expected but 'ELSE' found Este es bucle que quiero utilizar:
la idea de este bucle es que busque si el codigo ingresado no se repite en la base de datos... me darian alguna sugerencia? o alguna forma de modificarla para que me funcione, ya probe de muchas maneras sin usar ELSE pero no pude resolverlo Desde ya muchas gracias..... |
Está mal anidado los if then begin end ;)
Fíjate bien... |
ya lo corregi.... pero igual da el mismo error.... :(
|
Y ¿por qué no nos muestras como lo "corregiste"? :p
// Saludos |
Asi esta mi proceso..... ya lo mire muchas veces y creo que esta bien desde mi punto de vista... corrijanme nomas si deje pasar algo... gracias |
eres conciente de que el else despues del end del while... es del primer if verdad?
en todo caso para que hacer un do while si estas verificando si el codigo ingresado existe via un query |
¿y ese código de dónde viene? |
Si indentaras el código apropiadamente sería más fácil de ver. Te falta el end del if exterior. Lo tienes que poner justo despúés del end del while.
// Saludos |
Lo que sucede aquí es una incompresible falta de atención y lectura a la sintaxis y gramática de Pascal. Con todo respeto.
TODA instrucción debe finalizar con ; TODO begin debe ir con su correspondiente end El error se debe a un cierre prematuro debido a un punto y coma colocado después del end de la parte then. Un IF se "cierra" colocando el ; al final. Es decir:
Simple: Repasar gramática y sintaxis. Saludos, |
Cita:
// Saludos |
Hay alguna excepción a la norma, ejemplo:
|
No es una excepción, es sólo que, al no haber sentencia posterior, no es necesario. Como dije, en pascal el punto y coma no termina, separa. Cosa, por ejemplo, que no ocurre en C, en donde el punto y coma sí es un terminador.
// Saludos |
sin temor a equivocarme... lo que negrokau quiere hacer es validar si un codigo ya existe
pero me parece que no lo esta haciendo correctamente podrias usar el evento ONValidate en el campo y ahi mismo podrias verificar mediante un query si el codigo existe o no a mi parecer el do while esta de mas (salvo que en el query te jale varios registros iguales :S) |
Cita:
guardar, es por eso que quiero poner un else al while... |
A ver, un while no lleva un else. Punto.
Ahora, como ya te han observado, más allá del error propiamente sintáctico, tienes un error de concepto. No necesitas recorrer los resultados de una consulta para determinar que un código ya se ha introducido. Únicamente necesitarías saber si la consulta regresa por lo menos un registro, para lo cual cuentas con la propiedad IsEmpty del Query. // Saludos |
Cita:
El "terminador" que se me ocurre es el punto:
Jeje :D Saludos, |
Ya tengo claro que el while no lleva else. Ahora el problema que tengo es que al encontrar un mismo codigo tendria que el focus posicionarse en cod_barra, pero igual recorre todo el algoritmo y guarda..., como le hago para que no guarde si encuentra un mismo codigo y que el focus se situe en cod_barra... |
Cita:
|
yo lo tengo mas o menos asi
como ubicas el ONvalidate? en el query o tabla donde estas grabando la informacion le das doble click al componente y te salen los campos persistentes.. en el campos en el cual pretendes grabar el "codigo", busca en el object inspector.. el evento Onvalidate... ahi colocas el codigo para verificar si existe o no |
Debes explicar primero EXACTAMENTE qué quiéres hacer, porque ese while, aparentemente, no sirve para nada, como ya han comentado.
|
Cita:
si no existe el codigo que guarde:
se entiende ahora lo que quiero hacer? |
entonces guiate del ejemplo que te di usando Onvalidate
la diferencia es que el mensaje te lo manda cuando sale del campo |
Imagino que está comprobando un Edit.text con el valor de un Campo.
Creamos una variable booleana (existe). Si lo encuentra sal del bucle.
Otra opción es comprobar previamente con un select si existe el cod_barra. |
Cita:
por eso menciono que el While esta demas |
Cita:
|
Hola negrokau.
Una opción de búsqueda es mediante un while como intentaste en tu mensaje inicial: Creo que el error en tu primer código, parte de la confusión que tenés con las estructuras de control. Como yá te han dicho más arriba, una cosa es una estructura decisión (if/then/else) y otra una de iteracion (for, while, repeat) aunque las dos últimas puedan evaluar alguna condición. La otra opción, más eficiente, es mediante una consulta SQL: De esta manera tu código inicial queda reducido a:
Un saludo. |
disculpame la ignorancia amigo... pero como nunca hice como esta en el ejemplo que me diste... en donde lo coloco la consulta?
|
Donde quieras, da igual.
Tan sólo recuerda que además deberás declarar la function en la sección private (arriba, al principio del código).
Y ese código, esa function, la pones por ejemplo, al final del todo. |
lo estoy probando pero me salta este error:
Declaration expected but identifier 'private' found algo no estoy haciendo bien creo.... |
¿Dónde lo has puesto?.
El código, pega tu código, que no somos adivinos ;) _______________________________|| _______________________________\/ |
Hola negrokau.
Declararlo como un método como te indica Casimiro es la mejor opción ya que no importa la posición donde ubiques el código de la función:
Otra opción es declararlo como función, pero para ello, la cabecera debe estar declarada antes del método o función que la invoque. Para asegurar el tiro, inmediatamente después a la declaración Implementation, de ese modo la función, tendrá alcance a todo código subyacente a ella:
Saludos. |
| La franja horaria es GMT +2. Ahora son las 01:20:58. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi