Juliomar, obrigado pelo retorno.
Quando comecei o projeto e identifiquei o problema, fiz alguns estudos com os exemplos. Mas achei melhor revisar novamente depois do seu post.
Confesso que não identifiquei exemplo onde eu consiga aplicar as atualizações realizadas em um único processo, que afetam mais de uma tabela, em uma única transação. Estou baixando do svn http://svn.code.sf.net/p/zeoslib/code-0/branches/testing-7.2. Se você baixa de outra url me avise por favor.
Fiz algumas pesquisas no fórum e li que você tem várias soluções inclusive PDV com Zeos.
No meu caso atendo transportadoras.
Como exemplo, poderia nos dizer como você trata a transação no Zeoslib ao confirmar uma venda (nota, produtos, impostos)?
--
Abaixo o método que fiz para configurar o TZConnection.
function TRDBMS.doBDConfig():WideString;
const
sPass:String='senha';
var
sSGDB,sHost,sLib,sDB:String;
iPort:Integer;
begin
result := '';
try
sSGDB := objUtils.LerIni('DSGD.ini','GESTOR','SGDB','');
sHost := objUtils.LerIni('DSGD.ini','GESTOR','Host','');
sLib := objUtils.LerIni('DSGD.ini','GESTOR','Lib','');
iPort := objUtils.LerIni('DSGD.ini','GESTOR','Porta',0);
sDB := objUtils.LerIni('DSGD.ini','GESTOR','Banco','');
if Trim(sSGDB) <> '' then
begin
Case AnsiIndexStr(sSGDB,['MSSQL','MYSQL']) of
0:begin
objConn.User := 'sa';
objConn.Protocol := 'mssql';
end;
1:begin
objConn.User := 'root';
objConn.Protocol := 'mysql-5';
end;
End;
objConn.AutoCommit := True;
objConn.TransactIsolationLevel := tiReadCommitted;
objConn.HostName := sHost;
objConn.LibraryLocation := sLib;
objConn.Database := sDB;
objConn.Password := sPass;
if iPort > 0 then
objConn.Port := iPort;
end;
except on e:exception do
begin
result := e.Message;
end;
end;
end;
--
Abaixo, parte do código de um teste bastante simples para gravar duas tabelas na mesma transação.
qry = TZQuery;
cds = TClientDataSet;
Como é um teste, tenho um TEdit em tela onde digito a chave de integridade das tabelas.
app.Banco.Conexao.StartTransaction;
try
qry.Post;
cds.ApplyUpdates(0);
app.Banco.Conexao.Commit;
app.Utils.MsgAviso('Gravou!');
except on e:exception do
begin
app.Banco.Conexao.Rollback;
app.Utils.MsgErro('Erro '+e.Message);
end;
end;
Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.