Conheça as melhorias da versão 8.0, 8.1, 8.2!
Clique aqui para saber mais
Exportação para csv Caros, Estou tentando fazer uma exportação para csv com mais de 60.000 registros, porém não exporta, o máximo que consegui exportar foi com 10.000 registros, usando metodo setProperty('limit',1000); se deixar livre não vai, fica Loading e não termina. Estou certo de que o problema é a quantidade de registros. Alguma idéia ? Abração a todos. ...
UP
Exportação para csv  
Fechado
Caros,

Estou tentando fazer uma exportação para csv com mais de 60.000 registros, porém não exporta, o máximo que consegui exportar foi com 10.000 registros, usando metodo setProperty('limit',1000); se deixar livre não vai, fica Loading e não termina. Estou certo de que o problema é a quantidade de registros. Alguma idéia ?

Abração a todos.

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (4)


ES

poste seu código pra tentarmos ajudar
UP

Segue código abaixo:

function onExportCSV()
{
//$this->onSearch();
$form_data = $this->form->getData();

try
{
// open a transaction with database 'samples'
TTransaction::open('svoi');

// creates a repository for Customer
$repository = new TRepository('Data');

// creates a criteria
$criteria = new TCriteria;
if($form_data->uf != '' && $form_data->num_ddd == '' && $form_data->estacao == '' && $form_data->velocidade_contratada == '' )
{
//print "1-> SELECT * FROM `data` WHERE `uf` LIKE " . $form_data->uf . "<br />";
$criteria->add( new TFilter('uf','like',$form_data->uf));
}

if($form_data->uf != '' && $form_data->num_ddd != '' && $form_data->estacao == '' && $form_data->velocidade_contratada == '' )
{
//print "2-> SELECT * FROM `data` WHERE `num_ddd` LIKE " . $form_data->num_ddd . "<br />";
$criteria->add( new TFilter('num_ddd','like',$form_data->num_ddd));
}

if($form_data->uf != '' && $form_data->num_ddd != '' && $form_data->estacao != '' && $form_data->velocidade_contratada == '' )
{
//print "3-> SELECT * FROM `data` WHERE `estacao` LIKE " . $form_data->estacao . "<br />";
$criteria->add( new TFilter('num_ddd','like',$form_data->num_ddd));
}

if($form_data->uf != '' && $form_data->num_ddd != '' && $form_data->estacao != '' && $form_data->velocidade_contratada != '' )
{
//print "4-> SELECT * FROM `data` WHERE `estacao` LIKE " . $form_data->estacao . " AND `velocidade_contratada` LIKE " . $form_data->velocidade_contratada . "<br />";
$criteria->add( new TFilter('estacao','like',$form_data->estacao));
$criteria->add( new TFilter('velocidade_contratada','like',$form_data->velocidade_contratada));
}

if($form_data->uf != '' && $form_data->num_ddd == '' && $form_data->estacao != '' && $form_data->velocidade_contratada == '' )
{
//print "5-> SELECT * FROM `data` WHERE `estacao` LIKE " . $form_data->estacao . "<br />";
$criteria->add( new TFilter('estacao','like',$form_data->estacao));
}

if($form_data->uf != '' && $form_data->num_ddd == '' && $form_data->estacao != '' && $form_data->velocidade_contratada != '' )
{
//print "6-> SELECT * FROM `data` WHERE `estacao` LIKE " . $form_data->estacao . " AND `velocidade_contratada` LIKE " . $form_data->velocidade_contratada . "<br />";
$criteria->add( new TFilter('estacao','like',$form_data->estacao));
$criteria->add( new TFilter('velocidade_contratada','like',$form_data->velocidade_contratada));
}

if($form_data->uf != '' && $form_data->num_ddd == '' && $form_data->estacao == '' && $form_data->velocidade_contratada != '' )
{
//print "7 -> SELECT * FROM `data` WHERE `uf` LIKE " . $form_data->uf . " AND `velocidade_contratada` LIKE " . $form_data->velocidade_contratada . "<br />";
$criteria->add( new TFilter('uf','like',$form_data->uf));
$criteria->add( new TFilter('velocidade_contratada','like',$form_data->velocidade_contratada));
}

if($form_data->uf != '' && $form_data->num_ddd != '' && $form_data->estacao == '' && $form_data->velocidade_contratada != '' )
{
//print "8-> SELECT * FROM `data` WHERE `num_ddd` LIKE " . $form_data->num_ddd . " AND `velocidade_contratada` LIKE " . $form_data->velocidade_contratada . "<br />";
$criteria->add( new TFilter('num_ddd','like',$form_data->num_ddd));
$criteria->add( new TFilter('velocidade_contratada','like',$form_data->velocidade_contratada));
}

$csv = '';
// load the objects according to criteria
$criteria->setProperties();
$criteria->setProperty('limit',15000);
$customers = $repository->load($criteria);
if ($customers)
{
foreach ($customers as $customer)
{
$csv .= $customer->id.';'.
$customer->uf.';'.
$customer->estacao.';'.
$customer->sessao.';'.
$customer->num_ddd.';'.
$customer->num_terminal.';'.
$customer->velocidade_contratada.';'.
$customer->city_name."\n";
}
file_put_contents('app/output/customers.csv', $csv);
TPage::openFile('app/output/customers.csv');
}
// close the transaction
TTransaction::close();
}
catch (Exception $e) // in case of exception
{
// shows the exception error message
new TMessage('error', 'Error ' . $e->getMessage());
// undo all pending operations
TTransaction::rollback();
}

}
PD

Udson,

Veja minha resposta neste seu outro post:
www.adianti.com.br/forum/pt/view_1164?problema-na-exportacao-de-csv

