Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > Conexión con bases de datos
Register FAQ Members List Calendar Guía de estilo Today's Posts

Conexión con bases de datos

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 28/11/2008
dakar08 dakar08 is offline
Registrado
 
Join Date: 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
Reply With Quote
  #2  
Old 28/11/2008
Caral's Avatar
[Caral] Caral is offline
Miembro Premium
 
Join Date: Aug 2006
Posts: 7,659
Poder: 28
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
Reply With Quote
  #3  
Old 28/11/2008
Caral's Avatar
[Caral] Caral is offline
Miembro Premium
 
Join Date: Aug 2006
Posts: 7,659
Poder: 28
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
Reply With Quote
  #4  
Old 28/11/2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Join Date: May 2003
Location: Campeche, México
Posts: 2,732
Poder: 26
maeyanes Va por buen camino
Hola...

Quote:
Originally Posted by Caral View Post
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.

Quote:
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...
Reply With Quote
  #5  
Old 28/11/2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Join Date: May 2003
Location: Campeche, México
Posts: 2,732
Poder: 26
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...
Reply With Quote
  #6  
Old 28/11/2008
Caral's Avatar
[Caral] Caral is offline
Miembro Premium
 
Join Date: Aug 2006
Posts: 7,659
Poder: 28
Caral Va por buen camino
Hola
La edad y la vista no perdonan.
Saludos
__________________
Siempre Novato
Reply With Quote
  #7  
Old 28/11/2008
[coso] coso is offline
Miembro Premium
 
Join Date: May 2008
Location: 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
Reply With Quote
  #8  
Old 03/12/2008
dakar08 dakar08 is offline
Registrado
 
Join Date: 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...
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Modificando la base de datos a traves de un Datagrid miss flakita Firebird e Interbase 17 01/02/2008 03:54
Modificando Procedimiento para concatenar imagenes JPG Thorax Gráficos 2 04/01/2008 01:50
Dos aplicaciones modificando el mismo registro ... seoane Firebird e Interbase 31 27/09/2007 12:32
Modificando total de acuerdo a existencia karlaoax SQL 5 02/05/2007 23:06
Modificando exes b0rn Varios 3 06/03/2007 22:36


All times are GMT +2. The time now is 00:09.


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