Interbase atualizando em rede(IBTransaction)
Tenho a Maquina A e a Maquina B, quando a Maquina A faz
uma inclusao ou exclusao ou alteracao a Maquina B, nao
aparece para a Maquina B
Alguem pode me dar alguma dica?
Obs. estou usando um botao para incluir(qry.append)e
um botao para salvar(qry.post)
Gostaria qeu alguem me desse um exemplo....
Me ajudem
evandro
uma inclusao ou exclusao ou alteracao a Maquina B, nao
aparece para a Maquina B
Alguem pode me dar alguma dica?
Obs. estou usando um botao para incluir(qry.append)e
um botao para salvar(qry.post)
Gostaria qeu alguem me desse um exemplo....
Me ajudem
evandro
Evandro_araujo
Curtidas 0
Respostas
Essistemas
07/06/2004
Olha vou te ser sincero, normalmente não se usa uma query para adicionar registros desta forma dando um append.
Se pode utilizar as ferramentas da pela IBX, normalmente depois de uma inserção vc fechar essa transação e tudo o que fez ficara disponiveis em outros terminais !
If DataModule.Transacao.Active = False Then
DataModule.Transacao.Active :=True ;
DataModule.Transacao.Commit ;
Agora eu utilizo classe p/ trabalhar com o banco, não utiliza componentes dataware, para mim foi a melhor forma que encontrei p/ trabalar com BDS, uma coisa aprendi trabalhar com Bds, vc tem que utilizar os comando em SQL Mesmo !, p/ que vc tenha velocidade. vou te passar um exemplo de uma classe o que precisar estamos por ai !!
unit Tperda;
interface
Uses
Windows, Messages, SysUtils,Dialogs,IBQuery,Db,Controls;
Type
TB_Perda =Class(Tobject)
Tb_Perdas:TIBQuery;
DataPerdas:TDataSource;
Data1,Data2:String;
Produto,Motivo,Quant,Nr:String ;
Total,Custo : Currency ;
Function LerDados : Boolean ;
Function Inserir : Boolean ;
Function GravaDados : Boolean ;
Function PerdaData : Boolean ;
Function Excluir : Boolean ;
Function InformarSize(Campo : String) : Integer ;
public
constructor Create ;
Destructor Destroy ; Override ;
end ;
implementation
Uses Unit25;
constructor Tb_Perda.Create ;
begin
Tb_Perdas:=TIBQuery.Create(nil) ;
DataPerdas:=TDataSource.Create(nil) ;
Tb_Perdas.DataBase:=DataModule25.Conexao ;
DataPerdas.DataSet:=Tb_Perdas ;
end;
Destructor TB_Perda.Destroy ;
begin
Tb_Perdas.Free ;
DataPerdas.Free ;
end;
Function Tb_Perda.InformarSize( Campo : String ) : integer ;
begin
Result := 0 ;
Campo := UpperCase( Campo ) ;
if Campo = ´PRODUTO´ then
Result := 50
else if Campo = ´MOTIVO´ then
Result := 40
end;
Function Tb_Perda.LerDados : Boolean;
Begin
With Tb_Perdas,SQL do
Begin
Try
Clear ;
Add(´Select * From Perda Order by Produto ´);
Active:=True;
Result:=True;
Except
MessageDlg(´IMPOSSIVEL, CARREGAR OS DADOS !...´,mtError,[mbOK],0);
Result:=False;
end;
end;
end;
Function Tb_Perda.PerdaData : Boolean;
Begin
With Tb_Perdas,SQL do
Begin
Try
Clear ;
Add(´Select * from PERDA Where Data>=:Vdata1 and Data <=:VData2´);
ParamByName(´Vdata1´).AsString:=Data1;
ParamByName(´Vdata2´).AsString:=Data2;
Active:=True;
Result:=True;
Except
MessageDlg(´IMPOSSIVEL, CARREGAR OS DADOS ...´,mtError,[mbOK],0);
Result:=False;
end ;
end ;
end ;
Function Tb_Perda.Inserir : Boolean;
Begin
With Tb_Perdas,SQL do
Begin
Try
Clear ;
Add(´insert into PERDA´);
Add(´(PRODUTO,MOTIVO,QUANTIDADE,DATA,PRECO_COMPRA,TOTAL)´);
Add(´values´);
Add(´(:VPRODUTO,:VMOTIVO,:VQUANTIDADE,:VDATA,:VCUSTO,:VTOTAL)´);
ParamByname(´VProduto´ ).AsString := Produto ;
ParamByname(´VMotivo´ ).AsString := Motivo ;
ParamByname(´VQuantidade´).AsString := Quant ;
ParamByname(´VData´ ).AsString := DateTostr(now) ;
ParamByname(´VTotal´ ).AsFloat := Total ;
ParamByname(´VCusto´ ).AsFloat := Custo ;
ExecSql ;
Add(´Commit´);
Result:=True;
Except
MessageDlg(´IMPOSSIVEL, ADICIONAR DADOS !...´,mtError,[mbOK],0);
Result:=False;
end;
end;
end;
Function Tb_Perda.GravaDados : Boolean;
Begin
With Tb_Perdas,SQL do
Begin
Try
Clear ;
Add(´update PERDA´);
Add(´set´);
Add(´PRODUTO = :VPRODUTO,´);
Add(´MOTIVO = :VMOTIVO,´);
Add(´QUANTIDADE = :VQUANTIDADE,´);
Add(´DATA = :VDATA´);
Add(´where´);
Add(´MOTIVO = :VMOTIVO´);
ParamByname(´VProduto´).AsString :=Produto ;
ParamByname(´VMotivo´).AsString :=Motivo ;
ParamByname(´VQuantidade´).AsString :=Quant ;
ParamByname(´VData´).AsDate :=TDate(now) ;
ExecSql ;
Add(´Commit´);
Result:=True;
Except
MessageDlg(´IMPOSSIVEL, GRAVAR OS DADOS !...´,mtError,[mbOK],0);
Result:=False;
end;
end;
end;
Function Tb_Perda.Excluir : Boolean;
Begin
With Tb_Perdas,SQL do
Begin
Try
Clear ;
Add(´Delete from PERDA´);
Add(´Where (Nr)= :VNr ´) ;
ParamByName(´VNr´).AsString:=Nr;
ExecSql ;
Add(´Commit´);
Result:=True;
Except
MessageDlg(´IMPOSSÍVEL, EXCLUIR PERDA !...´,mtError,[mbOK],0);
Result:=False;
end;
end;
end;
end.
Se pode utilizar as ferramentas da pela IBX, normalmente depois de uma inserção vc fechar essa transação e tudo o que fez ficara disponiveis em outros terminais !
If DataModule.Transacao.Active = False Then
DataModule.Transacao.Active :=True ;
DataModule.Transacao.Commit ;
Agora eu utilizo classe p/ trabalhar com o banco, não utiliza componentes dataware, para mim foi a melhor forma que encontrei p/ trabalar com BDS, uma coisa aprendi trabalhar com Bds, vc tem que utilizar os comando em SQL Mesmo !, p/ que vc tenha velocidade. vou te passar um exemplo de uma classe o que precisar estamos por ai !!
unit Tperda;
interface
Uses
Windows, Messages, SysUtils,Dialogs,IBQuery,Db,Controls;
Type
TB_Perda =Class(Tobject)
Tb_Perdas:TIBQuery;
DataPerdas:TDataSource;
Data1,Data2:String;
Produto,Motivo,Quant,Nr:String ;
Total,Custo : Currency ;
Function LerDados : Boolean ;
Function Inserir : Boolean ;
Function GravaDados : Boolean ;
Function PerdaData : Boolean ;
Function Excluir : Boolean ;
Function InformarSize(Campo : String) : Integer ;
public
constructor Create ;
Destructor Destroy ; Override ;
end ;
implementation
Uses Unit25;
constructor Tb_Perda.Create ;
begin
Tb_Perdas:=TIBQuery.Create(nil) ;
DataPerdas:=TDataSource.Create(nil) ;
Tb_Perdas.DataBase:=DataModule25.Conexao ;
DataPerdas.DataSet:=Tb_Perdas ;
end;
Destructor TB_Perda.Destroy ;
begin
Tb_Perdas.Free ;
DataPerdas.Free ;
end;
Function Tb_Perda.InformarSize( Campo : String ) : integer ;
begin
Result := 0 ;
Campo := UpperCase( Campo ) ;
if Campo = ´PRODUTO´ then
Result := 50
else if Campo = ´MOTIVO´ then
Result := 40
end;
Function Tb_Perda.LerDados : Boolean;
Begin
With Tb_Perdas,SQL do
Begin
Try
Clear ;
Add(´Select * From Perda Order by Produto ´);
Active:=True;
Result:=True;
Except
MessageDlg(´IMPOSSIVEL, CARREGAR OS DADOS !...´,mtError,[mbOK],0);
Result:=False;
end;
end;
end;
Function Tb_Perda.PerdaData : Boolean;
Begin
With Tb_Perdas,SQL do
Begin
Try
Clear ;
Add(´Select * from PERDA Where Data>=:Vdata1 and Data <=:VData2´);
ParamByName(´Vdata1´).AsString:=Data1;
ParamByName(´Vdata2´).AsString:=Data2;
Active:=True;
Result:=True;
Except
MessageDlg(´IMPOSSIVEL, CARREGAR OS DADOS ...´,mtError,[mbOK],0);
Result:=False;
end ;
end ;
end ;
Function Tb_Perda.Inserir : Boolean;
Begin
With Tb_Perdas,SQL do
Begin
Try
Clear ;
Add(´insert into PERDA´);
Add(´(PRODUTO,MOTIVO,QUANTIDADE,DATA,PRECO_COMPRA,TOTAL)´);
Add(´values´);
Add(´(:VPRODUTO,:VMOTIVO,:VQUANTIDADE,:VDATA,:VCUSTO,:VTOTAL)´);
ParamByname(´VProduto´ ).AsString := Produto ;
ParamByname(´VMotivo´ ).AsString := Motivo ;
ParamByname(´VQuantidade´).AsString := Quant ;
ParamByname(´VData´ ).AsString := DateTostr(now) ;
ParamByname(´VTotal´ ).AsFloat := Total ;
ParamByname(´VCusto´ ).AsFloat := Custo ;
ExecSql ;
Add(´Commit´);
Result:=True;
Except
MessageDlg(´IMPOSSIVEL, ADICIONAR DADOS !...´,mtError,[mbOK],0);
Result:=False;
end;
end;
end;
Function Tb_Perda.GravaDados : Boolean;
Begin
With Tb_Perdas,SQL do
Begin
Try
Clear ;
Add(´update PERDA´);
Add(´set´);
Add(´PRODUTO = :VPRODUTO,´);
Add(´MOTIVO = :VMOTIVO,´);
Add(´QUANTIDADE = :VQUANTIDADE,´);
Add(´DATA = :VDATA´);
Add(´where´);
Add(´MOTIVO = :VMOTIVO´);
ParamByname(´VProduto´).AsString :=Produto ;
ParamByname(´VMotivo´).AsString :=Motivo ;
ParamByname(´VQuantidade´).AsString :=Quant ;
ParamByname(´VData´).AsDate :=TDate(now) ;
ExecSql ;
Add(´Commit´);
Result:=True;
Except
MessageDlg(´IMPOSSIVEL, GRAVAR OS DADOS !...´,mtError,[mbOK],0);
Result:=False;
end;
end;
end;
Function Tb_Perda.Excluir : Boolean;
Begin
With Tb_Perdas,SQL do
Begin
Try
Clear ;
Add(´Delete from PERDA´);
Add(´Where (Nr)= :VNr ´) ;
ParamByName(´VNr´).AsString:=Nr;
ExecSql ;
Add(´Commit´);
Result:=True;
Except
MessageDlg(´IMPOSSÍVEL, EXCLUIR PERDA !...´,mtError,[mbOK],0);
Result:=False;
end;
end;
end;
end.
GOSTEI 0
Eniorm
07/06/2004
Tenho a Maquina A e a Maquina B, quando a Maquina A faz uma inclusao ou exclusao ou alteracao a Maquina B, nao
aparece para a Maquina B Alguem pode me dar alguma dica?
Obs. estou usando um botao para incluir(qry.append)e
um botao para salvar(qry.post)
Gostaria qeu alguem me desse um exemplo....
Me ajudem evandro
Eu não uso o Apend, uso o Insert... até ai td bem.
Falta fazer a configuração do IBTransaction, de 2 cliques
nele e escolha a opção read commited.
ei toda vez em que vc dar Post, logo em seguida de o
ApplyUpdates e depois Commit ou CommitRetaining no
IBTransaction.
T+
GOSTEI 0