Lançado Adianti Framework 7.6!
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 completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto 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);
}