Ir para conteúdo

Arquivado

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

Pabullo

Atualizando uma Tabela no BDD

Recommended Posts


Olá amigos do fórum sou tão novo aqui, como também sou em programação web.

Por isso desde já indicações de livros, video-aulas e cursos são bem vindas.

Mais enfim, vamos lá...

Tenho uma tarefa para realizar em um projeto que me aventurei a fazer,

onde pretendo criar uma tabela no banco de dados para comportar nomes e números de telefones,

até ai creio que eu consiga, criando um formulário Html/Php simples, porém ainda sou leigo em BDD e queria saber

se podem me dar uma dica com o seguinte problema:

Minha idéia é que ao invés de criar uma formulário para receber os up de atualização dos contatos eu crie uma

ferramenta capaz de substituir a tabela existente no BDD, por exemplo em Xls, fazendo com que os dados criados em

em Excel substituam a tabela com os dados no BDD.

Gostaria de saber se eu consigo fazer isso de forma simples apenas com meus singelos conhecimentos, e se podem me

me dar dicas da melhor forma pra realizar essa tarefa.

Lembrando que minhaa intenção é fazer essa tarefa utilizando Html/Php e SqlServer 2008.

Desde já conto com vocês,

Obrigado.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pabullo, existem algumas formas de acessar dados em planilhas eletrônicas; uma delas é a função OPENROWSET. Você encontra outras dicas no documento How to import data from Excel to SQL Server.

 

____

linkedin.gif José Diz Belo Horizonte, MG - Brasil

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela dica amigo, já estou dando uma olhada, no entanto gostaria de saber se esse método funciona para que outros usuários consigam realizar essa tarefa sem ter acesso ao Sql Server, tipo eu usaria essa função em uma ferramenta que conteria apenas uma caixa para subir o arquivo xml e o botão de enviar...para que outras pessoas além de mim subissem o arquivo subscrevendo o já existente na tabela.

Seria isso que esses comandam descrevem?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quer subir a planilha e sobrepor os dados existentes?

 

Apagar tudo que existe (importado pelo usuário x) e inserir a nova planilha (importada pelo usuário y)?

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente amigo, suponhamos que hoje um usuário X tenha feito um update na tabela, através da ferramenta quero poder realizar um novo update substituindo os dados já existentes no Banco de Dados, seja pelo mesmo usuário ou por um usuário Y.

 

Poderia me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Pabullo.

 

Encontrei 2 ótimos exemplos que podem lhe auxiliar:

 

1 - Upload de arquivos com o método POST (PHP) - http://php.net/manual/pt_BR/features.file-upload.post-method.php

 

2 - Importando planilha do Excel para o SQL Server - http://t-sql.com.br/importando-planilha-do-excel-para-o-sql-server/

 

Um detalhe é a necessidade de mapear no seu server o diretório que receberá os uploads.

 

Caso precise de ajuda é só chamar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde amigos,

Lendo os exemplos indicados consegui criar o formulário no qual consigo fazer o Upload do arquivo xls.

No entanto não estou conseguindo realizar o Insert dele na tabela já existente no Bdd.

O que ocorre é o seguinte:

 

Tenho um formulário PHP com o campo Upload, onde o ACTION do FORM direciona a ação do enviar para um outro arquivo PHP que é onde pretendo realizar a tarefa de inserção.

 

Porém pelo que entendi o seguinte código deveria realizar a tarefa.

 

INSERT INTO CADASTRO //cadastro seria o nome da Tabela)
SELECT * FROM

OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 8.0;Database=c:\ARQ.xls','SELECT * FROM [$Plan1]')

 

E pronto, o insert seria realizado com sucesso.

 

Creio que a a relação dos comandos para realizar essa inserção esteja errada ou algum comando adicional deve ser inserido, porém já li vários tópicos tentei diversas formar e não consegui entender a maneira correta de realizar tal procedimento.

Se puderem me ajudar ficarei grato.

 

Mais uma vez, Obrigado."

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Amigo segue o erro retornado após a tentativa do Inser.

Mas já adiantando andei lendo e pensando nesses últimos dias e acabei meio que identificando um erro que tenho cometido e talvez por esse motivo não tenha conseguido atingir meu objetivo.

 

O que ocorre é o seguinte:

Meu objetivo é criar uma ferramenta capaz de fazer upload de um arquivo excel inserindo os dados dele em uma tabela existente no bdd.

 

No entanto olhando calmamente para o código que venho tentando desenvolver percebo que no momento em que realizo o seguinte código

 

INSERT INTO CADASTRO //cadastro seria o nome da Tabela)
SELECT * FROM
OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 8.0;Database=c:\ARQ.xls','SELECT * FROM [$Plan1]')

 

eu já estou mostrando a localização do arquivo que deve ser inserido fazendo com que a opção do upload seja desnecessária.

 

Não sei se minha analise está correta, mas se estiver, de qual forma devo proceder?

Alguma dica?

 

Desde já obrigado pela ajuda. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia dia Papullo.

 

