Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Chan_Silva

Upload de arquivo xls e gravação de Dados no Banco

Recommended Posts

Olá Pessoal!

Sou novo no Fórum e no Asp.

Estou com um problema que nao consigo resolver.

Tenho uma página que faz upload de um arquivo xls para o servidor e uma que

faz a leitura do arquivo e grava no banco de dados. Até aí tudo funciona certinho.

Cada vez que faz upload o arquivo antigo é deletado e substituido pelo novo, só que

se essa substituição for feita logo em seguida (menos de um minuto)dá erro de permissão

na linha que exclui o arquivo pois o arquivo antigo fica bloqueado para edição e se esperar

mais ou menos um minuto ele é liberado. O que será que está acontecendo?

Obs.: Os objetos de conexao com o excel e Recordset sao fechados e eliminados na execução do código.

 

Se alguém puder me ajudar eu Agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

poste o code para analisarmos...

você esta lendo o arquivo antigo também ?

pois se não tá usando ele não é para estar bloquado. verifique também os direitos administrativos para exclusão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os direitos de exclusao estao liberados pois apos mais ou menos um minuto ele libera, nao sei o porquê disso mas está acontecendo.

 

O Primeiro arquivo faz a exclusao e renomeia o novo arquivo e o segundo

grava no banco.

 

 

arquivo: upload_xls2.asp

 

tipox = "arquivo_fgv"

info = " o arquivo FGV"

 

Select Case request.querystring("modo")

Case "arquivo_frame"

 

If request.querystring("upload") <> "" Then

Dim Uploader, File

Set Uploader = New FileUploader

Uploader.Upload()

 

If Uploader.Files.Count = 0 Then

sucesso = false

%>

<div class='div_erro'>Erro com o arquivo</div>

<%

Else

On error Resume next

For Each File In Uploader.Files.Items

nome_arquivo = File.FileName

tamanho = File.FileSize

extensao = Right(nome_arquivo, Len(nome_arquivo)-InStrRev(nome_arquivo, "."))

 

File.SaveToDisk server.mappath("/portais/colaborador_desenv/fgv/arquivos/")

 

Set fso = Server.CreateObject("Scripting.FileSystemObject")

arq = server.mappath("/portais/colaborador_desenv/fgv/arquivos/") & "/" & nome_arquivo

caminho = server.mappath("/portais/colaborador_desenv/fgv/arquivos/" & tipox & "." & extensao)

 

if fso.FileExists(caminho) then

fso.DeleteFile caminho 'Dá erro nesta linha

end if

 

Set fileName = fso.GetFile(arq)

renomear = tipox & "." & extensao

fileName.Name = renomear

set fso = nothing

Next

if Err.number <> 0 then

sucesso = false

else

sucesso = true

end if

 

End If

 

End if

 

End Select

 

 

 

arquivo_xls.asp

 

Const AdOpenStatic = 0

Const adLockPessimistic = 2

 

Dim cnnExcel

Dim rstExcel

On error Resume next

Set cnnExcel = Server.CreateObject("ADODB.Connection")

cnnExcel.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ="& Server.MapPath("arquivos/arquivo_fgv.xls")

'O objeto cnnExcel mantém o arquivo bloqueado mais ou menos por um minuto e depois libera

 

Set rstExcel = Server.CreateObject("ADODB.Recordset")

rstExcel.Open "SELECT * FROM [xls_exportacao$] ",cnnExcel,adOpenStatic,adLockPessimistic

 

 

If Err.number<>0 then

response.write "<center>.<h3>Erro ao Importar Arquivo!<br>Repita o procedimento<br>verificando se o nome da planilha é <font color='#FF0000'> xls_exportacao</font>!<h3></center><br> <input type=""button"" value=""Fechar"" onclick=""javascript:window.close()"">"

else

Call Abre_dbaluno()

 

if not rstExcel.EOF then

rstExcel.MoveNext

venc = Split(rstExcel.Fields.Item(7).Value,"/")

ano_mes = venc(2)+venc(1)

sql="delete from arquivos_fgv where ano_mes="&ano_mes&";commit;"

 

Set querysql=Conn.execute(sql)

Set querysql=nothing

end if

If Err.number<>0 then

