Fórum atualizando registros no DBGRID (FireBird) Desculpas #255239

20/10/2004

0

Pessoal desculpa, mais essa é a mensagem correta:
------------------------------------------------------------
- Ola, estou com a seguinte dificuldade: tenho uma aplicação com bnco de dados FireBird (.FDB). na aplicação, o DBGrid responsavel pelos dados contidos na em um das tabelas do meu banco, está no mesmo formulario onde cadastro, edito, excluo, etc...

- O problema está na atualização desses registros em tempo de execussao no DBGrid, como por exemplo:

exclui um cliente, mas ele nao sai do DBGrid, a menos que eu feche o aplicativo por completo e entre novamente.

Vou colar abaixo o código da Unit em questão, e fico grato se alguem puder me ajudar
--------------------------------------------------------------------------------

unit Unit_Contatos;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Mask, Grids, DBGrids, WinSkinData, DB,
  DBTables, ShellApi, DBCtrls, IBCustomDataSet, IBQuery;

type
  TContatos = class(TForm)
    Label25: TLabel;
    Label8: TLabel;
    Label10: TLabel;
    Edit_Mail1: TEdit;
    Label24: TLabel;
    Edit_Mail2: TEdit;
    Label23: TLabel;
    Edit_Empresa: TEdit;
    Label22: TLabel;
    Edit_Funcao: TEdit;
    Label11: TLabel;
    Edit_Fone1: TMaskEdit;
    Edit_Fone3: TMaskEdit;
    Label13: TLabel;
    Label12: TLabel;
    Edit_Fone2: TMaskEdit;
    Label14: TLabel;
    Edit_Rua: TEdit;
    Label15: TLabel;
    Edit_Bairro: TEdit;
    Label16: TLabel;
    Edit_Cidade: TEdit;
    Label20: TLabel;
    Label17: TLabel;
    Edit_Numero: TEdit;
    Edit_Condominio: TEdit;
    Label18: TLabel;
    Label19: TLabel;
    Edit_Bloco: TEdit;
    GroupBox1: TGroupBox;
    Label21: TLabel;
    Edit_Procura: TEdit;
    SpeedButton10: TSpeedButton;
    Btn_Excluir_Contato: TSpeedButton;
    Btn_Edita_Contato: TSpeedButton;
    Btn_Cancela_Contato: TSpeedButton;
    Btn_Salvar: TSpeedButton;
    SpeedButton7: TSpeedButton;
    Edit_UF: TComboBox;
    SpeedButton1: TSpeedButton;
    DBGrid1: TDBGrid;
    Edit_Nome: TEdit;
    Qry_Consulta: TIBQuery;
    DS_Consulta: TDataSource;
    Qry_ConsultaNOME: TIBStringField;
    Qry_ConsultaMAIL1: TIBStringField;
    Qry_ConsultaMAIL2: TIBStringField;
    Qry_ConsultaEMPRESA: TIBStringField;
    Qry_ConsultaFUNCAO: TIBStringField;
    Qry_ConsultaFONE1: TIBStringField;
    Qry_ConsultaFONE2: TIBStringField;
    Qry_ConsultaFONE3: TIBStringField;
    Qry_ConsultaRUA: TIBStringField;
    Qry_ConsultaBAIRRO: TIBStringField;
    Qry_ConsultaCIDADE: TIBStringField;
    Qry_ConsultaUF: TIBStringField;
    Qry_ConsultaNUMERO: TIBStringField;
    Qry_ConsultaCONDOMINIO: TIBStringField;
    Qry_ConsultaBLOCO: TIBStringField;
    procedure SpeedButton7Click(Sender: TObject);
    procedure Btn_SalvarClick(Sender: TObject);
    procedure Btn_Cancela_ContatoClick(Sender: TObject);
    procedure Btn_Edita_ContatoClick(Sender: TObject);
    procedure Btn_Excluir_ContatoClick(Sender: TObject);
    procedure SpeedButton10Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Edit_ProcuraChange(Sender: TObject);
    procedure DBGrid1CellClick(Column: TColumn);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Contatos: TContatos;

