Boa tarde, descobri através de um vídeo no youtube que existe uma maneira de fazer importação de dados pelo usuário (sem precisar usar um gerenciador de banco de dados), alguém possui essa rotina, pois estou desenvolvendo um sistema onde o cadastro de alunos deverá ser importado de um banco oracle e preciso que o próprio usuário, com as devidas permissões, fizesse esta importação.
Boa tarde,
Acho que este link lhe ajudará:
Depois posta como fez.
Receita pronta não tem, depende muito do seu sistema e da logica do funcionamento
para pegar de outro banco de dados diferente da aplicação tem que tomar cuidado, que tem que conectar em um e colocar em outro,
acredito que o melhor para evitar problemas seria: conectar ao oracle, gerar um .csv com os dados e após gerado, abre o csv gerado com o fopen e faz a leitura de cada linha com o fgets, e a cada linha lida pode verificar a existência do cpf (ou como é alunos cpf+matricula) verifica na tabela da aplicação, se existir pode fazer um updade ou se não um insert, mas como falei depende da logica do funcionamento
Jair, a intenção é essa mesmo, importar ou através de csv, excel, txt, mas estou precisando de uma idéia de como fazer isso no ambiente de produção, ou seja, se um professor quiser corrigir uma determinada prova, ele importa para o sistema a relação dos alunos via essa aplicação
excel usa o exemplo do link ai em cima, nunca fiz
eu sempre uso .csv que as importações, sempre vem de outros sistemas e nem todos geram excel, csv puro vem apenas o que precisa
mas com csv pode criar um controle, nele colocar para fazer o upload, e outros campos que precisar, ao enviar o arquivo no onvalidade faz os recebimentos do arquivo e pega as informações e trabalha com elas
exemplo:
se seu .csv vir:
matricula;materia;aluno;unidade
$LocalArq = $this->Ini->path_doc.’/’.{Arquivo};
$teste1 = fopen ($LocalArq,“r”);
while ($data1 = fgets($teste1, 2000))
{
$data1 = str_replace(’"’,"",$data1);
$conteudo = explode (";", $data1);
echo “
”.$conteudo[0]; //matricula
echo " / ".$conteudo[1]; //materia
echo " / ".$conteudo[2]; //aluno
echo " / ".$conteudo[3]; //unidade
}
Veja o que encontrei, mas importa txt https://support.scriptcase.net/pt-br/article/993-importacao-texto
interessante, mas ainda prefiro usar a forma que passei, controlando pelo conteúdo, cada um usa de uma forma, faça uns testes e ache a melhor que atende as necessidades do seu sistema.
Adriano, consegui este vídeo e consegui o script pronto aqui mesmo no forum. o vídeo é esse: https://www.youtube.com/watch?v=SwSi3-v84UU, e o código segue abaixo
no OnScriptInit :
require_once('../../../..'.$this->Ini->path_prod.'/third/phpexcel/PHPExcel.php');
no OnValidate:
$objReader = new PHPExcel_Reader_Excel5();
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load("../../../tmp/".$this->documento_ul_name);
$worksheetData = $objReader->listWorksheetInfo("../../../tmp/".$this->documento_ul_name);
$totalRows = $worksheetData[0]['totalRows'];
$totalColumns = $worksheetData[0]['totalColumns'];
$lastColumn = $objPHPExcel->getActiveSheet()->getHighestColumn();
$sheet = $objPHPExcel->getSheet(0);
$columnNames = "";
$rowDate = "";
for($colum=0;$colum<$totalColumns;$colum++)
{
if($colum==$totalColumns-1)
{
$columnNames.= utf8_decode($objPHPExcel->getActiveSheet()->getCellByColumnAndRow($colum, 1)->getValue());
}
else
{
$columnNames.= utf8_decode($objPHPExcel->getActiveSheet()->getCellByColumnAndRow($colum, 1)->getValue()).",";
}
}
for($row =2; $row <= $totalRows; $row++)
{
for($colum=0;$colum < $totalColumns;$colum++)
{
if($colum == $totalColumns-1)
{
$rowDate .= "'".utf8_decode($objPHPExcel->getActiveSheet()->getCellByColumnAndRow($colum, $row)->getValue())."'";
}
else
{
$rowDate .= "'".utf8_decode($objPHPExcel->getActiveSheet()->getCellByColumnAndRow($colum, $row)->getValue())."',";
}
}
// echo "insert into planilha1 (".$columnNames.") values (".$rowDate.")";
// print_r($rowDate);
}
Jair, vou testar todas, inclusive com o seu código, a que melhor se adaptar a minha aplicação vou utilizar, Muito Obrigado.
Bom dia,
Este mesmo, mas no meu SC9 estava com problemas, no seu caso funcionou?
E se funcionou que adaptações fez?
Adriano, estou testando tanto importação excel, txt e csv, a que se comportar melhor vou adotar, já li aqui no forum que a importação de xls não é uma boa, por isso vou investir em txt e csv
Adriano, de todas que testei a de melhor performace foi a importação de CSV. segue um script para ser inserido no onValidate da Blank. não se preocupe com as variáveis de conexão, funcionam assim mesmo no SC. Basta você adaptar as configurações do seu banco e campos da tabela desejada.
$conn = mysqli_connect(‘localhost’,‘root’,’’);
$banco = mysqli_select_db($conn,‘sishabweb’);
mysqli_set_charset($conn,‘utf8’);
if (isset($_POST[“import”])) {
$fileName = $_FILES["file"]["tmp_name"];
if ($_FILES["file"]["size"] > 0) {
$file = fopen($fileName, "r");
while (($column = fgetcsv($file, 10000, ",")) !== FALSE) {
$sqlInsert = "INSERT into alunos (matricula,grad,nip,nome,turma)
values ('" . $column[0] . "','" . $column[1] . "','" . $column[2] . "','" . $column[3] . "','" . $column[4] . "')";
$result = mysqli_query($conn, $sqlInsert);
if (! empty($result)) {
$type = "successo";
$message = "Alunos inseridos com sucesso.";
} else {
$type = "erro";
$message = "Problema na importacao dos alunos";
}
}
}
}
?>
body { font-family: Arial; width: 550px; } .outer-scontainer { background: #F0F0F0; border: #e0dfdf 1px solid; padding: 20px; border-radius: 2px; } .input-row { margin-top: 0px; margin-bottom: 20px; } .btn-submit { background: #333; border: #1d1d1d 1px solid; color: #f0f0f0; font-size: 0.9em; width: 100px; border-radius: 2px; cursor: pointer; } .outer-scontainer table { border-collapse: collapse; width: 100%; } .outer-scontainer th { border: 1px solid #dddddd; padding: 8px; text-align: left; } .outer-scontainer td { border: 1px solid #dddddd; padding: 8px; text-align: left; } #response { padding: 10px; margin-bottom: 10px; border-radius: 2px; display:none; } .success { background: #c7efd9; border: #bbe2cd 1px solid; } .error { background: #fbcfcf; border: #f3c6c7 1px solid; } div#response.display-block { display: block; }Importação de Alunos:
<div id="response" class="<?php if(!empty($type)) { echo $type . " display-block"; } ?>"><?php if(!empty($message)) { echo $message; } ?></div>
<div class="outer-scontainer">
<div class="row">
<form class="form-horizontal" action="" method="post"
name="frmCSVImport" id="frmCSVImport" enctype="multipart/form-data">
<div class="input-row">
<label class="col-md-4 control-label">Selecione o
arquivo</label> <input type="file" name="file"
id="file" accept=".csv">
<button type="submit" id="submit" name="import"
class="btn-submit">Importar</button>
<br />
</div>
</form>
</div>
<?php
$sqlSelect = "SELECT * FROM alunos";
$result = mysqli_query($conn, $sqlSelect);
if (mysqli_num_rows($result) > 0) {
?>
<table id='alunos'>
<thead>
<tr>
<th>Matrícula</th>
<th>Graduação</th>
<th>NIP</th>
<th>Nome</th>
<th>Turma</th>
</tr>
</thead>
<?php
while ($row = mysqli_fetch_array($result)) {
?>
<tbody>
<tr>
<td><?php echo $row['matricula']; ?></td>
<td><?php echo $row['grad']; ?></td>
<td><?php echo $row['nip']; ?></td>
<td><?php echo $row['nome']; ?></td>
<td><?php echo $row['turma']; ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
<?php } ?>
</div>
<?php
Bom dia, que bom que deu certo.
Vc usou o sc9?
Tanto no 9.3.012 quanto no 9.4, correção coloque no onExecute da blank
show.
legal também seria fazer os registos carregarem em uma tabela com os resultados das regras de validação antrs de dar o insert no banco.
sera que alguém poderia nos ajudar a fazer?
Qual regra você se refere ?, dá sim basta fazer a validação antes do insert
No meu caso por exemplo, inseri uma rotina para verificar qual a turma do aluno e assim gerar um número de matricula de acordo com a turma