response.write "<center>.<h3>Erro ao Importar Arquivo!<br>Repita o Procedimento.<h3></center><br> <input type=""button"" value=""Fechar"" onclick=""javascript:window.close()"">"

else

sql1="Select isnull(max(seq),0) from arquivos_fgv;"

Set sequencia=conn.execute(sql1)

seq = sequencia(0)

pos=seq

sequencia.close

Set sequencia=nothing

 

sql2=""

do While Not rstExcel.EOF

seq = seq + 1

venc = Split(rstExcel.Fields.Item(7).Value,"/")

ano_mes = venc(2)+venc(1)

turma = rstExcel.Fields.Item(0).Value

matricula = rstExcel.Fields.Item(1).Value

ano_matricula = rstExcel.Fields.Item(2).Value

cd_servico = rstExcel.Fields.Item(3).Value

num_fatura = rstExcel.Fields.Item(4).Value

ano_fatura = rstExcel.Fields.Item(5).Value

cd_documento = rstExcel.Fields.Item(6).Value

dt_vcto = rstExcel.Fields.Item(7).Value

if dt_vcto <> "" then

vencimento = "'"&formataData(dt_vcto,1)&"'"

else

vencimento = "null"

end if

contrato = rstExcel.Fields.Item(8).Value

sequencial = rstExcel.Fields.Item(9).Value

num_boleto = rstExcel.Fields.Item(10).Value

vl_valor = Replace(rstExcel.Fields.Item(11).Value,",",".")

nome_aluno = rstExcel.Fields.Item(12).Value

cpf_cnpj_pgto = rstExcel.Fields.Item(13).Value

tipo_lancamento = rstExcel.Fields.Item(14).Value

dt_pgto = rstExcel.Fields.Item(15).Value

if dt_pgto <> "" then

pagto = "'"&formataData(dt_pgto,1)&"'"

else

pagto = "null"

end if

 

sql2=sql2&"Insert into arquivos_fgv(ano_mes, seq,cd_turma, matricula, ano_matricula, cd_servico, numero_fatura, ano_fatura, cd_documento, dt_vcto,contrato, sequencial,numero_boleto, vl_valor,nome_aluno, cpf_cnpj_pgto,tipo_lanc, dt_pgto) values("&ano_mes&","&seq&",'"&turma&"',"&matricula&","&ano_matricula&",'"&cd_servico&"',"&num_fatura&","&ano_fatura&","&cd_documento&","&vencimento&",'"&contrato&"',"&sequencial&",'"&num_boleto&"',"&vl_valor&",'"&nome_aluno&"','"&cpf_cnpj_pgto&"','"&tipo_lancamento&"',"&pagto&");"

 

rstExcel.MoveNext

loop

 

 

Set querysql =Conn.execute(sql2)

Set query=nothing

 

rstExcel.Close

cnnExcel.Close

 

Set rstExcel = Nothing

Set cnnExcel = Nothing

 

Call Fecha_db()

 

response.write "<center>.<h3>Importação Realizada com Sucesso!<br>Total de "&seq-pos&" Registros Inseridos.<h3></center><br> <input type=""button"" value=""Fechar"" onclick=""javascript:window.close()"">"

 

end if

end if

Compartilhar este post


Link para o post
Compartilhar em outros sites

quando você vai fazer a excluvão o arquivo esta aberto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao era pra estar aberto pois o objeto que contem a string que faz a conexão com o arquivo é fechada e eliminada antes de fazer a exclusão:

 

rstExcel.Close

cnnExcel.Close

Set rstExcel = Nothing

Set cnnExcel = Nothing

 

Rodando uma vez esse código ele funciona direitinho, primeiro ele exclui o arquivo antigo e depois sobreescreve o arquivo novo renomeando para arquivo_fgv.xls e depois e feita a conexao prar ler o arquivo e gravar os dados no banco.Se for repetir o processo novamente ele da erro e se você abrir o arquivo pelo excel ele dá a mensagem que o arquivo esta em uso e esta bloqueado para a edição.Mas isso só por alguns instantes depois ele volta ao normal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual SO esta rodando no server ?

pois se ele funciona na primeira vez, não esta errado, mas a forma como ele esta tratando o processo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.