implementation

uses Unit_DM;

{$R *.dfm}

Procedure Limpa_Edit;
Begin
    // limpa edit
     Contatos.Edit_Nome.Clear;
     Contatos.Edit_Mail1.Clear;
     Contatos.Edit_Mail2.Clear;
     Contatos.Edit_Empresa.Clear;
     Contatos.Edit_Funcao.Clear;
     Contatos.Edit_Fone1.Clear;
     Contatos.Edit_Fone2.Clear;
     Contatos.Edit_Fone3.Clear;
     Contatos.Edit_Rua.Clear;
     Contatos.Edit_Bairro.Clear;
     Contatos.Edit_Cidade.Clear;
     Contatos.Edit_Uf.Text := ´´;
     Contatos.Edit_Numero.Clear;
     Contatos.Edit_Condominio.Clear;
     Contatos.Edit_Bloco.Clear;
     Contatos.Edit_Nome.SetFocus;
End;





procedure TContatos.SpeedButton7Click(Sender: TObject);
begin
     Limpa_Edit;
     Btn_Salvar.Enabled := True;
     Btn_Edita_Contato.Enabled := False;
end;

procedure TContatos.Btn_SalvarClick(Sender: TObject);
var
Nome,Mail1,Mail2,Empresa,Funcao,fone1,fone2,a  : String;
fone3,Rua,Bairro,Cidade,Uf,Numero,Condominio,Bloco : String;
begin
     Nome       := Edit_Nome.Text;
     Mail1      := Edit_Mail1.Text;
     Mail2      := Edit_Mail2.Text;
     Empresa    := Edit_Empresa.Text;
     Funcao     := Edit_Funcao.Text;
     fone1      := Edit_Fone1.Text;
     fone2      := Edit_Fone2.Text;
     fone3      := Edit_Fone3.Text;
     Rua        := Edit_Rua.Text;
     Bairro     := Edit_Bairro.Text;
     Cidade     := Edit_Cidade.Text;
     Uf         := Edit_Uf.Text;
     Numero     := Edit_Numero.Text;
     Condominio := Edit_Condominio.Text;
     Bloco      := Edit_Bloco.Text;

     if Nome = ´´ then begin
     ShowMessage(´Não Foi especificado um Nome !´);
     Edit_Nome.SetFocus;
     end
     else begin

   //try


   //DM.Tbl_Contatos.First;
   //DM.Tbl_Contatos.Insert;
   DM.Tbl_Contatos.open;
   DM.Tbl_Contatos.insert;

   If Not(DM.Tr_Contatos.InTransaction) Then
   DM.Tr_Contatos.StartTransaction;

   DM.Tbl_ContatosNOME.AsString       := Nome;
   DM.Tbl_ContatosMAIL1.AsString      := Mail1;
   DM.Tbl_ContatosMAIL2.AsString      := Mail2;
   DM.Tbl_ContatosEMPRESA.AsString    := Empresa;
   DM.Tbl_ContatosFUNCAO.AsString     := Funcao;
   DM.Tbl_ContatosFONE1.AsString      := Fone1;
   DM.Tbl_ContatosFONE2.AsString      := Fone2;
   DM.Tbl_ContatosFONE3.AsString      := Fone3;
   DM.Tbl_ContatosRUA.AsString        := Rua;
   DM.Tbl_ContatosBAIRRO.AsString     := Bairro;
   DM.Tbl_ContatosCIDADE.AsString     := Cidade;
   DM.Tbl_ContatosUF.AsString         := Uf;
   DM.Tbl_ContatosNUMERO.AsString     := Numero;
   DM.Tbl_ContatosCONDOMINIO.AsString := Condominio;
   DM.Tbl_ContatosBLOCO.AsString      := Bloco;
   DM.Tbl_Contatos.Post;
   DM.Tbl_Contatos.ApplyUpdates;
  

  End;
      Limpa_Edit;
      Qry_Consulta.Close;
      Qry_Consulta.SQL.Clear;
      a:=´Select * From Contatos´;
      Qry_Consulta.SQL.Add(a);
      Qry_Consulta.Open;



