Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-11-2008
dakar08 dakar08 is offline
Registrado
 
Registrado: nov 2008
Posts: 2
Poder: 0
dakar08 Va por buen camino
Problemas modificando una tabla

Hola,
Mi nombre es Jordi, vivo cerca de Valencia, y llevo casi 10 años programando en Delphi.
Saludos a tod@s!!!
Llevo el programa de gestión de un centro médico, el cual empecé el año 99 en Delphi5, y sigo con esa versión por miedo a incompatibilidades.
Uso una BBDD en Interbase. Empecé con v5.5, ahora uso la versión 8.1 (2007).
Nunca he tenido problemas con el programa, pero ahora me ocurre una cosa que no llego a comprender, por eso os pido ayuda:

Una factura incluye varias visitas. Las visitas facturadas las marco Facturado=Si.
Cuando editamos una factura que ya existe, se permite modificar las fechas de facturación
Si se cambian, es necesario desmarcar Facturado=Si de las visitas de la factura original y marcar las nuevas, de la siguiente forma:
-desmarcar: MarcarVisitesFacturades( True );
-marcar: MarcarVisitesFacturades( False );
Las funciones se llaman una detrás de otra, modificando las fechas (Data0 y Data1) antes de la segunda llamada.

Código Delphi [-]

procedure TGenFact.MarcarVisitesFacturades( bDesmarcar: Boolean );

begin

  with DBmodule.Query do

  begin

    Close;

    try

      SQL.Clear;

      SQL.Add( 'UPDATE Visita' );

      SQL.Add( 'set Facturat = :Fac' );

      SQL.Add( 'where Mutua = :CodMut' );

      SQL.Add( 'and Tipo = :TipMut' );

      SQL.Add( 'and DataFact >= ata0 and DataFact <= ata1' );

 

      if bDesmarcar then

        ParamByName('Fac').AsString := 'N'

      else

        ParamByName('Fac').AsString := 'S';

      ParamByName('CodMut').AsString := CodMut.Text;

      ParamByName('TipMut').AsString := TipMut.Text;

      ParamByName('Data0').AsDate := Data0.Date;

      ParamByName('Data1').AsDate := Data1.Date;

    finally

      ExecSql;

    end;

  end;

end;

Por alguna razón que desconozco, la querie de MarcarVisitesFacturades( False ) no actualiza la base de datos al momento. Es necesario cerrar el programa totalmente y volver a entrar para ver que las visitas están facturadas… ¿Por qué pasa esto?
Únicamente cerrando y abriendo el form de facturación no se actualizan.

En el FormClose hago DBModule.Query.Close;

Esta es la llamada al form de facturación, ¿quizás el “Free” no es correcto? Con “Release” el problema sigue…

Código Delphi [-]

with TGenFact.Create(Application) do

try

  Tag := 1;   // Nova factura

  TipMut.Text := aTipMut[ cbMutues.ItemIndex ];

  CodMut.Text := IntToStr( aMutues[ cbMutues.ItemIndex ] );

  NomMut.Text := cbMutues.Text;

 

  ShowModal;

finally

  Free;

end;

Agradezco de antemano cualquier ayuda o pista para llegar a solucionar este problema.

Saludos cordiales,
Jordi
Responder Con Cita
  #2  
Antiguo 28-11-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Hola
No entiendo donde se hace referencia a verdadero o falso aqui?.
Código Delphi [-]
      if bDesmarcar then
Tampoco la necesidad del try, finally, sin excepción?
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 28-11-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Hola
No se, esencialmente deberia funcinar.
Quizas asi:
Código Delphi [-]
procedure TGenFact.MarcarVisitesFacturades( bDesmarcar: Boolean );
begin
  with DBmodule.Query do
  begin
      try
      Close;      
      SQL.Clear;
      SQL.Add( 'UPDATE Visita' );
      SQL.Add( 'set Facturat = :Fac' );
      SQL.Add( 'where Mutua = :CodMut' );
      SQL.Add( 'and Tipo = :TipMut' );
      SQL.Add( 'and DataFact >= :data0 and DataFact <= :data1' );
       if bDesmarcar then
       begin
       ParamByName('Fac').AsString := 'N';
       end
       else
       ParamByName('Fac').AsString := 'S';
       ParamByName('CodMut').AsString := CodMut.Text;
       ParamByName('TipMut').AsString := TipMut.Text;
       ParamByName('Data0').AsDate := Data0.Date;
       ParamByName('Data1').AsDate := Data1.Date;
       finally
       ExecSql;
    end;
