Usar COMMIT nos processamentos

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Usar COMMIT nos processamentos

Mensagem por clodoaldomonteiro »

Olá!

Estava dando uma geral nos meus fontes de processamentos, onde pego dados de um DBF e repasso (REPL) em outro DBF e surgil uma dúvida.

Eu devo usar o COMMIT antes do USE, CLOSE ou CLOSE ALL ?
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Não adianta nda antes do USE e nem depois do CLOSE. O comando COMMAND tem por finalidade descarregar os buffers internos para o arquivo destino. Assim, as mudanças se tornarão imediatamente visíveis a outro usuário, em rede.
Ao executar um REPLACE, os dados não vão imediatamente para o arquivo. Usa-se COMMIT para forçar essa situação. Mas se o CLOSE vem em seguida, não há por quê usar COMMIT. Por outro lado, após um REPLACE pode vir outro ou vários outros. COMMIT, como trabalha com disco, é lento se executado seguidamente. O uso ideal é, após um REPLACE (ou vários), não seguido por CLOSE, executar apenas um COMMIT para descarregar os dados e continuar trabalhando no arquivo.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Mensagem por alaminojunior »

O comando COMMAND....
Gente, o Maligno tá precisando de umas férias :)) Brincadeirinha...

Só complementando...
sempre depois dos replaces antes de destravar o registro, use então DBCOMMIT() pois ele atua somente no banco atual, causando uma lentidão menor.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Maligno escreveu:O comando COMMAND....
Cruzes!!!! :)
Só complementando...
sempre depois dos replaces antes de destravar o registro, use então DBCOMMIT() pois ele atua somente no banco atual, causando uma lentidão menor.
Complemento muito oportuno. Obrigado. Sempre esqueço desse detalhe: o comando COMMIT é traduzido para dbCommitAll() que, aliás, eu nunca uso.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Mensagem por clodoaldomonteiro »

É, vi no asquivo STD.CH que o comando COMMIT chama o DBCOMMITALL() e tava vendo nos estudos de c++ que é mais produtivo usar as funções e não os comandos, acho que isso já foi comentado aqui também.

Nos processamentos que faço não vou precisar COMMIT e nem o DBCOMMIT() depois dos REPLACE, já que uso os arquivos em modo exclusivo, assim o sistema fica mais leve.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

clodoaldomonteiro escreveu:É, vi no asquivo STD.CH que o comando COMMIT chama o DBCOMMITALL()
Esse comando COMMIT, pra evitar confusão, deveria se chamar COMMITALL.
tava vendo nos estudos de c++ que é mais produtivo usar as funções e não os comandos, acho que isso já foi comentado aqui também.
Se foi comentado não lembro. Em C++ não existem comandos compostos como os do Clipper, mas comandos simples que não podem ser substituídos. Mas no quesito produtividade, não faz diferença o que se usa. Claro que isso dependende do codificador. Mas é muito mais fácil uma queda no nível de manutenibilidade do que no de produtividade.

Em Clipper é diferente. Na maior parte das vezes não dá pra trocar comandos por funções. Basta ver o conteúdo de um PPO pra entender por quê. :)
Nos processamentos que faço não vou precisar COMMIT e nem o DBCOMMIT() depois dos REPLACE, já que uso os arquivos em modo exclusivo, assim o sistema fica mais leve.
Não tem acesso multiusuário?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Mensagem por alaminojunior »

Acredito que vai dar na mesma, mas a documentação da CA informa que:
um simples GOTO RECNO() descarrega o buffer atual em disco...
deve ser um dbcommit() escondido !?
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Não um dbCommit() escondido, mas um efeito coloteral de mover o ponteiro para o mesmo lugar. Tá com cara de bug que deu certo. :)))
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Mensagem por clodoaldomonteiro »

Maligno escreveu:Não tem acesso multiusuário?
Tem sim, só que quando faço processamentos, pego vários arquivos para analizar e gerar registros em um arquivo diário, eu os abro em modo exclusivo.

Se não quando eu tiver totalizando uma conta, e outro usuário incluir um lançamento, os saldos das contas vão ficar furados.

É um fechamento mensal.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Se o sujeito fizer um lançamento após o processamento, os saldos das contas ficarão furados do mesmo jeito. Quando for imprimir o balanço ele já estará furado. :)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Era isso mesmo que ia dizer. De quê adianta brecar todo mundo se o resultado final será o mesmo. O que poderia ser considerado, nesses relatórios (ou até consultas) é colocar a data e hora para não houver discrepâncias nos relatórios sub-seguintes.

Ja se sabe que tão somente poucos casos é aconselhado o uso do READONLY, numa rede mais ainda.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Mensagem por clodoaldomonteiro »

Pessoal!

É que a rotina é de fechamento do mês e o usuário sabe que tem que usá-la para para atualizar as tabelas.

Quando ele altera uma tabela, eu altero uma variável para .f., e quanto ele usa o fechameno do mês essa variável passa a ser .t., assim quando ele for imprimir os relatório tem como eu saber se falta fechar o mês ou não.

Não sei se tem uma maneira melhor de fazer isso.

Ps. O sistema é basicamente de contabilidade, só que contabilidade pública, bem mais complicado.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Responder