Ta haroldo e desde quando a nm avisa alguma coisa, eu estou esperando uma resposta sobre duas solicitacoes que abri na epoca que tinha suporte ha mais de 6 meses hoje nem tenho mais acesso para ver tais tickets …
b Situação do registro após os eventos[/b]
Nome da Mãe = “Maria”
Nome do Pai = “João Gomes”
Resumindo, o que ficou valendo foram os dados salvos por último, descartando as alterações realizadas pela estação 1.
Agora fica a pergunta, existe uma forma de controlar isso pelo scriptcase??? avisando no momento em que a segunda estação for atualizar o registro, que ele sofreu alteração por outro usuário???
Foi exatamente o que eu disse.
Eu resolvo isso desenvolvendo uma app de formulário com controle e colocando evento ajax em cada campo para detectar se foi alterado ou não.
Oque eu faço, é algo das antigas do inicio do visual basic, quando se utilizava-se controles do tipo datasource que amarrava o registro do banco ao componentes.
Eu crio um campo na tabela tipo char, com 0 ou 1 entao é simples em um app de grid ao inves de usar a edicao padrao do SC eu coloco um botão do tipo imagem e faço o direcionamento antes de trazer o registro para a tela eu gravo o valor no campo = 1, os proximos que tentarem acessar esse registro ja bloqueio o botao update … até que o form que abriu inicialmente seja descarregado … voltando o valor do campo para 0
Weber, matou a pau a questão… é muito simples dessa forma e garante integridade dos dados, uma função publica anexada nas apps resolve.
Eu não vejo isso como um bug mas também não vejo como um erro, muitas vezes para garantir a integridade de nossa base de dados temos que implementar soluções caseiras, mas para resumir uma forma de não ter este tipo de problema é deixar o processamento de banco ser feito pelo próprio banco com procedures, isso seria perfeito pois aí vc estaria trabalhando com transações identificadas pelo banco, ele trava o registro até o mesmo esteja concluido e somente depois libera.
Eu sempre disse que não vejo vantagem alguma em formularios carregando todos os registros (navegacão de registros). Agora além de não ver vantagem, vejo desvantagem. Eu sempre filtro o id da tabela base do formulário com uma comparação com zero ( id = 0), assim o não carrega a tabela inteira.
Também uso o bloqueio do registro em nível de usuário. Ou seja, um usuário (aplicacao) bloqueia o registro que esta trabalhando no momento. Como o amigo disse, é uma técnica dos tempos em que banco algum trabalhava com transação. Uso pq é mais comodo, mas o mysql consegue tratar isso.
Vai na gambiarra. A aplicacao que abre o registro testa o bloqueio. Se o registro estiver bloqueado por mais de dez minutos bloqueia para ela e acessa a tupla.
O tempo de 10 minutos foi um exemplo. Tipo se o registro estiver bloqueado por 10 minutos o usuário pode ter fechado o browse, deixando assim o registro bloqueado. Não significa que o registro tem que ficar bloquado por 10 minutos.
Como você tem feito o controle de transação em suas aplicações? Usa o controle do BD?
Eu utilizo aplicação formulário mas filtrando pelo registro sempre. Com isso o formulário nunca traz a tabela inteira. Assim não preciso escrever os comandos de commit do banco nem testar alterações nos campos. Vai prevalecer sempre o último update, sem perder campos pois em tabelas do tipo innoDB ocorre um bloqueio de registro automático.
Agora eu gostaria de tirar uma dúvida Haroldo. Suas tabelas no teste que vc fez, onde detectou que perdeu dados de campos são MyISAM?
Innodb. Mas a questão não eh o engine da tabela, nem o commit, ou o tipo de banco de dados a utilizar, quando falo de mult usuario não eh a nivel de registro e sim a nivel de coluna.
Outro bug:
Peguem uma app de formulario, adicionem manualmente um campo do tipo upload de imagem.
Primeiro bug: cliquem em atualizar no formulario. Da erro de update.
segundo: o sc renomeia o arquivo no upload e joga na pasta temp, tentem pegar o nome desse arquivo num evento ajax qualquer, supostamente o campo teria que ter o nome do arquivo, mas esta vazio.
Duro eh fazer o humilde suporte do fabricante entender isso.
O Script Case continua sem gerar o arquivo nm_rodape_css.html quando criamos templates para Rodapé.
O erro ocorre quando usamos o template no rodapé do Filtro de uma aplicação Consulta.
Erro já reportado há mais de ano e não levado em consideração pela NM.
Template Error: filename: file C:/Program Files (x86)/NetMake/v5/wwwroot/scriptcase/devel/conf/grp/BomGosto/tpl/footer/rodape_mensa3/nm_rodape_css.html does not exist.
Halted.
Quando vamos importar um Template / Rodapé também ocorre o erro secular:
file(C:/Program Files (x86)/NetMake/v5/wwwroot/scriptcase/devel/conf/scriptcase/tpl/footer/default/nm_rodape.html) [function.file]: failed to open stream: No such file or directory | Script: C:\Program Files (x86)\NetMake\v5\wwwroot\scriptcase\devel\class\page\nmPageAppTemplate.class.php linha: 178
A NM deve achar bonito a exibição do erro, não faz nada para corrigir.