//except on exception do
//begin
//ShowMessage(´Operação Ilegal, Tente Novamente.´);
//DM.Tbl_Contatos.Cancel;
//end;
//end;
//end;
end;

procedure TContatos.Btn_Cancela_ContatoClick(Sender: TObject);
begin
     DM.Tbl_Contatos.Cancel;
     limpa_edit;


end;

procedure TContatos.Btn_Edita_ContatoClick(Sender: TObject);
var
Nome,Mail1,Mail2,Empresa,Funcao,fone1,fone2,a  : String;
fone3,Rua,Bairro,Cidade,Uf,Numero,Condominio,Bloco : String;
begin
     Nome       := Edit_Nome.Text;
     Mail1      := Edit_Mail1.Text;
     Mail2      := Edit_Mail2.Text;
     Empresa    := Edit_Empresa.Text;
     Funcao     := Edit_Funcao.Text;
     fone1      := Edit_Fone1.Text;
     fone2      := Edit_Fone2.Text;
     fone3      := Edit_Fone3.Text;
     Rua        := Edit_Rua.Text;
     Bairro     := Edit_Bairro.Text;
     Cidade     := Edit_Cidade.Text;
     Uf         := Edit_Uf.Text;
     Numero     := Edit_Numero.Text;
     Condominio := Edit_Condominio.Text;
     Bloco      := Edit_Bloco.Text;
     Btn_Salvar.Enabled := True;
     Btn_Edita_Contato.Enabled := False;

//try


   
   DM.Tbl_Contatos.Edit;
   DM.Tbl_Contatos.FieldByName(´Nome´).AsString       := Nome;
   DM.Tbl_Contatos.FieldByName(´Mail1´).AsString      := Mail1;
   DM.Tbl_Contatos.FieldByName(´Mail2´).AsString      := Mail2;
   DM.Tbl_Contatos.FieldByName(´Empresa´).AsString    := Empresa;
   DM.Tbl_Contatos.FieldByName(´Funcao´).AsString     := Funcao;
   DM.Tbl_Contatos.FieldByName(´Fone1´).AsString      := Fone1;
   DM.Tbl_Contatos.FieldByName(´Fone2´).AsString      := Fone2;
   DM.Tbl_Contatos.FieldByName(´Fone3´).AsString      := Fone3;
   DM.Tbl_Contatos.FieldByName(´Rua´).AsString        := Rua;
   DM.Tbl_Contatos.FieldByName(´Bairro´).AsString     := Bairro;
   DM.Tbl_Contatos.FieldByName(´Cidade´).AsString     := Cidade;
   DM.Tbl_Contatos.FieldByName(´Uf´).AsString         := Uf;
   DM.Tbl_Contatos.FieldByName(´Numero´).AsString     := Numero;
   DM.Tbl_Contatos.FieldByName(´Condominio´).AsString := Condominio;
   DM.Tbl_Contatos.FieldByName(´Bloco´).AsString      := Bloco;
   DM.Tbl_Contatos.Post;
   DM.Tbl_Contatos.ApplyUpdates;
   limpa_edit;

  Qry_Consulta.Close;
  Qry_Consulta.SQL.Clear;
  a:=´Select * From Contatos´;
  Qry_Consulta.SQL.Add(a);
  Qry_Consulta.Open

//except on exception do
//begin
//ShowMessage(´Operação Ilegal, Tente Novamente.´);
//DM.Tbl_Contatos.Cancel;
//end;
//end;
end;

procedure TContatos.Btn_Excluir_ContatoClick(Sender: TObject);
var
Zera : Integer;
begin
 Zera := Application.MessageBox(´Realmente deseja Excluir Registro?´, ´CONFIRME´, mb_yesno);
 if zera = IDYES Then
 begin
     Try
     DM.Tbl_Contatos.Delete;
     DM.Tbl_Contatos.ApplyUpdates;
     except on exception do
     showMessage(´Nao Ha mais registros para excluir´);
     end;
 end;
 end;

