Gravar dados de arquivo txt em mdb
Saudações!!!
Estou com uma grande dificuldade.
Tenho um script que abre um arquivo txt e grava em um banco de dados. Até aí é simples, agora que vem o problema.:
Tenho uma tabela onde cadastro funcionários com so seguintes campos:
codsalario (auto)
codempresa (inteiro)
matriculafuncionario (texto)
saláriobase
salariobruto
competencia(texto)
E o arquivo texto vem com este formato:
;01;000000036;1000,00;1300,00;200910;
;02;000000036;1000,00;1300,00;200910;
Importar estes dados para o banco é tranquilo, mas preciso analisar os dados antes de importar. Por exemplo:
Eu posso ter funcionário João da Silva com matrícula 000000036 que trabalha na empresa "A" como posso ter o funcionário Pedro com matrícula 000000036 que trabalha na empresa "B".
Até aí tranquilo, apesar das matrículas serem iguais, as empresas são diferentes, não tem problema.
O problema começa qdo vou importar novamente o arquivo. Se tiver matrícula repetida e competência também (ex.: outubro de 2009) ele duplica, como na verdade não deveria importar e se vier mesmos dados, apenas atualizar o que for diferente.
Ou seja, se já tiver, uptdate, se não, insert.
Não sei se consegui explicar bem é isso.
Deixo abaixo o código que uso para gravar o arquivo atualmente:
<%
Dim Conexao
Set Conexao = Server.CreateObject("ADODB.Connection")
Conexao.Open "dbq="&Server.MapPath("banco.mdb")&";driver={Microsoft Access Driver (*.mdb)}"
'Antes de criarmos o FSO, iremos exibir uma imagem de envio
'Somente para ilustrar pois dependendo do arquivo o processo pode ser demorado
response.write "<img src='inserindo.gif'>"
Dim objFSO
'Aqui que daremos início ao sistema
'Criaremos o objeto FileSystemObject
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Dim varArquivo
'Agora, com o uso do FSO, iremos abrir o arquivo texto que iremos criar
Set varArquivo = objFSO.OpenTextFile(server.MapPath("arquivo.txt"), 1)
dim arrayLinha
'Agora que o arquivo já foi aberto, iremos ler linha por linha
'O comando AtEndOfStream determina que iremos repetir o processo abaixo
'até o fim do arquivo
Do while not varArquivo.AtEndOfStream
'Abaixo, criaremos um array para separar os dados entre ponto-e-vírgula
'ReadLine é usado para indicar que iremos separar os dados desta linha
arrayLinha=split(varArquivo.ReadLine,";",-1,1)
'Com o array criado, iremos inserir de acordo com a ordem dos campos
'Usando 'arrayLinha(0)' nós determinamos cada dado pela ordem do arquivo de texto
'começando pelo zero que é respectivamente o campo nome e por ai adiante
conexao.execute "INSERT INTO CADASTRO (codempresa, matriculafuncionario, salariobase, salariobruto, competencia) VALUES ('"&arrayLinha(1)&"','"&arrayLinha(2)&"','"&arrayLinha(3)&"','"&arrayLinha(4)&"','"&arrayLinha(5)&"',)"
'Passar para próxima linha
loop
'Destruiremos e fecharemos o FSO e o acesso ao arquivo de texto
varArquivo.Close
Set varArquivo = Nothing
Set objFSO = Nothing
'Destruiremos e fecharemos a conexão com o banco de dados
Conexao.close
Set Conexao = nothing
'Abaixo, caso a ordem ou a quantidade de campos do arquivo de texto
'seja inferior a do banco de dados, retornaremos uma mensagem de erro
if err>0 then
response.write "<script>history.back(1);alert('Ocorreu algum problema na inserção.\nVerifique o layout do arquivo de texto.')</script>"
response.End()
end if
%>
Jardel
Discussão (22)
Carregando comentários...