Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-09-2004
Avatar de Nuria
Nuria Nuria is offline
Miembro
 
Registrado: may 2003
Posts: 531
Poder: 22
Nuria Va por buen camino
Hola dsa!

Nunca se va cumplir la condición y por eso te salta las líneas.

Cuando haces un locate, te posicionas en el registro de la tabla, no puedes posicionarte en dos registros de la tabla a la vez por lo tanto nunca se cumple el if. Espero haberme explicado bien.

En vez de locate utiliza lookup o bien create una nueva consulta.

Espero que te sirva. Saludos!
Responder Con Cita
  #2  
Antiguo 03-09-2004
dsa132132 dsa132132 is offline
Miembro
 
Registrado: jul 2004
Posts: 29
Poder: 0
dsa132132 Va por buen camino
Hola!!

He probado con esto;

if (not (DataModule.Query1.Lookup('param1;param2', VarArrayOf(['edit1.text','edit2.text', [])))

Pero tanto con Lookup como con Locate me salen los mismos errores;
Missing operator or semicolon
Ordinal type required
Incompatible types: 'Integer' and 'String'

Por lo que he visto en la ayuda del Delphi lo podria hacer tambien con un Locate. Ahora ya no se qué hacer.

Muchas Gracias!!
Responder Con Cita
  #3  
Antiguo 03-09-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Debieras de optar por la segunda opción que te indica Nuria, es decir crear una consulta con el predicado Or si obtienes algún registro haces lo que proceda.......


Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #4  
Antiguo 03-09-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
El planteamiento de dsa132132 es totalmente correcto, lo que pasa es que quizás en lugar de AND ha de ser un OR (tampoco se exactamente lo que quiere conseguir), pero el uso de los 2 Locates en el IF no es erróneo

Código Delphi [-]
if (not (DataModule.Query1.Locate('param1', Edit1.text, [])) and //quizás OR???
   (DataModule.Query1.Locate('param2', edit2.text, [])) then 
  Application.Messagebox ( ........
Básicamente lo que hace el if este es que si no existe un registro en el que el campo "param1" sea igual a Edit1.Text (es decir, Param1 <> Edit1.Text) y existe un registro en el que el campo Param2 sea igual a Edit2.Text, muestre el mensaje

Quizás es que Param1 y Param2 no son los nombres de los campos??? Si fuera esto, tendrías que quitarle las comillas

No obstante, también creo que lo del SQL es una muy buena opción (por no decir la mejor si la tabla es grande)
Responder Con Cita
  #5  
Antiguo 03-09-2004
Avatar de Nuria
Nuria Nuria is offline
Miembro
 
Registrado: may 2003
Posts: 531
Poder: 22
Nuria Va por buen camino
Quizás no me explique bien, el uso de dos locates es correcto pero no el AND, porque nunca se cumplirá esa condición, no por otra cosa. Menos mal que siempre está cadetill para explicarlo mejor....;rolleyes:
Responder Con Cita
  #6  
Antiguo 03-09-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
El problema es que no nos dice que comprobación es la que quiere realizar. Yo por ejemplo para eliminar un cliente supongamos que la condición es que no tenga ninguna factura ni ningún albarán.

nContro:=0;

Busca Facturas.
Si encuentra 1, no interesa si tiene más ó no.
nContro:=nContro+1;

Busca Albaranes, lo mismo que el anterior.
nContro:=nContro+1;

Código Delphi [-]
if nContro > 0 then
ShowMessage('Imposible eliminar el cliente tiene albaranes o facturas activas.');

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.

Última edición por marcoszorrilla fecha: 03-09-2004 a las 15:30:12.
Responder Con Cita
  #7  
Antiguo 03-09-2004
dsa132132 dsa132132 is offline
Miembro
 
Registrado: jul 2004
Posts: 29
Poder: 0
dsa132132 Va por buen camino
Hola a todos;

Quizás he sido yo desde un principio el que no se ha explicado con claridad, lo que intento es lo siguiente;

Deseo eliminar en registro de la Base de Datos pero antes hago la comprobación de que ese registro existe en la Base de Datos. Hasta aqui bien.

Ese registro que deseo eliminar tiene 3campos como clave primaria (antes había puesto sólo 2 por simplificar mi consulta, supongo que será lo mismo), entonces intentava hacer un Locate sobre esos 3 campos porque si lo hago sobre uno solo no es correcto.

He probado con OR en vez de AND pero sigue saltándose la instrucción.

Muchas gracias a todos por vuestro interés!!
Responder Con Cita
  #8  
Antiguo 03-09-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Sí, vale, pero Busca Facturas y Busca Albaranes han de ser una función (por ejemplo) que realice o bien un Locate sobre las tablas pertienentes, o una sentencia SQL o lo que nos de la gana. Si la elección fuera la del Locate, se puede hacer todo directamente en el mismo IF y ahorrarnos la variable

De hecho, yo más o menos suelo hacer lo mismo que tu, pero en lugar de la variable, pongo un Exit
Código Delphi [-]
function TMiClase.BorraCliente(Codigo: integer): boolean
begin
  Result := false;

  if TieneFacturas(Codigo) then Exit;
  if TieneAlbaranes(Codigo) then Exit;
  ....
  Result := true;
end;
Como suelo hacer funciones, el que se encarga de mostrar o no el mensaje será el que llame a ésta.

No obstante, como ya decía anteriormente y comentas muy bien, sin saber exactamente lo que pretende conseguir con esos Locates, es hablar por hablar
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 06:58:14.


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
Copyright 1996-2007 Club Delphi