Jump to content
Fivewin Brasil

mesmo registro numa rede


Luiz Fernando

Recommended Posts

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

hbcLWW6.jpg?1

Obrigado

Luiz Fernando

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...