Erro PDOStatement::fetchAll() {URGENTE}

Boa Tarde Pessoal!
Estou desenvolvendo uma aplicação de boleto, e no evento OnRecord onde crio o Cód. Barras e a Linha digitável .
Faço uma busca no banco para pegar as instruções coerentes desta forma:

[code]$check_sql = “select ds_instrucao”
. " from tb_banco_instrucao"
. " where id_banco_instrucao = 5";
sc_lookup(rs, $check_sql);

if (isset({rs[0][0]})) // Row found
{
$teste = {rs[0][0]};
echo “Achou registro: '” . $teste . “’”;

}
[/code]

Porém o seguinte erro explode na tela :

"2014: Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute."

O que posso fazer? Pelo que entendi, ele está com outra consulta aberta certo? Porém a única consulta feita em sql alem desta é a consulta principal da tela
[/i]

Essa sua instrução sql não está trazendo mais de um registro? Tente com a macro sc_select.

Opa Thyago, apenas retorna 1 único registro, ja tentei com sc_select e gera o mesmo erro.

Posta aqui como você fez com o sc_select.

Tenta seguir este exemplo: http://www.scriptcase.net/docs/es_es/v81/scriptcase-macros/scriptcase-macros#sc_select

Thyago, Seguindo seu exemplo testei assim:

$check_sql = "select ds_instrucao"
   . " from tb_banco_instrucao"
   . " where id_banco_instrucao = 5";

sc_select(my_data, $check_sql);
if ({my_data} === false)
{
	echo "Access error. Message =". {my_data_erro};
}
else
{
	while (!$my_data->EOF)
	{
		//{clientName} = $my_data->fields[1];
		echo "Achou registro:  '" . $my_data . "'";
		$my_data->MoveNext();
	}
	$my_data->Close();
}

O erro que estoura com o debug ligado é esse:

(pdo-mysql): select ds_instrucao from tb_banco_instrucao where id_banco_instrucao = 5   2014: Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.

         ADOConnection._Execute(select ds_instrucao from tb_banco_instrucao where id_banco_instrucao = 5, false) % line 1085, file: adodb.inc.php
      ADOConnection.Execute(select ds_instrucao from tb_banco_instrucao where id_banco_instrucao = 5) % line 1491, file: grid_public_tb_titulo_receber_BOLETO_grid.class.php
   grid_public_tb_titulo_receber_BOLETO_grid.grid() % line  120, file: grid_public_tb_titulo_receber_BOLETO_grid.class.php
grid_public_tb_titulo_receber_BOLETO_grid.monta_grid(0) % line 1850, file: index.php
grid_public_tb_titulo_receber_BOLETO_apl.controle() % line 2925, file: index.php

Access error. Message =Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute. 
1 Curtida

Executando o select pelo sql builder, dá erro também?

select ds_instrucao from tb_banco_instrucao where id_banco_instrucao = 5

Tente executa-lo

Funciona Amigo :frowning:
Retorna uq eu preciso…

Então tem alguma coisa errada no seu código.

Comente do if para baixo e vai descomentando aos poucos pra descobrir onde está o erro.

Thyago, fiz os testes e ja no sql estoura o erro, testei no evento OnScriptIni e funcionou…
AO meu ver é algo no evento onRecord…

Aconteceu comigo, vou postar a resposta pra futuros pesquisas dos demais membros:

No meu caso ocorria o erro devido ao “;” no final da consulta SQL da Grid, coloquei por distração.

Achei a resposta aqui: http://www.scriptcase.net/forum/forum/scriptcase-8/discussion-aa/9551-grid-advanced-search-error-while-accessing-the-database

Tirei o “;” e funcionou normalmente.

3 Curtidas

Obrigado @pablomezzomo por deixar essa dica, aqui funcionou legal. O curioso é que a mesma consulta no SC 9.01.0001 estava funcionando e com o “;” no final do código, mas no SC 9.04.0000 dá o erro mencionado pelo @JB1.

Post antigo, mas salvou. Nem o ChatGPT de hoje em dia identificou esse erro.
Removi o ; e o problema deixou de existir.

Atenção
Erro ao acessar o banco de dados
Cannot execute queries while there are pending result sets. Consider unsetting the previous PDOStatement or calling PDOStatement::closeCursor()
select unidade from unidades where id = 3 order by unidade

Todas as ferramentas são importantes, inclusive posts como esses.
Muito obrigado

1 Curtida