procedure TContatos.SpeedButton10Click(Sender: TObject);
var Mail : String;
begin
if Edit_Mail1.Text = ´´ Then
  begin
      MessageBeep(0);
      ShowMessage(´Campo e-mail sem destinatário, por favor selecione um de seus contatos e tente novamente!´);
  end
  else
      begin
      if Edit_Mail2.Text = ´´ then
      begin
          Mail := ´mailto:´+(Edit_Mail1.Text);
          ShellExecute(GetDesktopWindow,´open´,pchar(Mail),nil,nil,sw_ShowNormal);
      end
      else
      Mail := ´mailto:´+(Edit_Mail1.Text)+´, ´+(Edit_Mail2.Text);
      ShellExecute(GetDesktopWindow,´open´,pchar(Mail),nil,nil,sw_ShowNormal);
      end;
end;

procedure TContatos.SpeedButton1Click(Sender: TObject);
begin
     DM.Tbl_Contatos.Cancel;
     limpa_edit;

     Close;
end;

procedure TContatos.FormCreate(Sender: TObject);
var a: string;
begin
      DM.Tbl_Contatos.Close;
      DM.Tbl_Contatos.Open;
      DM.Tbl_Contatos.First;

      Qry_Consulta.Close;
      Qry_Consulta.SQL.Clear;
      a:=´Select * From Contatos´;
      Qry_Consulta.SQL.Add(a);
      Qry_Consulta.Open;
    


      // traz dados para os edits
      Edit_Nome.Text       := DM.Tbl_Contatos.FieldByName(´Nome´).AsString;
      Edit_Mail1.Text      := DM.Tbl_Contatos.FieldByName(´Mail1´).AsString ;
      Edit_Mail2.Text      := DM.Tbl_Contatos.FieldByName(´Mail2´).AsString ;
      Edit_Empresa.Text    := DM.Tbl_Contatos.FieldByName(´Empresa´).AsString ;
      Edit_Funcao.Text     := DM.Tbl_Contatos.FieldByName(´Funcao´).AsString ;
      Edit_Fone1.Text      := DM.Tbl_Contatos.FieldByName(´Fone1´).AsString;
      Edit_Fone2.Text      := DM.Tbl_Contatos.FieldByName(´Fone2´).AsString;
      Edit_Fone3.Text      := DM.Tbl_Contatos.FieldByName(´Fone3´).AsString;
      Edit_Rua.Text        := DM.Tbl_Contatos.FieldByName(´Rua´).AsString;
      Edit_Bairro.Text     := DM.Tbl_Contatos.FieldByName(´Bairro´).AsString;
      Edit_Cidade.Text     := DM.Tbl_Contatos.FieldByName(´Cidade´).AsString;
      Edit_Uf.Text         := DM.Tbl_Contatos.FieldByName(´Uf´).AsString;
      Edit_Numero.Text     := DM.Tbl_Contatos.FieldByName(´Numero´).AsString;
      Edit_Condominio.Text := DM.Tbl_Contatos.FieldByName(´Condominio´).AsString;
      Edit_Bloco.Text      := DM.Tbl_Contatos.FieldByName(´Bloco´).AsString;
      Edit_Procura.clear;
      Btn_Salvar.Enabled := true;
      Btn_Edita_Contato.Enabled := True;



end;

procedure TContatos.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    DM.Tbl_Contatos.Close;
    Contatos := nil;
    Action := caFree;
end;

