Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-08-2017
Avatar de Edwardfeliz
Edwardfeliz Edwardfeliz is offline
Miembro
 
Registrado: abr 2014
Posts: 102
Poder: 11
Edwardfeliz Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Abre el programa que uses para gestinar las bases de datos y ejecuta el sql desde allí, "juega" haciendo cambios para comprobar qué registros cumplen la condición.
Ahí no podemos ayudarte mucho si no podemos probar con tu base de datos.
anexo la base de datos y los archivos delphi? para que hagan pruebas?
Responder Con Cita
  #2  
Antiguo 24-08-2017
Avatar de Edwardfeliz
Edwardfeliz Edwardfeliz is offline
Miembro
 
Registrado: abr 2014
Posts: 102
Poder: 11
Edwardfeliz Va por buen camino
Solucion Temporal

Saludos, Yo de nuevo, fabrique una solución poco ortodoxa porque no se me ocurrió nada mas para resolver esto , si tienen alguna observación me gustaría saberla, Gracias.

Código Delphi [-]
Var
Cod, Numero : String;
Begin
 with QTemp do
    begin
    Close;
    SQL.Clear;
    SQL.Text:= 'SELECT TOP 1 Cod, Numero  FROM Cuotas WHERE (NumPrestamo =:Codigo) and (Estado = :Pendiente) '+
               'Order By Numero ASC';
    Parameters.ParamByName('Codigo').Value    := EnumPrestamo.Text;
    Parameters.ParamByName('Pendiente').Value := 'Pendiente';
    ExecSQL;
    Open;
    end;
 Cod   := Qtemp.FieldByName('Cod').AsVariant;
 Numero:= Qtemp.FieldByName('Numero').AsVariant;
 Begin
  with QTemp do
    begin
    Close;
    SQL.Clear;
    SQL.Text:= 'UPDATE Cuotas SET Fecha_Pago =:Fecha, Estado = :Estado, Mora = :Mora '+
               'Where Cod =:NumC';
    Parameters.ParamByName('Fecha').Value  := FormatDateTime('dd/mm/yyyy', Now);
    Parameters.ParamByName('Estado').Value := 'Realizado';
    Parameters.ParamByName('Mora').Value   := Edit1.Text;
    Parameters.ParamByName('NumC').Value   := Cod;
    ExecSQL;
    End;
 End;
End;;

Tuve que crear un campo autonumerico que denomine "Cod" para que tuviera un valor único y así luego poder hacer el UPTADE a ese único registro.
Cualquier sugerencia sera bien recibida.

Gracias.
Responder Con Cita
  #3  
Antiguo 24-08-2017
Guti13 Guti13 is offline
Miembro
 
Registrado: jun 2006
Posts: 35
Poder: 0
Guti13 Va por buen camino
Hola EdwardFeliz, la verdad es que no entiendo porque la sentencia con la subselect no te funcionaba a no ser que no existiera clave primaria en esa tabla, ya que en Access los updates con subselect no funcionan bien en estos casos. La opción que has tomado es buena, desde mi punto de vista toda tabla debe tener un campo de clave primaria única lo que si me salta a la vista es que en la consulta con subselect no tenías en cuenta que el estado fuera pendiente, sin embargo, en esta segunda versión si la tienes.
Responder Con Cita
  #4  
Antiguo 24-08-2017
Avatar de Edwardfeliz
Edwardfeliz Edwardfeliz is offline
Miembro
 
Registrado: abr 2014
Posts: 102
Poder: 11
Edwardfeliz Va por buen camino
Cita:
Empezado por Guti13 Ver Mensaje
Hola EdwardFeliz, la verdad es que no entiendo porque la sentencia con la subselect no te funcionaba a no ser que no existiera clave primaria en esa tabla, ya que en Access los updates con subselect no funcionan bien en estos casos. La opción que has tomado es buena, desde mi punto de vista toda tabla debe tener un campo de clave primaria única lo que si me salta a la vista es que en la consulta con subselect no tenías en cuenta que el estado fuera pendiente, sin embargo, en esta segunda versión si la tienes.
Probe lo de la clave primaria y no hizo ninguna diferencia.

Y lo del "Estado" lo agregue ya que había logrado hacer el Update, lo vi necesario porque así daba mas detalles para especificar el registro a actualizar.
Responder Con Cita
  #5  
Antiguo 24-08-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que necesitas reordenar tus ideas, y explicarnos claramente la situación, para que podamos ayudarte eficazmente.
Responder Con Cita
  #6  
Antiguo 24-08-2017
Avatar de Edwardfeliz
Edwardfeliz Edwardfeliz is offline
Miembro
 
Registrado: abr 2014
Posts: 102
Poder: 11
Edwardfeliz Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Creo que necesitas reordenar tus ideas, y explicarnos claramente la situación, para que podamos ayudarte eficazmente.
El ultimo código que puse explica exactamente lo que quiero hacer, porque el código hace el trabajo, ¿Es la forma correcta de hacer el proceso? No lo se, ¿a que le llamo "correcto"? a que el método no de algún problema en el futuro o que si hay un método mejor como el SubSelect pero que sea funcional, seria lo indicado-

"la idea es actualizar la tabla cuotas, el update lo que hace es introducir la fecha de pago, cambiar el contenido del campo "Estado" (que por default esta "Pendiente") a realizado, y el campo "Mora" ser actualizacon con el contenido de un edit,

¿Como saber sobre cual registro hacer esto?
Va a Buscar en cuotas el registro que en el campo "NumPrestamo" contenga el numero del prestamo que esta en un edit, y el estado en "Pendiente", como esta consulta devuelve varios resultados iguales pero con la diferencia que existe otro campo que tiene el nombre "Numero" donde identifica el numero de la cuota (1,2,3,etc), va a elegir el registro que contenga el valor mas bajo en "Numero".

Saludos!
Responder Con Cita
  #7  
Antiguo 24-08-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Entonces lo indicado antes debe funcionar perfectamente:
Código SQL [-]
UPDATE Cuotas SET Fecha_Pago = :Fecha, Estado = :Estado, Mora = :Mora  
Where (NumPrestamo =:Codigo) and (Numero = (
    SELECT Min(Numero)
    FROM Cuotas
    WHERE NumPrestamo = :Codigo
))
Por lo que echa un vistazo a tu base de datos para encontrar el motivo de que no te funcione.
Imagino que access admitirá subselect, en caso contrario debería dar algún error, aunque tampoco es que me extrañara mucho que no lo acepte y que no avise.
La otra forma es hacerlo por separado, obtener primero el registro con el menor numero y luego actualizarlo.
Aunque no entiendo esto:
Cita:
Tuve que crear un campo autonumerico que denomine "Cod" para que tuviera un valor único y así luego poder hacer el UPTADE a ese único registro.
El registro debería tener siempre un "id" que lo diferencie de los demás registros.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Una función en Delphi, puede devolver varios parámetros? socger Varios 6 27-02-2009 18:00:07
¿Actualizar varios registros a la vez? Ayuda... por favor georkis PHP 2 29-04-2008 22:56:38
Actualizar Vista de Tabla en varios ordenadores juanma65 Conexión con bases de datos 2 14-07-2006 10:26:48
actualizar aplicacion cliente en varios puesto VRO Providers 0 25-10-2005 18:00:49
Problemas con varios Parametros Carlex SQL 7 13-08-2004 23:34:34


La franja horaria es GMT +2. Ahora son las 09:28:13.


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