Fórum Atualizar registro em uma Thread (usando dbExpress) #403665
24/06/2011
0
[b]Boa tarde Sr(a)s ![/b]
Tenho uma aplicação em que duas Threads acessam o mesmo banco Firebird (1.5). Para cada Thread criei o trio de componentes dbExpress dinamicamente mais o TSqlConnetion (dinamico também). Coforme abaixo :
Este trecho exibido é da Thread que faz a inclusão de registros. Ela funciona corretamente.
Porém no trecho (na outra Thread) abaixo onde devo atualizar um registro ele aparentemente faz a alteração mas não grava (não ocorre nenhum erro).
O Recordcount nunca diminui e os dados não são gravados.
O que pode estar ocorrendo já que consigo Incluir mas não consigo alterar.
Desde já agradeço
var
smsConecta1 : TSQLConnection;
smsSqlqry1 : TSQLQuery;
smsProvider1 : TDataSetProvider;
smsClient1 : TClientDataSet;
begin
smsConecta1 := TSQLConnection.Create(Application);
smsConecta1.Name := 'smsConecta1';
smsConecta1.ConnectionName := 'BANCO_RECEBE';
smsConecta1.DriverName := 'Interbase';
smsConecta1.GetDriverFunc := 'getSQLDriverINTERBASE';
smsConecta1.LibraryName := 'dbexpint.dll';
smsConecta1.LoginPrompt := FALSE;
smsConecta1.VendorLib := 'GDS32.DLL';
smsConecta1.Params.Values['User_Name'] := 'SYSDBA';
smsConecta1.Params.Values['Password'] := 'masterkey';
smsConecta1.Params.Values['Database'] := 'ADMBANCO.FDB';
smsSqlqry1 := TSQLQuery.Create(Application);
smsSqlqry1 .Name := 'smsSqlqry';
smsSqlqry1.SQL.Add('SELECT SITUACAO,MENSAGEM FROM MENSAGENS ORDER BY DATA_RECEBIMENTO DESC, HORA_RECEBIMENTO DESC');
smsSqlqry1.SQLConnection := smsConecta1;
smsProvider1 := TDataSetProvider.Create(Application);
smsProvider1.Name := 'smsProvider';
smsProvider1.DataSet := smsSqlqry1;
smsClient1 := TClientDataSet.Create(Application);
smsClient1.Name := 'smsClient';
smsClient1.ProviderName := 'smsProvider';
smsClient1.Open;
.
.
.
smsClient1.Append;
smsClient1.FieldByName('MENSAGEM').AsString := sMsg2;
smsClient1.FieldByName('SITUACAO').AsString := 'R';
smsClient1.Post;
smsClient1.ApplyUpdates(-1);
smsClient1.Refresh;
var
smsConecta : TSQLConnection;
smsSqlqry : TSQLQuery;
smsProvider : TDataSetProvider;
smsClient : TClientDataSet;
begin
smsConecta := TSQLConnection.Create(Application);
smsConecta.Name := 'smsConectaProcessar';
smsConecta.ConnectionName := 'BANCO_RECEBE';
smsConecta.DriverName := 'Interbase';
smsConecta.GetDriverFunc := 'getSQLDriverINTERBASE';
smsConecta.LibraryName := 'dbexpint.dll';
smsConecta.LoginPrompt := FALSE;
smsConecta.VendorLib := 'GDS32.DLL';
smsConecta.Params.Values['User_Name'] := 'SYSDBA';
smsConecta.Params.Values['Password'] := 'masterkey';
smsConecta.Params.Values['Database'] := 'ADMBANCO.FDB';
smsSqlqry := TSQLQuery.Create(Application);
smsSqlqry.Name := 'smsSqlqryProcessar'
smsSqlqry.SQL.Add('SELECT MENSAGEM,SITUACAO FROM MENSAGENS WHERE SITUACAO = '+ '''R'''+' ORDER BY DATA_RECEBIMENTO, HORA_RECEBIMENTO');
smsSqlqry.SQLConnection := smsConecta;
smsSqlqry.Open;
smsSqlqry.FieldByName('SITUACAO').ProviderFlags := [pfInUpdate,pfInWhere];
smsSqlqry.FieldByName('MENSAGEM').ProviderFlags := [pfInUpdate,pfInWhere];
smsProvider := TDataSetProvider.Create(Application);
smsProvider.Name := 'smsProviderProcessar';
smsProvider.DataSet := smsSqlqry;
smsClient := TClientDataSet.Create(Application);
smsClient.Name := 'smsClientProcessar';
smsClient.ProviderName := smsProvider.name;
while true do
begin
smsClient.Open;
if smsClient.RecordCount > 0 then
begin
smsClient.Edit;
smsClient.FieldByName('MENSAGEM').AsString := strMSgRetorno;
smsClient.FieldByName('SITUACAO').AsString := 'P';
smsClient.Post;
smsClient.ApplyUpdates(-1);
end;
smsClient.Close;
end;
William Maciel.
Curtir tópico
+ 0
Responder
Posts
28/06/2011
Wilson Junior
Tente substituir o seu if
por
Espero ter colaborado.
if smsClient.RecordCount > 0 then
por
if not smsClient.IsEmpty then
Espero ter colaborado.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)