procedure TContatos.Edit_ProcuraChange(Sender: TObject);
var a,b,c: String;
begin
        Qry_Consulta.Close;
        Qry_Consulta.SQL.Clear;
        a:=´Select * From Contatos ´;
        b:=´Where NOME Like:Consulta ´;
        c:=´Order By Nome´;
        Qry_Consulta.SQL.Add(a+b+c);
        Qry_Consulta.Params[0].AsString;
        Qry_Consulta.ParamByName(´Consulta´).AsString:=´´+´¬´+Edit_Procura.Text+´¬´;
        //Qry_Consulta.Close;
        Qry_Consulta.Open;


      // traz dados para os edits
      Edit_Nome.Text       := Qry_ConsultaNome.AsString;
      Edit_Mail1.Text      := Qry_ConsultaMail1.AsString ;
      Edit_Mail2.Text      := Qry_ConsultaMail2.AsString ;
      Edit_Empresa.Text    := Qry_ConsultaEmpresa.AsString ;
      Edit_Funcao.Text     := Qry_ConsultaFuncao.AsString ;
      Edit_Fone1.Text      := Qry_ConsultaFone1.AsString;
      Edit_Fone2.Text      := Qry_ConsultaFone2.AsString;
      Edit_Fone3.Text      := Qry_ConsultaFone3.AsString;
      Edit_Rua.Text        := Qry_ConsultaRua.AsString;
      Edit_Bairro.Text     := Qry_ConsultaBairro.AsString;
      Edit_Cidade.Text     := Qry_ConsultaCidade.AsString;
      Edit_Uf.Text         := Qry_ConsultaUf.AsString;
      Edit_Numero.Text     := Qry_ConsultaNumero.AsString;
      Edit_Condominio.Text := Qry_ConsultaCondominio.AsString;
      Edit_Bloco.Text      := Qry_ConsultaBloco.AsString;
      Btn_Salvar.Enabled := False;
      Btn_Edita_Contato.Enabled := True;

end;

procedure TContatos.DBGrid1CellClick(Column: TColumn);
begin
    // traz dados para os edits
      Edit_Nome.Text       := Qry_ConsultaNome.AsString;
      Edit_Mail1.Text      := Qry_ConsultaMail1.AsString ;
      Edit_Mail2.Text      := Qry_ConsultaMail2.AsString ;
      Edit_Empresa.Text    := Qry_ConsultaEmpresa.AsString ;
      Edit_Funcao.Text     := Qry_ConsultaFuncao.AsString ;
      Edit_Fone1.Text      := Qry_ConsultaFone1.AsString;
      Edit_Fone2.Text      := Qry_ConsultaFone2.AsString;
      Edit_Fone3.Text      := Qry_ConsultaFone3.AsString;
      Edit_Rua.Text        := Qry_ConsultaRua.AsString;
      Edit_Bairro.Text     := Qry_ConsultaBairro.AsString;
      Edit_Cidade.Text     := Qry_ConsultaCidade.AsString;
      Edit_Uf.Text         := Qry_ConsultaUf.AsString;
      Edit_Numero.Text     := Qry_ConsultaNumero.AsString;
      Edit_Condominio.Text := Qry_ConsultaCondominio.AsString;
      Edit_Bloco.Text      := Qry_ConsultaBloco.AsString;
      Btn_Salvar.Enabled := False;
      Btn_Edita_Contato.Enabled := True;
end;

end.



Mahdak

Mahdak

Responder

Posts

20/10/2004

Araujojunior

Nao saco muito de IB/FB, mas vc ta fazendo IbTransaction1.Comit????
Tive um pro parecido, mas com isso deu certo....


Responder

Gostei + 0

20/10/2004

Mahdak

nao brother, eu to trabalhando com IBTable... sigo todos os passos para a conexao com o banco (.FDB), mas uso o componente TIBTable para realizar as inclusoes, exclusoes, alterações... no banco...


Responder

Gostei + 0

20/10/2004

Bruno Belchior

tente o seguinte amigo após a atualização:
   IBConnection.Conected := False;
   IBConnection.Conected := True;



Responder

Gostei + 0

21/10/2004

Mahdak

sobe


Responder

Gostei + 0

21/10/2004

Misael

Cara ai vai uma sugestão não sei se vai dar certo:Tentar destruir o componente DBGrid em tempo de execução e cria-lo novamente.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar