Luiz Fernando Posted March 23, 2014 Report Share Posted March 23, 2014 Meu problema é que mais de um usuário entra no mesmo registro em terminais diferente, para eu fazer uma alteração faço da forma abaixo Ex: com apenas dois campos, o exemplo real tem mais de 100 campos cSql=”select cliente,status" cSql+="from os where pedido =’”+’variável+”’” aSql:=SqlArray(cSql) // aqui transfiro estes dados para minha array que irei usar nos gets aOs[D_CLIENTE]:=aSql[1,1] aOs[D_STATUS]:=aSql[1,2] //depois no final faço o update cSql=”UPDATE os SET” cSql+=” cliente=”+any2sql(aOs[D_CLIENTE])+” ,” cSql+=” status=”+any2sql(aOs[D_STATUS]) Muito bem isto funciona blz em todos módulos mais neste caso, imagina a seguinte situação, o técnico entra na OS esta escrevendo o diagnostico com toda calma do mundo e deixa ela aberta lá no micro dele, dai lá no setor financeiro entra a Maria na mesma OS faz algumas alterações e salva a mesma, dai qdo o técnico terminar o diagnostico e salvar ira perder todas informações que a Maria vez, como proceder neste caso alguma ideia... veja a imagem abaixa da tela em questão Obrigado Luiz Fernando Quote Link to comment Share on other sites More sharing options...
Theotokos Posted March 24, 2014 Report Share Posted March 24, 2014 Quanto ao SQL não sei, mas em DBF eu faço o seguinte: Travo o REGISTRO sendo editado no momento, e quando outro usuário tenta abrir o mesmo registro para alterar, recebe a mensagem de que já esta sendo editado, aguardar... Quote Link to comment Share on other sites More sharing options...
SAOliveira Posted March 24, 2014 Report Share Posted March 24, 2014 cId:=SqlArray("SELECT LAST_INSERT_ID() FROM "+Arg2+" LIMIT 1")[1,1] Bom. se o numero sequencial da OS for auto_increment, jamais acontecerá. Controlar é simples. - Ao entrar na OS pega o ultimo numero válido. - Ao gravar deixa a cargo do BD. - Após gravar pega o Last_Insert_id que é numero da ultima inclusão da conexão. Quote Link to comment Share on other sites More sharing options...
Edu Posted March 24, 2014 Report Share Posted March 24, 2014 Bom dia. Você pode travar o registro usando o comando SELECT ... FOR UPDATE. Ex: cSql:= "SELECT * FROM tbl_os WHERE id = ' "+STR(numeroOs)+" ' FOR UPDATE" Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted March 24, 2014 Author Report Share Posted March 24, 2014 Rone aqui tb faço assim , mais neste modulo não posso fazer isto... Sergio uso a ID e tb numero de pedido, tenho um esquema aqui que não tenho problema com isto, o problema é na alteração... Obrigado Luiz Fernando Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted March 24, 2014 Author Report Share Posted March 24, 2014 Bom dia. Você pode travar o registro usando o comando SELECT ... FOR UPDATE. Ex: cSql:= "SELECT * FROM tbl_os WHERE id = ' "+STR(numeroOs)+" ' FOR UPDATE" Edu obrigado pela resposta, não sabia desta sera muito util aqui, mais meu problema que este cliente já usa um outro sistema, e no sistema deles varios mexe na mesma O.S. ao mesmo tempo, dai ele não admite eu travar o registro para um unico usuario mexer na mesma O.S.... Obs: acho que terei que mudar toda logica neste modulo, caso alguém tiver alguma logica para isto Obrigado Luiz Fernando Quote Link to comment Share on other sites More sharing options...
sambomb Posted March 24, 2014 Report Share Posted March 24, 2014 Crie um campo extra para controlar o status e coloque o controle desta através de flags no banco de dados.Para poder evitar possíveis erros a cada "inicio de dia" você limpa essas flags antes de atualizar os indices Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted March 25, 2014 Author Report Share Posted March 25, 2014 Bom dia. Você pode travar o registro usando o comando SELECT ... FOR UPDATE. Ex: cSql:= "SELECT * FROM tbl_os WHERE id = ' "+STR(numeroOs)+" ' FOR UPDATE" Tentei usar aqui o FOR UPDATE, pois isto iria resolver meu problema por momento, não deu certo, o registro continua disponivel para qq um poder alterar, teria mais algum detalhe sobre este comando. Obrigado Luiz Fernando Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 25, 2014 Report Share Posted March 25, 2014 Algo a ver com isto? http://msdn.microsoft.com/pt-br/library/ms173763.aspx abs, Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted March 25, 2014 Report Share Posted March 25, 2014 Luiz, como tem um sistema de terceiros que usa o banco, como vc disse que precisa mudar a lógica, sugiro que vc após select, guarde uma cópia dos dados lidos em um vetor, antes de gravar os dados do seu sistema faz comparação dos dados do banco com o vetor cópia, assim, vc saberá se o dado sofreu intervenção do outro sistema, neste caso, se houver, vc aborta a alteração pelo seu sistema faz uma nova leitura e submete ao usuário efetuar as alterações necessária com base nos dados já alterado. Trata-se de um tremendo "ajuste técnico" JMSILVA Quote Link to comment Share on other sites More sharing options...
Valdir Posted March 25, 2014 Report Share Posted March 25, 2014 Olá pessoal... Aproveitando o tópico, poderiam me sanar uma dúvida ? Hoje tenho 3 Arquivos "Clientes.dbf", "Receber.dbf" e "Notafis.dbf". Nestes arquivos exite o campo "CodCli" em cada um deles. Utilizo esse campo para relacioná-los. Com a Sql continuarei a ter os mesmos 3 arquivos(Tabelas) no Banco de Dados ou terei uma única Tabela contendo : "Codcli1", "Codcli2" e Codcli3" ? Obrigado Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted March 25, 2014 Author Report Share Posted March 25, 2014 JMSILVA vlw pela resposta, realmente será uma grande ajuste tecnico, se fosse só uma tabela seria simples, mais são varias tabelas, itens utilizado,peças utilizada, rateamento de mão de obra e por ai vai... Valdir neste caso vc usuario o left join ex: select ped.produto,pro.descricao from pedido as ped left join produto as pro on ped.produto = pro.codigo Abraços Luiz Fernando Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.