Fórum Interbase atualizando em rede(IBTransaction) #236585
07/06/2004
0
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
Curtir tópico
+ 0
Responder
Posts
08/06/2004
Essistemas
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.
Responder
Gostei + 0
08/06/2004
Eniorm
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+
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)