[RESOLVIDO] - Qual o segredo de realizar uma consulta tão simples?

Olá pessoal,

Tenho o código abaixo. O objetivo é realizar testes com os dados do e-mail cadastrado. O pior que esse problema não está ocorrendo apenas neste exemplo, mas em todos os formulários e controles que estou criando e fazendo uso desse tipo de estrutura. Já verifiquei a conexão em todos eles, está ok, mas simplesmente não me retorna nada. Ao final do script, peço para me trazer a sentença SQL para testar no banco e roda perfeitamente. Então o que está pegando??? Como resolver esse problema??? Isso será um bug do SC 8??? Até mesmo para fazer uma tela de login não consigo mais trazer as informações, embora a sentença esteja correta e funcione tranquilamente no banco. Segue o script:

$sql = "SELECT "; $sql .= "Usuario_Email, "; $sql .= "Email_SMTP, "; $sql .= "Email_Usuario, "; $sql .= "Usuario_Senha, "; $sql .= "Email_Porta, "; $sql .= "Email_Conexao, "; $sql .= "Email_Contato, "; $sql .= "Email_Assunto, "; $sql .= "Email_Mensagem "; $sql .= "FROM tb_email "; $sql .= "WHERE Email_ID = ".[mailID];

sc_select(Ds, $sql);

if(!empty({Ds}))
{
{Email} = {Ds[0][0]};
{SMTP} = {Ds[0][1]};
{Usuario} = {Ds[0][2]};
{Senha} = {Ds[0][3]};
{Porta} = {Ds[0][4]};
{Conexao} = {Ds[0][5]};
{Contato} = {Ds[0][6]};
{Assunto} = {Ds[0][7]};
{Mensagem} = {Ds[0][8]};
};

echo $sql;

Grato,

Ilano

No exemplo acima, se eu usar

if ({Ds} === true)
{

};

Agora está aparecendo o erro:

Undefined variable: ds

O segredo está na macro:

sc_select(dataset, “Comando SQL”, “Conexão”)
Esta macro permite que o usuário execute comandos SQL e tenha acesso ao “dataset” proveniente do comando.
Diferente da macro sc_lookup, esta macro não manipula o dataset, deixando-o em sua forma original, cabendo ao usuário toda a manipulação.

Caso ocorra erro na execução do comando sql, a variável atribuida ao dataset retornará como “false” e a mensagem de erro estará disponível na variável “dataset_erro”.

O parâmetro “conexção” é opcional, sendo necessário se o comando for executado em uma base de dados diferente da especificada para a aplicação.

Utilize:

sc_lookup(Dataset, “Comando SQL”, “Conexão”)
Esta macro permite que o usuário execute comandos SQL e tenha acesso ao “dataset” proveniente do comando. O “dataset” fica disponível, em forma de array (linha/coluna).

O parâmetro “conexão” é opcional, sendo necessário, apenas, se o comando for executado em uma base de dados diferente da especificada para a aplicação.

Ex. 1:
sc_lookup(dataset, “select clienteid, nomecliente, limitecred from clientes” );

Tenta assim:

[code]$sql = "SELECT ";
$sql .= "Usuario_Email, ";
$sql .= "Email_SMTP, ";
$sql .= "Email_Usuario, ";
$sql .= "Usuario_Senha, ";
$sql .= "Email_Porta, ";
$sql .= "Email_Conexao, ";
$sql .= "Email_Contato, ";
$sql .= "Email_Assunto, ";
$sql .= "Email_Mensagem ";
$sql .= "FROM tb_email ";
$sql .= "WHERE Email_ID = ".[mailID];

sc_lookup(Ds, $sql);

if(!isset({Ds[0][0]}))
{
{Email} = {Ds[0][0]};
{SMTP} = {Ds[0][1]};
{Usuario} = {Ds[0][2]};
{Senha} = {Ds[0][3]};
{Porta} = {Ds[0][4]};
{Conexao} = {Ds[0][5]};
{Contato} = {Ds[0][6]};
{Assunto} = {Ds[0][7]};
{Mensagem} = {Ds[0][8]};
};

echo $sql;[/code]

