ACHAR PROBLEMA DE PERMISSÃO NEGADA

FUTURA 15/07/2015 09:29:03
#448855
Pessoal, to com um problema em um cliente, usamos o tef em 4 PDVs, e em apenas um deles, após autorizar a venda do cartão, o sistema não consegue apagar o arquivo da pasta por [Ô]permissão denied[Ô], e não conclui a transação, seu eu limpo a pasta, a primeira venda vai normal, as vezes até umas 2 ou 3, mas logo para novamente, mas o curioso, é que os pdvs usam atalho do mesmo EXE do servidor, e ja checamos as configurações de tef dos 4 pontos, chegamos até a formatar o micro instalando um windows novo, mas nada. Como eu poderia checar exatamente na linha do erro ?, pensei em instalar o vb no micro e acessar o sistema pela IDE, desativando o tratamento de erro para chegar no ponto exato, teria outra maneira ?
ALVAROVB2009 15/07/2015 10:08:31
#448861
Eu ja enfrentei isso e o problema era que ele estava tentando apagar um arquivo que eu não tinha fechado ainda, ele passava por uma rotina onde no final eu nao fechava o arquivo para poder excluir

Más instalar o VB na máquina é uma ótima alternativa, caso o problema não seja o mesmo que o que eu passei
FUTURA 15/07/2015 10:16:25
#448862
Então Alvaro, complicado, o que explicaria outros 3 pdvs usando mesmo exe não apresentar o problema ?, os arquivos do tef são tratados localmente em C:\, o que me parece é que o arquivo não foi liberado pelo client tef, mas o que me deixa curioso, é pq só neste pdv.. Mas acho q a saida vai mesmo ser instalar o vb pra chegar no ponto correto.
ALVAROVB2009 15/07/2015 10:28:50
#448864
Complicado mesmo, como comentei passei o mesmo problema, pois em um PDV não acontecia nada, rodava que era uma beleza, porém no outro era um parto

Meu caso eu tive que fazer uma reinstalação pois era um problema de um arquivo danificado
PROFESSOR 15/07/2015 11:48:58
#448868
Só tentando achar uma explicação plausível, ok? Rede, usuários e permissões.
Pense o seguinte: Com qualquer arquivo, sempre imaginamos que há basicamente duas formas de acesso, Leitura e Escrita, e quando ocorre um Permission Denied, temos a tendência de achar que é algum erro da aplicação.
Mas na verdade, há mais do que isso. Basta você perceber que todo sistema operacional permite a existência de contas de acesso ou logins, e assim, temos o compartilhamento como [Ô]fator complicador[Ô].
O módulo EXE que está no servidor não possui diretos de acesso no raiz do terminal onde o erro se dá com o usuário logado no Windows que chama esse EXE. Esse parece ser o problema.
Então, na minha opinião, não me parece que o problema está na sua aplicação, mas sim na configuração da rede, dos usuários dessa mesma rede e das permissões.
FUTURA 15/07/2015 12:09:08
#448872
professor, é uma rede sem dominio, grupo doméstico, e arquivo local em c:\
ASHKATCHUP 15/07/2015 12:43:34
#448877
Resposta escolhida
Tu imagina qual(is) sub(s)/function(s) que está(ão) gerando o erro?

Se sim, faça o seguinte:

1) Crie o método Cria_Log com o código abaixo dentro de um Módulo
Public Sub Cria_Log(lNumeroErro As Long, sErroDesc As String, sNomeMetodo As String, lLine As Long)
Dim sArquivo As String
Dim iArq As Integer
Dim sTexto As String
[ô]
iArq = FreeFile
sArquivo = App.Path & [Ô]\LogErros.txt[Ô]
[ô]
If Dir(sArquivo, vbNormal) = [Ô][Ô] Then
Open sArquivo For Output As #iArq
Close #iArq
End If
[ô]
Open sArquivo For Append As #iArq
sTexto = Format(Now, [Ô]dd/mm/yyyy hh:nn:ss[Ô]) & [Ô]|[Ô] & sNomeMetodo & [Ô] - [Ô] & lLine & [Ô]|[Ô] & lNumeroErro & [Ô]|[Ô] & sErroDesc
Print #iArq, sTexto
Close #iArq
[ô]
MsgBox [Ô]Erro! Um arquivo de log foi criado em: [Ô] & sArquivo, vbOKOnly + vbCritical, [Ô]Tratamento de erros[Ô]
[ô]
Err.Clear
End Sub


2) Vá na(s) sub(s) e insira o tratamento de erro da seguinte forma
Public Function Teste() As Boolean
On Error GoTo ErroTeste
[ô]
Teste = (1 = 2)
Exit Function
[ô]
ErroTeste:
Cria_Log Err.Number, Err.Description, [Ô]Teste[Ô], Erl
End Function


Importante: não esqueça de usar Exit Sub e Exit Function em todas funções que chamarem o log de erros para evitar que o tratamento de erro seja chamado toda hora.

3) Por fim, enumere as linhas da(s) sub(s).
Public Function Teste() As Boolean
01 On Error GoTo ErroTeste:
02 [ô]
03 Teste = false
04 [ô]
05 ErroTeste:
06 Cria_Log Err.Number, Err.Description, [Ô]Teste[Ô], Erl
End Function


Dessa forma, o log vai gravar exatamente a linha *, o form e a sub que gerou o erro.
Ex.:
15/07/2015 12:42:45|Teste - 2|13|Type mismatch


*: o VB nao considera linhas em branco nessa contagem de linhas. Então, pode ser que o numero da linha não seja exato.
Tópico encerrado , respostas não são mais permitidas