Alterar Dados após clicar em link - [RESOLVIDO]

Galera Boa tarde,

Tenho uma consulta e nela tenho um campo chamado DOWNLOAD, onde preciso fazer um UPDATE na tabela, porém não está funcionado.
Segue o código:

[code]

sc_lookup(verifica,“SELECT LIDO FROM TBL_ARQUIVO WHERE ID = {ID}”);
if ({verifica[0][0]} == 0){
$arquivo = “/scriptcase/file/doc/”.{CAMINHOARQUIVO};
{DOWNLOAD}=‘DOWNLOAD’;
sc_exec_sql(“UPDATE TBL_ARQUIVO SET LIDO = 1 WHERE ID = {ID}”);
} else {
$arquivo = “/scriptcase/file/doc/”.{CAMINHOARQUIVO};
{DOWNLOAD}=‘DOWNLOAD’;
}[/code]

Quando o script inicia ele faz o UPDATE, alguém tem alguma idéia de como resolver isso.

Leandro Auler

Na consulta não tem evento ajax onclick, onde vc colocou esse script na consulta?

este código deve estar no evento onrecord

No OnRecord vai executar direto mesmo, ele vai ter que fazer algo mais ou menos assim:

http://www.netmake.com.br/forum/index.php?topic=1407.msg5561#msg5561

Haroldo / Tiago,

A rotina está no evento onRecord, porém quando a consulta é carregada ele executa o SQL, porém o sql só é para ser executado quando é clicado no link DOWNLOAD, já fiz uma rotina parecida com a do link, numa aplicação blank conforme código abaixo:


	$id = $_GET["ID"];
	$arquivo = $_GET["CAMINHO"];
	$file = "/scriptcase/file/doc/".$arquivo;
	
     
        if (file_exists($file)) {
	    sc_exec_sql("UPDATE TBL_ARQUIVO SET LIDO = 1 WHERE ID = $id");
			
           header("Content-Description: File Transfer");
           header("Content-Disposition: attachment; filename=$file");
           readfile("$file");
		
		}else {
		         echo "<script>alert('Erro ao ler o arquivo')</script>";
		} 

Porém o scriptcase gera erro de headers e na função readfile…

Leandro

Para isso funcionar, o link tem que ser uma ação ajax que chame uma blank, na blank você contempla o sql.
Como consulta não tem eventos ajax, você tem que criar manualmente.

Esse tipo de cabeçalho tem que ser as primeiras linhas do script para funcionar.

É perfeitamente possível fazer o que necessita, mas requer conhecimento mais avançado de programação.

Ainda mais se o arquivo de download for no formato txt, realmente precisa do header para que o download seja feito e não a abertura do arquivo direto no browser, para isso tem que ser um script exclusivo só para fazer o download. eu cheguei a desenvolver um para baixar arquivos textos e xml sem abrir no browser.

Haroldo,

teria como me dar uma dica de fazer ação ajax que chame uma blank?

Leandro

na oncriptinit:

[code]$_path_prod=$_SESSION[‘scriptcase’][‘nome_da_aplicação’][‘glo_nm_path_prod’];

echo "

";

[/code]

na onrecord:

{DOWNLOAD}="<a href=# onclick=\"ajaxConsulta({id}); return false\" class=scGridFieldEvenLink>DOWNLOAD</a>";

Algo parecido com isso.

estou com um problema um pouco paracido, tenho uma consulta que gostaria de saber se o usuario clicou nela,
tenho os status
“consulta não foi visualizada”,
“consulta foi visualizada” – ao usuario clicar em cima da consulta altera-se o estatus e indica-se o usuario e data da visualizacao

Haroldo,

Fiz da seguinte maneira:

onRecord:

{DOWNLOAD} = "<a href='../download/download.php?ID={ID}&CAMINHO={CAMINHOARQUIVO}' target='_blank' class='scGridFieldEvenLink'>download</a>";

E na Aplicação Blank:

set_time_limit(0); $id = $_POST['ID']; $arquivo = $_POST['CAMINHO']; $path = $this->Ini->path_doc; $arquivoLocal = $path . '/' . $arquivo; if (file_exists($arquivoLocal)) { @header("Content-Description: File Transfer"); @header("Content-Disposition: attachment; filename=".$arquivo); @header("Content-Type: application/octet-stream"); @header("Content-Transfer-Encoding: binary"); @header("Content-Length:".filesize($aquivo)); @header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); @header("Pragma: public"); @header("Expires: 0"); readfile($aquivo); sc_exec_sql("update tbl_arquivo set lido = 1 where id = {ID}"); } else { echo "Arquivo não existe."; exit; }

Porém está retornando o seguinte erro:

Cannot modify header information - headers already sent by

Tem como resolver isso no SC? Alguma sugestão?

Leandro

Prezados,

A solução postada anteriormente funcionou.

Obrigado pela ajuda,

Leandro