Att,
Pablo
UP

Amigos, consegui resolver o problema da importação, vou deixar registrado aqui, obrigado Pablo e a todos pela atenção.

a) Um problema que tinha era o tempo de execução do algorítimo, por padrão no php é setado para 30 segundos, então setei no topo do algorítimo o tempo assim:

set_time_limit(900);

b) Me parece que file_put_contents carrega tudo na memória pra depois gravar, então usei outra estratégia: fopen+fwrite como o Pablo havia me orientado, então fiz o método abaixo:

function onWrite($file,$line){
$fp = fopen($file, "a");
$write = fwrite($fp, $line);
fclose($fp);
}

E tudo funcionou uma maravilha, eu consegui gerar um arquivo com 5159171 registros de 136 megas. segue abaixo o algorítimo completo, inclusive eu criei até um cabeçalho no csv.

function onExportCSV()
{
//$this->onSearch();
$form_data = $this->form->getData();

try
{
TTransaction::open('svoi');
$repository = new TRepository('Data');

$criteria = new TCriteria;
if($form_data->uf != '' && $form_data->num_ddd == '' && $form_data->estacao == '' && $form_data->velocidade_contratada == '' )
{
//print "1-> SELECT * FROM `data` WHERE `uf` LIKE " . $form_data->uf . "<br />";
$criteria->add( new TFilter('uf','like',$form_data->uf));
}

if($form_data->uf != '' && $form_data->num_ddd != '' && $form_data->estacao == '' && $form_data->velocidade_contratada == '' )
{
//print "2-> SELECT * FROM `data` WHERE `num_ddd` LIKE " . $form_data->num_ddd . "<br />";
$criteria->add( new TFilter('num_ddd','like',$form_data->num_ddd));
}

if($form_data->uf != '' && $form_data->num_ddd != '' && $form_data->estacao != '' && $form_data->velocidade_contratada == '' )
{
//print "3-> SELECT * FROM `data` WHERE `estacao` LIKE " . $form_data->estacao . "<br />";
$criteria->add( new TFilter('num_ddd','like',$form_data->num_ddd));
}

if($form_data->uf != '' && $form_data->num_ddd != '' && $form_data->estacao != '' && $form_data->velocidade_contratada != '' )
{
//print "4-> SELECT * FROM `data` WHERE `estacao` LIKE " . $form_data->estacao . " AND `velocidade_contratada` LIKE " . $form_data->velocidade_contratada . "<br />";
$criteria->add( new TFilter('estacao','like',$form_data->estacao));
$criteria->add( new TFilter('velocidade_contratada','like',$form_data->velocidade_contratada));
}

if($form_data->uf != '' && $form_data->num_ddd == '' && $form_data->estacao != '' && $form_data->velocidade_contratada == '' )
{
//print "5-> SELECT * FROM `data` WHERE `estacao` LIKE " . $form_data->estacao . "<br />";
$criteria->add( new TFilter('estacao','like',$form_data->estacao));
}

if($form_data->uf != '' && $form_data->num_ddd == '' && $form_data->estacao != '' && $form_data->velocidade_contratada != '' )
{
//print "6-> SELECT * FROM `data` WHERE `estacao` LIKE " . $form_data->estacao . " AND `velocidade_contratada` LIKE " . $form_data->velocidade_contratada . "<br />";
$criteria->add( new TFilter('estacao','like',$form_data->estacao));
$criteria->add( new TFilter('velocidade_contratada','like',$form_data->velocidade_contratada));
}

if($form_data->uf != '' && $form_data->num_ddd == '' && $form_data->estacao == '' && $form_data->velocidade_contratada != '' )
{
//print "7 -> SELECT * FROM `data` WHERE `uf` LIKE " . $form_data->uf . " AND `velocidade_contratada` LIKE " . $form_data->velocidade_contratada . "<br />";
$criteria->add( new TFilter('uf','like',$form_data->uf));
$criteria->add( new TFilter('velocidade_contratada','like',$form_data->velocidade_contratada));
}

if($form_data->uf != '' && $form_data->num_ddd != '' && $form_data->estacao == '' && $form_data->velocidade_contratada != '' )
{
//print "8-> SELECT * FROM `data` WHERE `num_ddd` LIKE " . $form_data->num_ddd . " AND `velocidade_contratada` LIKE " . $form_data->velocidade_contratada . "<br />";
$criteria->add( new TFilter('num_ddd','like',$form_data->num_ddd));
$criteria->add( new TFilter('velocidade_contratada','like',$form_data->velocidade_contratada));
}

$line = '';
//$criteria->setProperty('limit',15000);
$data = $repository->load($criteria);

$file ="app/output/data.csv";
$line_number=0;
unlink($file);
if($data){

$header="id".';'.
"estado".';'.
"estacao".';'.
"sessao".';'.
"ddd".';'.
"numero".';'.
"veloc_contratada"."n";

$this->onWrite($file,$header);

foreach ($data as $row) {
$line = $row->id .';'.
$row->uf .';'.
$row->estacao .';'.
$row->sessao .';'.
$row->num_ddd .';'.
$row->num_terminal .';'.
$row->velocidade_contratada . "n";

$this->onWrite($file,$line);

$line_number++;
}
}
TPage::openFile($file);
TTransaction::close();
new TMessage('info', $line_number . ' registros foram importados com sucesso.',NULL,'Resultado');
}
catch (Exception $e) // in case of exception
{
new TMessage('error', 'Error ' . $e->getMessage());
TTransaction::rollback();
}

}

function onWrite($file,$line){
$fp = fopen($file, "a");
$write = fwrite($fp, $line);
fclose($fp);
}