Seguinte, páginas web funcionam basicamente divididas em 2 aspectos: Client-Side (lado cliente) e Server-Side (lado servidor).

 

Da forma que vc está pensando em trabalhar, o primeiro passo acontecerá no cliente, importando o arquivo para o seu servidor.

 

O segundo passo é pegar o arquivo e inserir suas linhas (após tratamento) no banco de dados.

 

O caminho que aparece em seu código (c:\ARQ.xls) é a "pasta" no teu servidor para onde os uploads dos usuários irão, e não o local que o arquivo está na máquina do usuário.

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uploads de arquivos para o SQL pode-se fazer pelo integration services, ou fazer o upload em alguma area no server e executar uma job com os comandos ja citados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Tarde amigos, por problemas de saúde não andei mexendo no código mas irei realizar novas tentativas de acordo com as dicas que me deram e assim que tiver alguma posição posto para vocês,

Obrigado pela ajuda ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

if($_FILES['arquivo']['name'])
	{             
		$finfo = finfo_open();
		$finfo = new finfo(FILEINFO_MIME);
		$type = $finfo->file($_FILES['arquivo']['tmp_name']);	
		$name = utf8_decode($_FILES["arquivo"]["name"]);
		$ext = strtolower(substr(strrchr(basename($_FILES["arquivo"]["name"]),"."),1));		

	
		//VERIFICA SE EXISTE DIRETORIO
		if(!is_dir($path."/".date("mY")))
		{
			mkdir($path."/".date("mY"));
		}
		$fullPath = $path."/".date("mY")."/";
		
	
		//VERIFICA TIPO DO ARQUIVO
		if($type != "text/plain; charset=us-ascii")
		{ 			
			$fileErro = "O arquivo não é um documento do tipo (*.txt) <br><br> <i>($name) <br> $type </i>";
		}
		//VERIFICA TAMANHO DO ARQUIVO
		elseif($_FILES['arquivo']['size'] > 2082100) //2082100 - 2MB
		{	
			$fileErro = "O arquivo é maior do que 2MB de dados, reduza o tamanho e tente novamente! <br>
                        <br> <i>($name)</i>";
		}
		else
		{
			//TRANSFERE O ARQUIVO
			$target = ($fullPath.$name);
			if(!move_uploaded_file($_FILES['arquivo']['tmp_name'],$target))
			{			  
				$fileErro = "Falha no upload do arquivo! <br><br> <i>($name)</i>";
			}	
		}

	}
	
	if(empty($fileErro))
	{
		
		//LER ARQUIVO
		$arquivo = fopen($fullPath.$name,"r");
		if ($arquivo == false){ echo("O arquivo não existe no caminho: ".$fullPath.$name); exit(); }
	
		$datahora = date("Y-m-d H:i:s");
		$countLinhas = 0;
		$countIns = 0;
		
		
		 //QTD DE CARACTERES PERMITIDO POR LINHA (nroTerminal) = 15 Carac.
		 while(true) 
		 {
			 $linha = fgets($arquivo);
			 if ($linha==null){ break;}
			 if(strlen(trim($linha))>15)
			 {	
				$fileErro = "Erro na quantidade de caracteres esperados por linha!";
				break;
			 }
			 
		 }
	
		 if(empty($fileErro))
		 {
			 $arquivo = fopen($fullPath.$name,"r");
			 
			 //QTD DE LINHAS NO ARQUIVO
			  while(true) 
			 {
				 //Ler o arquivo até encontrar uma linha em branco
				 $linha = fgets($arquivo);
			 
				 //SER FOR FINAL DO ARQUIVO, INATIVA OS REGISTROS ANTERIORES E SAI DO ARQUIVO
				 if($linha==null)
				 { 
				     $vtCad["status"] = "Inativo";
				     $conecta->runUpdate("status = 'Ativo' AND data_cadastro < '".$datahora."'", 
                                     $vtCad, "Nomes_Contatos.dbo.num_sms");
					break;
				}   
				$countLinhas++; 
				
				
				//INSERIR NA TABELA DO EMBU
				$vtCad["nroTerminal"] = addslashes(trim($linha));
				$vtCad["status"] = "Ativo";
				$vtCad["data_cadastro"] = $datahora;
				$vtCad["userId"] = $_COOKIE["userId"];
								
				$cadId = $conecta->runInsert($vtCad, "Nomes_Contatos.dbo.num_sms");                                                                                            
				
				 unset($vtCad);
	
				 if($cadId>0)
				 {
					$countIns++;
				 }
			}
			fclose($arquivo);
	
		}
	} 

Bom Dia caros amigos, venho me desculpar pela demora no retorno sobre a tarefa que eu estava realizando.

Com muito trabalho consegui realizar a tarefa porém como estava tendo muita dificuldade para salvar no formato do excel, resolvi mudar pro formato txt e acabou que deu certo.

 

Olhem só como ficou e avaliem por favor.

 

Desde já obrigado a todos.

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.