George Carvalho, obrigado pelas explicações. Muito bom!
E Allan Medeiros, continuo no mesmo, aparece aquela mensagem que passei no segundo post:

[size=12pt]Undefined variable: ds[/size]

Não consigo entender o porque disso.

em vez de usar ds coloque um nome mais limpo tipo ds_resultados, é mais legível, e também tenha cuidado com as Caps no código PHP é case sensitive

Tire a ! Antes do isset
Abraços

Tirando o ! não dá erro algum, mas também não traz nada.

Guarda seu código em um arquivo texto, volta a config normal antes do debug e testa com este:

/* Macro sc_lookup */

$sql ="
SELECT
	Usuario_Email, 
	Email_SMTP,
	Email_Usuario,
	Usuario_Senha,
	Email_Porta,
	Email_Conexao,
	Email_Contato,
	Email_Assunto,
	Email_Mensagem
FROM
	tb_email
WHERE
	Email_ID = [mailID]
";

echo 'Testar SQL = '.$sql."<BR>"; // Remover após testar no SQL Builder do SC

break; // Remover apos testar no SQL Builder do SC


sc_lookup(mail_config, $sql);

/* Erro no lookup */
if (FALSE === {mail_config}) {
	sc_error_message("Ocorreu um erro no acesso ao banco de dados.<BR>");
}
elseif (empty({mail_config})) { /* EOF */

	sc_error_message("Nenhum valor foi retornado pelo banco.<BR>");
}
else {

	/* Inclua aqui sua rotina de processamento */
	
		$Usuario_Email_x   = {mail_config[0][0]};  // Remover após testar.
	    $Email_SMTP_x   = {mail_config[0][1]};   // Remover após testar.
	    $Email_Usuario_x   = {mail_config[0][2]};  // Remover após testar.
	    $Usuario_Senha_x   = {mail_config[0][3]};  // Remover após testar.
	    $Email_Porta_x   = {mail_config[0][4]};  // Remover após testar.
	    $Email_Conexao_x   = {mail_config[0][5]};  // Remover após testar.
	    $Email_Contato_x   = {mail_config[0][6]};  // Remover após testar.
	    $Email_Assunto_x   = {mail_config[0][7]};  // Remover após testar.
	    $Email_Mensagem_x   = {mail_config[0][8]};  // Remover após testar.

        echo 'e-mail = '.$Usuario_Email_x."<BR>"; // Remover após testar.
		
		break;  // Remover após testar.
		
		/* Se tiver Tudo certo usar assim:
		
		   {Email} = {mail_config[0][0]};
		   {SMTP} = {mail_config[0][1]};
		   {Usuario} = {mail_config[0][2]};
		   {Senha} = {mail_config[0][3]};
		   {Porta} = {mail_config[0][4]};
		   {Conexao} = {mail_config[0][5]};
		   {Contato} = {mail_config[0][6]};
		   {Assunto} = {mail_config[0][7]};
		   {Mensagem} = {mail_config[0][8]};
		   
		 */	   
	   
};		

Willian Fernando,

Fiz a alteração do nome Ds para ds_resultados como você sugeriu e retornou o seguinte erro:

[size=12pt]Fatal error: Cannot use object of type ADORecordSet_pdo as array in /home/mdierpco/public_html/scriptcase/app/contato/testaEmail/testaEmail_apl.php on line 2983[/size]

Verifiquei lá no arquivo e não tem essa linha 2983, só vai até a linha 2714.

Será que isso tem alguma coisa a ver com a não atualização do Scriptcase? Como não está dando pra pagar o upgrade, não atualizei.

Jailton,

Minha configuração está exatamente assim como você postou.

Por favor, posta o resultado daquela linha “echo $sql”.
[]s

ilanocf, testa com o código que eu postei anteriormente em ‘Código: [Selecionar]’.

Jailton,

Fiz uma cópia do meu script e colei o seu, mas também não resolveu. Apareceu a seguinte mensagem:

[size=12pt]Parse error: syntax error, unexpected ')' in /home/mdierpco/public_html/scriptcase/app/contato/testaEmail/testaEmail_apl.php on line 2118[/size]

Coloca a ponto e virgula aqui:

sc_lookup(mail_config, $sql)

sc_lookup(mail_config, $sql);

Jailton,

Ele executa o teste direitinho. Daí jogo lá no banco pra rodar a consulta e traz resultado corretamente.

Porém, ele não executa mais o resto do script e dá o erro. Segue o que aparece:

[size=12pt]Testar SQL = SELECT Usuario_Email, Email_SMTP, Email_Usuario, Usuario_Senha, Email_Porta, Email_Conexao, Email_Contato, Email_Assunto, Email_Mensagem FROM tb_email WHERE Email_ID = 1

Fatal error: Cannot break/continue 1 level in /home/mdierpco/public_html/scriptcase/app/contato/testaEmail/testaEmail_apl.php on line 2112[/size]

Sério gente, tô pra desistir do Scriptcase. E o pior é que isso está repercurtindo em outros projetos, até mesmo nos que funcionavam antes. A única coisa que penso é se é esse upgrade. Será que sou mesmo forçado a fazer? Se for é sacanagem! Ficar enganchado com algo tão simples assim é de lascar! Tem outra forma de fazer isso sem precisar dessas macros? Isso chateia pra caramba, fora que ainda atrasa o trabalho da gente. Me desculpe em já estar desabafando aqui com vocês pessoal, vocês têm me ajudado muito, mas uma coisa tão básica dessas dar esse tipo de problema…

Tem como eu criar uma biblioteca para fazer isso, sem usar macros? Como não tenho experiência em PHP, poderiam me ajudar?

Tira o break;

Testa esse código.
Qual evento vc tá colocando esse código?

[code]$sql ="
SELECT
Usuario_Email,
Email_SMTP,
Email_Usuario,
Usuario_Senha,
Email_Porta,
Email_Conexao,
Email_Contato,
Email_Assunto,
Email_Mensagem
FROM
tb_email
WHERE
Email_ID = [mailID]
";

sc_lookup(rs_mail, $sql);

if(!isset({rs_mail[0][0]})) {
sc_error_message(“Erro ao conectar banco de dados!”);
} else {
{Email} = {rs_mail[0][0]};
{SMTP} = {rs_mail[0][1]};
{Usuario} = {rs_mail[0][2]};
{Senha} = {rs_mail[0][3]};
{Porta} = {rs_mail[0][4]};
{Conexao} = {rs_mail[0][5]};
{Contato} = {rs_mail[0][6]};
{Assunto} = {rs_mail[0][7]};
{Mensagem} = {rs_mail[0][8]};
};

echo $sql;[/code]

Bom dia galera,

Gente, eu não sei o que aconteceu e nem o porque mas funcionou Allan, esse último funcionou. Só não me perguntem como, porque, …

Muito obrigado galera, vocês são muito show! Eu já estava ficando desacreditado, principalmente por ser uma coisa tão simples como essa.

A propósito, estou colocando esse código no evento OnLoad, mas já testei em outros como OnApplicationInit. E nos outros projetos, que também está dando o mesmo problema, tenho no evento OnBlur do Ajax, e por aí vai.

Obrigadaço mesmo!

Olha aí, fui pra outro projeto, inserir o mesmo código modificando algumas coisas pertencentes ao projeto.

No evento Ajax OnBlur do campo CLI_CNPJ, fiz o código como o Allan postou por último:

$cnpj = {CLI_CNPJ};

$sql = "SELECT
CLI_ID, CLI_CNPJ
FROM
tb_clientes
WHERE
CLI_CNPJ = ‘$cnpj’
";

sc_lookup(rs_dados, $sql);

if(!isset({rs_dados[0][0]})) {
sc_error_message(“Erro ao conectar banco de dados! Entre em contato com seu desenvolvedor.”);
} else {
echo “Este CNPJ já foi cadastrado!”;
};

echo $sql;

Ele traz a sintaxe SQL bonitinho, rodo no banco e perfeito, traz o resultado mas, na aplicação traz a mensagem de erro Erro ao conectar banco de dados! Entre em contato com seu desenvolvedor.

Agora, dá pra entender pessoal? Isso não é de tirar o juízo de qualquer um?