end;

end;
seguro que sabes mas que yo de esto, solo trato de dar ideas.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 28-11-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 25
maeyanes Va por buen camino
Hola...

Cita:
Empezado por Caral Ver Mensaje
Hola
No entiendo donde se hace referencia a verdadero o falso aqui?.
Código Delphi [-]
      if bDesmarcar then
Cuando evaluas una variable de tipo Boolean, puedes usar sin problemas la forma mostrada en el código. Lo que estás haciendo ahí es que si el valor de la variable es True haga tal cosa. Si quieres preguntar por el valor falso de la variable solamente haces if not bDesmarcar then.

Cita:
Tampoco la necesidad del try, finally, sin excepción?
Saludos
En cuanto al try..finally este no se usa para el manejo de excepciones, para eso es el try..except. El uso del try..finally es más bien para asegurarnos de que lo que está dentro de finally..end se ejecute aun así ocurra una excepción.

Código Delphi [-]
// Ejemplo más común del uso del try..finally
Form1 := TForm1.Create(nil);
try
  // Mostramos la forma
  Form1.ShowModal
finally
  // Nos aseguramos que la forma se destruya aun así ocurra un error 
  // dentro de Form1.ShowModal
  Form1.Free
end;


Saludos...
Responder Con Cita
  #5  
Antiguo 28-11-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 25
maeyanes Va por buen camino
Hola...

No le veo caso al uso del try..finally que esás usando, así que lo quité.

Código Delphi [-]
procedure TGenFact.MarcarVisitesFacturades(bDesmarcar: Boolean);
begin
  with DBmodule.Query do
  begin
    Close;      
    SQL.Clear;
    SQL.Add('UPDATE Visita');
    SQL.Add('set Facturat = :Fac');
    SQL.Add('where Mutua = :CodMut');
    SQL.Add('and Tipo = :TipMut');
    SQL.Add('and DataFact >= :Data0 and DataFact <= :Data1');
    if bDesmarcar then
      ParamByName('Fac').AsString := 'N'
    else
      ParamByName('Fac').AsString := 'S';
    ParamByName('CodMut').AsString := CodMut.Text;
    ParamByName('TipMut').AsString := TipMut.Text;
    ParamByName('Data0').AsDate := Data0.Date;
    ParamByName('Data1').AsDate := Data1.Date;
    ExecSql
  end
end;

Me imagino que estás usando los componentes IBX, si es así, ¿usas el componente TIBTransaction en tu aplicación?



Saludos...
Responder Con Cita
  #6  
Antiguo 28-11-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Hola
La edad y la vista no perdonan.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #7  
Antiguo 28-11-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, se me ocurre que pueda pasarte por dos cosas:
- que te dejes la query cerrada, y no releas los cambios con un nuevo 'select' y query.Open despues de modificarlos.
- que tarde o espere en actualizarse la base de datos. No conozco interbase, pero en otros componentes de base de datos existe, por ejemplo, updatemode, donde se puede escoger UpdateMode := upWhereChanged, etc.. De todas maneras quiza te funcione mediante query.ApplyUpdates o query.Refresh
Responder Con Cita
  #8  
Antiguo 03-12-2008
dakar08 dakar08 is offline
Registrado
 
Registrado: nov 2008
Posts: 2
Poder: 0
dakar08 Va por buen camino
Gracias a todas por las repuestas!

coso, voy a profundizar en las pistas que me das...
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
Modificando la base de datos a traves de un Datagrid miss flakita Firebird e Interbase 17 01-02-2008 03:54:45
Modificando Procedimiento para concatenar imagenes JPG Thorax Gráficos 2 04-01-2008 01:50:06
Dos aplicaciones modificando el mismo registro ... seoane Firebird e Interbase 31 27-09-2007 12:32:28
Modificando total de acuerdo a existencia karlaoax SQL 5 02-05-2007 23:06:46
Modificando exes b0rn Varios 3 06-03-2007 22:36:18


La franja horaria es GMT +2. Ahora son las 23:01:04.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi