Fórum Travar Registros no IB #43887

27/04/2004

0

Tenho uma tabela de notas fiscais, e a mesma pode ser acessada por n usuarios.
mostro todos os registros em uma pesquisa para os usuarios ´A´ e ´B´.

O usuario ´A´ quer trabalhar a NF nro 10, e pega o registro para trabalhar.
No Oracle eu uso
CODE
SELECT * FROM TB_NF WHERE NOTA = 10 FOR UPDATE NO WAIT

para travar o registro para o usuario ´A´.

O usuario ´´B´ quer trabalhar também a NF nro 10, e tenta pegar o registro para trabalhar, no Oracle eu sei que se o usuario ´A´ está trabalhando com o comando
CODE
SELECT * FROM TB_NF WHERE NOTA = 10 FOR UPDATE NO WAIT


Se eu não conseguir dar um ´Lock´ travar o registro é porque ele esta em uso.

Gostaria se é possível travar apenas um registro para uso no Interbase.
Entendeu?

No help do SQL do interbase existe o comando NO WAIT porém pesquisando na net encontrei em algumas apostilas que o IB nao trava os registros.
A maneira mais fácil que conheço é tratando os registros por TAG(marca).
Ex.:
O usuario ´A´ quer trabalhar a NF nro 10, e pega o registro para trabalhar.
Então dou um UPDATE no campo TAG para 1.

O usuario ´´B´ quer trabalhar também a NF nro 10, e tenta pegar o registro para trabalhar.
Então verifico na tabela se a TAG do registro está em 0, se não o mesmo está em uso.
Mas isso é muito usado em Paradox, e acho que um banco legal como o Ib deveria ter esse recurso.
Obs.: Estarei testando o Firebird pois em alguns sites dizem que a versão 1.5 tem o comando que eu quero ´WHIT NO WAIT´

Obrigado a todos pela colaboração!!


Bolomaster

Bolomaster

Responder

Posts

01/06/2004

Jacson

E ai bolomaster .. ....... :oops:
Este post parece a copia de uma questão minha do scriptbrasil/forum/delphi e kylix
:oops:
abraços


Responder

Gostei + 0

01/06/2004

Afarias

no firebird 1.5 vc pode usar FOR UPDATE e FOR UPDATE WITH LOCK mas no IB ou no FB 1.0 não tem esses comandos, nestes casos, a única forma de fazer é ´alterando´ o registro (e não commitando) -- o registro fica bloqueado até q seja realizado um commit ou rollback.

a opção WAIT ou NO_WAIT é da transação.


T+


Responder

Gostei + 0

02/06/2004

Bolomaster

Parece, nao jacson, é, como esta eu nao sabia a resposta foi procurar quem sabe, blz..


abraços


Responder

Gostei + 0

02/06/2004

Jacson

foi só uma piadinha....
seu de sua boa intenção, e sei que vc como moderador no scriptbrasil tambem já respondeu muito bem a muitas questoes minhas ....
desculpe a birncadeira....

aproveitando o post na questão do interbase , tem um outro topico que postei que perguntavo sobre o retorno de cusores(querys) atraves de storedprocedures no IB, descobri:

CREATE PROCEDURE PROC_SELECT RETURNS (VARNOME CHAR(60)) AS
BEGIN
//CURSOR(No oracle abre-se o select com um objCursor (cCursor IS REFFCURSOR)
//No IB é que é necessario passar o valor para as variaveis(out)
FOR
SELECT NOME FROM CLIENTES INTO :VARNOME
DO
SUSPEND;
END
Abraço,
Att, Jacson Soares;


Responder

Gostei + 0

02/06/2004

Bolomaster

kra, sem problemas.. blz.. ai eu infelizmente, nao ando mais com tempo de participar dos foruns, pois agora estou fielmente envolvido com meus programas e me lancei de corpo e alma na faculdade... entao é f*.. mas valeu


[b:762a35754e]Olha o palavreado! ;)[/b:762a35754e]
(afarias)


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar