Gravar um registro em um banco de dados na nuvem
12/02/2019
0
Bom dia!
Galera estou tendo dificuldades para gravar um registro em um banco de dados na nuvem. O caso é o seguinte: tenho um banco de dados Firebird local que possui uma tabela chamada Delegacias. Tenho um banco de dados na nuvem com a mesma tabela. As conexões estão todas funcionando certinhas. O negócio é somente na gravação mesmo. Para evitar de ocorrer algum problema quando o usuário estiver usando o sistema, eu coloquei uma thread no BeforePost no objeto Firedac chamado querydel, que ficou assim:
//replica as informações para o banco de dados espelho...
TThread.CreateAnonymousThread(procedure begin
If InternetCheckConnection('http://www.google.com/',1,0) Then
begin
if ConexaoGlobalR = True then
begin
if querydel.State in [dsInsert,dsEdit] then
begin
with DMR do
begin
with query do
begin
Close;
Sql.Clear;
Sql.Add('select * from DELEGACIAS where COD_DEL='''+editcod.Text+'''');
econexao.Online;
Open;
if(RecordCount=0)then
begin
query.Insert;
query.FieldValues
['COD_DEL;NOME;DT_CRIA;ENDERECO;MUNICIPIO;POVOADO;FONE;DIST_STR;COD_STR;COORD;SECRET;TESOUR;'
+'PER_GRAT;DT_ULT_ASS;POVOADOS;SUPLEN;ULT_NUM_VIA;DT_ELEICAO;PROX_ELEICAO;SITUACAO;CADASTRO;'
+'ALTERACAO;IMPORTACAO;EXPORTACAO;UCIDUSER;UCDATA;COD_INTEGRA'] := querydel.FieldValues
['COD_DEL;NOME;DT_CRIA;ENDERECO;MUNICIPIO;POVOADO;FONE;DIST_STR;COD_STR;COORD;SECRET;TESOUR;'
+'PER_GRAT;DT_ULT_ASS;POVOADOS;SUPLEN;ULT_NUM_VIA;DT_ELEICAO;PROX_ELEICAO;SITUACAO;CADASTRO;'
+'ALTERACAO;IMPORTACAO;EXPORTACAO;UCIDUSER;UCDATA;COD_INTEGRA'];
query.Post;
econexao.Commit;
end
else
begin
query.Edit;
query.FieldValues
['COD_DEL;NOME;DT_CRIA;ENDERECO;MUNICIPIO;POVOADO;FONE;DIST_STR;COD_STR;COORD;SECRET;TESOUR;'
+'PER_GRAT;DT_ULT_ASS;POVOADOS;SUPLEN;ULT_NUM_VIA;DT_ELEICAO;PROX_ELEICAO;SITUACAO;CADASTRO;'
+'ALTERACAO;IMPORTACAO;EXPORTACAO;UCIDUSER;UCDATA;COD_INTEGRA'] := querydel.FieldValues
['COD_DEL;NOME;DT_CRIA;ENDERECO;MUNICIPIO;POVOADO;FONE;DIST_STR;COD_STR;COORD;SECRET;TESOUR;'
+'PER_GRAT;DT_ULT_ASS;POVOADOS;SUPLEN;ULT_NUM_VIA;DT_ELEICAO;PROX_ELEICAO;SITUACAO;CADASTRO;'
+'ALTERACAO;IMPORTACAO;EXPORTACAO;UCIDUSER;UCDATA;COD_INTEGRA'];
query.Post;
econexao.Commit;
end;
econexao.Offline;
Close;
end;
end;
end;
end;
end;
end).start();
Com tudo ao chegar na linha em que está "if querydel.State in [dsInsert,dsEdit] then", simplesmente passa direto, como se não estive nem editando nem alterando.
Tenho um botão chamado Gravar que é justamente para que o usuário grave os dados no banco local... Será que estou fazendo a rotina no evento certo do objeto, o tal "beforepost"?
Galera estou tendo dificuldades para gravar um registro em um banco de dados na nuvem. O caso é o seguinte: tenho um banco de dados Firebird local que possui uma tabela chamada Delegacias. Tenho um banco de dados na nuvem com a mesma tabela. As conexões estão todas funcionando certinhas. O negócio é somente na gravação mesmo. Para evitar de ocorrer algum problema quando o usuário estiver usando o sistema, eu coloquei uma thread no BeforePost no objeto Firedac chamado querydel, que ficou assim:
//replica as informações para o banco de dados espelho...
TThread.CreateAnonymousThread(procedure begin
If InternetCheckConnection('http://www.google.com/',1,0) Then
begin
if ConexaoGlobalR = True then
begin
if querydel.State in [dsInsert,dsEdit] then
begin
with DMR do
begin
with query do
begin
Close;
Sql.Clear;
Sql.Add('select * from DELEGACIAS where COD_DEL='''+editcod.Text+'''');
econexao.Online;
Open;
if(RecordCount=0)then
begin
query.Insert;
query.FieldValues
['COD_DEL;NOME;DT_CRIA;ENDERECO;MUNICIPIO;POVOADO;FONE;DIST_STR;COD_STR;COORD;SECRET;TESOUR;'
+'PER_GRAT;DT_ULT_ASS;POVOADOS;SUPLEN;ULT_NUM_VIA;DT_ELEICAO;PROX_ELEICAO;SITUACAO;CADASTRO;'
+'ALTERACAO;IMPORTACAO;EXPORTACAO;UCIDUSER;UCDATA;COD_INTEGRA'] := querydel.FieldValues
['COD_DEL;NOME;DT_CRIA;ENDERECO;MUNICIPIO;POVOADO;FONE;DIST_STR;COD_STR;COORD;SECRET;TESOUR;'
+'PER_GRAT;DT_ULT_ASS;POVOADOS;SUPLEN;ULT_NUM_VIA;DT_ELEICAO;PROX_ELEICAO;SITUACAO;CADASTRO;'
+'ALTERACAO;IMPORTACAO;EXPORTACAO;UCIDUSER;UCDATA;COD_INTEGRA'];
query.Post;
econexao.Commit;
end
else
begin
query.Edit;
query.FieldValues
['COD_DEL;NOME;DT_CRIA;ENDERECO;MUNICIPIO;POVOADO;FONE;DIST_STR;COD_STR;COORD;SECRET;TESOUR;'
+'PER_GRAT;DT_ULT_ASS;POVOADOS;SUPLEN;ULT_NUM_VIA;DT_ELEICAO;PROX_ELEICAO;SITUACAO;CADASTRO;'
+'ALTERACAO;IMPORTACAO;EXPORTACAO;UCIDUSER;UCDATA;COD_INTEGRA'] := querydel.FieldValues
['COD_DEL;NOME;DT_CRIA;ENDERECO;MUNICIPIO;POVOADO;FONE;DIST_STR;COD_STR;COORD;SECRET;TESOUR;'
+'PER_GRAT;DT_ULT_ASS;POVOADOS;SUPLEN;ULT_NUM_VIA;DT_ELEICAO;PROX_ELEICAO;SITUACAO;CADASTRO;'
+'ALTERACAO;IMPORTACAO;EXPORTACAO;UCIDUSER;UCDATA;COD_INTEGRA'];
query.Post;
econexao.Commit;
end;
econexao.Offline;
Close;
end;
end;
end;
end;
end;
end).start();
Com tudo ao chegar na linha em que está "if querydel.State in [dsInsert,dsEdit] then", simplesmente passa direto, como se não estive nem editando nem alterando.
Tenho um botão chamado Gravar que é justamente para que o usuário grave os dados no banco local... Será que estou fazendo a rotina no evento certo do objeto, o tal "beforepost"?
Marcos Morais
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)