Fatal error: Call to a member function MoveNext() on a non-object

(ValterSouza) #1

Estou usando o código abaixo com While numa consulta. Quando executo, retorna o erro

Fatal error: Call to a member function MoveNext() on a non-object in
e
Fatal error: Call to a member function Close() on a non-object in

Observei que, no forum, alguns colegas já passaram por isto, mas não vi solução. Alguém teria alguma dica de como resolver?

While (!$vagas_do_dia->EOF)
{
/* manha */

$varCLINICA = ({vagas_do_dia}[0][0]);
sc_set_global($varCLINICA);

$varPERIODO = {vagas_do_dia}[0][2];
sc_set_global($varPERIODO);

if (trim($varPERIODO) == ‘MANHA’)
{
sc_exec_sql("
UPDATE
dbo.Clinicas
SET
Status_manha = ‘DISPONIVEL’
WHERE
Clínica = ‘$varCLINICA’
");
}

$vagas_do_dia->MoveNext();
}
$vagas_do_dia->Close();

(system) #2

Olá Valter, boa tarde!

Confira se está utilizando a macro sc_select, pois se estiver utilizando a sc_lookup tem que tratar de outra forma… não sei se tem alguma relação com o problema, mas se não me engano, quando usa a macro sc_select, a atribuição dos campos tem que ser [tt]$vagas_do_dia->fields[0][/tt] ao invés de [tt]{vagas_do_dia}[0][0][/tt]… me corrijam se estiver enganado…

Experimente refazer o código usando o wizard da macro pra ver se funciona, só pra testar…

sc_select(vagas_do_dia, "SELECT ... from ...");
	while (!$xxx->EOF) {
			{nome_campo} = $vagas_do_dia->fields[0];

        	$vagas_do_dia->MoveNext();
	}
	$vagas_do_dia->Close();

Vou aproveitar e perguntar uma coisa que achei interessante… A macro sc_set_global cria automaticamente um array com os valores de todos os registros? sempre montei manualmente o array antes de usar a macro, achei que usando só a macro iria sobrescrever o valor do registro anterior e guardar apenas o último na sessão…

Att.
Robson

(ValterSouza) #3

Robson, você tem razão. A MoveNext() e o Close() são funções do objeto SC_SELECT e eu havia utilizado com o SC_LOOKUP.

Valeu!

(ValterSouza) #4

Robson, definir a variável como global é apenas para dar a ela a sua área de atuação. Na realidade, ela estará guardando apenas o último valor de registro lido.

Agora, voltando ao problema que deu início à minha postagem, está acontecendo o seguinte:
no meu ambiente de desenvolvimento não está mais dando o erro Call to a member function MoveNext() on a non-object[i], entretanto, após publicar o sistema no servidor, o erro voltou.
Você ou alguém do fórum teria alguma dica?

(system) #5

Olá Valter, boa noite!

Estranho acontecer isso… será que não é o cache do navegador, do servidor, ou algo parecido? Digo isso pq as vezes eu acabo de alterar e publicar uma aplicação, e ao acessá-la o navegador continua mostrando a aplicação antiga (não atualizada)… Acho difícil ser esse o problema, mas fora isso eu não tenho idéia do que possa estar acontecendo…

Att.
Robson