atualizando registros no DBGRID (FireBird) Desculpas
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
--------------------------------------------------------------------------------
------------------------------------------------------------
- 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
Curtidas 0
Respostas
Araujojunior
20/10/2004
Nao saco muito de IB/FB, mas vc ta fazendo IbTransaction1.Comit????
Tive um pro parecido, mas com isso deu certo....
Tive um pro parecido, mas com isso deu certo....
GOSTEI 0
Mahdak
20/10/2004
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...
GOSTEI 0
Bruno Belchior
20/10/2004
tente o seguinte amigo após a atualização:
IBConnection.Conected := False; IBConnection.Conected := True;
GOSTEI 0
Mahdak
20/10/2004
sobe
GOSTEI 0
Misael
20/10/2004
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.
GOSTEI 0