Ir ao conteúdo
  • Cadastre-se

Comando SELECT em Javascript x Access


Carolzita

Posts recomendados

Bom dia, tem um tempo que to trabalhando em um código HTML com umas funções em Javascript e conexão com DB em Access (Não estou usando nenhuma linguagem pra server (PHP ou ASP) porque não tenho familiaridade com a sintaxe em geral) até agora consegui fazer a conexão e inserir dados no DB normalmente, mas uma parte não quer funcionar de jeito nenhum, que é um SELECT que extrai dados do DB e apresenta em tela no form de origem.

O código é esse:


function DBConsult(ocorrencia, data, hora, solicitante, empresa, email, assunto, desc, dataG, AceiteG, dataTI, AceiteTI, geocodificacao, geocod, obs, HDobs){
alert("Função ativa");
try {
var myConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"C:\\Documents and Settings\\caroline.mathias\\Meus documentos\\Projetos\\Registro\\RegistroOcorrencia.mdb\"";
var ConnectObj = new ActiveXObject("ADODB.Connection");
var RS = new ActiveXObject("ADODB.Recordset");
var sql = "SELECT ID_Ocorrencia, Data, Hora, Solicitante, Empresa, email, Assunto, Descricao,Geografia, Aceite_G, TI, Aceite_TI, Geocodificacao, Geocod, Obs, HD FROM Registro WHERE ID_Ocorrencia = '" + ocorrencia + "' AND Solicitante = '" + solicitante + "' AND Empresa = '" + empresa + "'";
ConnectObj.Open (myConnect);
RS.Open(sql,ConnectObj);
data = RS.Fields.Item("Data");
hora = RS.Fields.Item("Hora");
email = RS.Fields.Item("email");
assunto = RS.Fields.Item("Assunto");
desc = RS.Fields.Item("Descricao");
dataG = RS.Fields.Item("Geografia");
AceiteG = RS.Fields.Item("Aceite_G");
dataTI = RS.Fields.Item("TI");
AceiteTI = RS.Fields.Item("Aceite_TI");
geocodificacao = RS.Fields.Item("Geocodificacao");
geocod = RS.Fields.Item("Geocod");
obs = RS.Fields.Item("Obs");
HDobs = RS.Fields.Item("HD");
} catch(erro) {
alert(erro.message);
}
RS.Close();
ConnectObj.Close();
alert("Executado");
return (ocorrencia, data, hora, solicitante, empresa, email, assunto, desc, dataG, AceiteG, dataTI, AceiteTI, geocodificacao, geocod, obs, HDobs);
}

A função é chamada com o click de um botão no form. Quando eu executo com o 'return' no código nada acontece, ele chama a função mas não termina de executar (o último alert não é exibido), se eu retiro o return tudo funciona normalmente, o código é executado mas não apresenta nada...

Por favor, estou no aguardo de respostas o mais rápido possível.

Obrigada desde já

Link para o comentário
Compartilhar em outros sites

Olá, coloca o resto do código pra ficar mais fácil te ajudar.

pode estar acontecendo alguns problemas, como:

- Os parametros da função estão vazios. usa um alert só para checar se eles estão vindo.

- A consulta sql pode ter retornado um erro ou não encontrado resultado, tente verificar a quantidade de linhas encontradas, assim:

RS.Open(sql,ConnectObj);
alert('Resultados encontrados: ' + RS.Fields.Count);

- nessas linhas que estão assim:

data = RS.Fields.Item("Data");

, não vai funcionar setar um parâmetro da função, você teria que fazer alguma coisa parecido com isso:

document.getElementById('data').value = RS.Fields.Item("Data");

, sendo que existisse um objeto com o ID 'data'.

- Na ultima linha da função, não vai funcionar usar parâmetros no 'return', ele só precisa retornar "true" já que você esta chamando de um evento do botão.

 return true; 

Link para o comentário
Compartilhar em outros sites

Código completo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Registro de Ocorrências</title>
</head>
<body>
<h3>Registro de Ocorrências</h3>
<form action="/html/tags/html_form_tag_action.cfm" method="get">
<table>
<tr>
<td>Nº da Ocorrência:</td>
<td>
<input type="text" name="ocorrencia" value="" maxlength="10" />
</td>
</tr>
<tr>
<td>Data e Hora:</td>
<td>
<input type="text" name="data" value="" maxlength="5" />
<input type="text" name="hora" value="" maxlength="5" />
</td>
</tr>
<tr>
<td>Solicitante:</td>
<td>
<input type="text" name="solicitante" value="" maxlength="50" />
</td>
</tr>
<tr>
<td>Empresa:</td>
<td>
<input type="text" name="empresa" value="" maxlength="50" />
</td>
</tr>
<tr>
<td>E-mail:</td>
<td>
<input type="text" name="email" value="" maxlength="70"/>
</td>
</tr>
<tr>
<td>Assunto:</td>
<td>
<select name="assunto">
<option value ="Atualização (Dados, Mapas, etc)" >Atualização (Dados, Mapas, etc)</option>
<option value ="Novo Dado" >Novo Dado</option>
<option value ="Alteração de Atributo" >Alteração de Atributo</option>
</select>
</td>
</tr>
<tr>
<td>Descrição:</td>
<td>
<textarea rows="5" cols="40" name="desc"></textarea>
</td>
</tr>
<tr>
<td>Geografia:</td>
<td>
<input type="text" name="dataG" value="" maxlength="10" />
<input type="checkbox" name="AceiteG" value="AceiteG"/> Aceite
</td>
</tr>
<tr>
<td>TI:</td>
<td>
<input type="text" name="dataTI" value="" maxlength="10" />
<input type="checkbox" name="AceiteTI" value="AceiteTI"/> Aceite
</td>
</tr>
<tr>
<td>Geocodificação:</td>
<td>
<input type="text" name="geocodificacao" value="" maxlength="10" />
<input type="checkbox" name="geocod" value="Geocod"/> Concluído
</td>
</tr>

<tr>
<td>Obs:</td>
<td>
<textarea rows="4" cols="40" name="obs"></textarea>
</td>
</tr>
<tr>
<td>Help Desk:</td>
<td>
<textarea rows="4" cols="40" name="HDobs"></textarea>
</td>
</tr>
<tr>
<td colspan="2">
<script type="text/javascript" language="javascript">
<!--
function DB(ocorrencia, data, hora, solicitante, empresa, email, assunto, desc, dataG, AceiteG, dataTI, AceiteTI, geocodificacao, geocod, obs, HDobs) {
try {
var myConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"C:\\Documents and Settings\\caroline.mathias\\Meus documentos\\Projetos\\Registro\\RegistroOcorrencia.mdb\"";
var ConnectObj = new ActiveXObject("ADODB.Connection");
var RS = new ActiveXObject("ADODB.Recordset");
var sql = "INSERT INTO Registro(ID_Ocorrencia, Data, Hora, Solicitante, Empresa, email, Assunto, Descricao, Geografia, Aceite_G, TI, Aceite_TI, Geocodificacao, Geocod, Obs, HD) VALUES('" + ocorrencia + "', '" + data + "', '" + hora + "', '" + solicitante + "', '" + empresa + "', '" + email + "', '" + assunto + "', '" + desc + "', '" + dataG + "', '" + AceiteG + "', '" + dataTI + "', '" + AceiteTI + "', '" + geocodificacao + "', '"+ geocod+ "', '"+ obs + "', '" + HDobs +"')";
ConnectObj.Open (myConnect);
RS.Open(sql,ConnectObj);
} catch(erro) {
alert(erro.message);
}
alert("Salvo com sucesso!");
RS.Close();
ConnectObj.Close();
}
function DBConsult(ocorrencia, data, hora, solicitante, empresa, email, assunto, desc, dataG, AceiteG, dataTI, AceiteTI, geocodificacao, geocod, obs, HDobs){
alert("Função ativa");
try {
var myConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"C:\\Documents and Settings\\caroline.mathias\\Meus documentos\\Projetos\\Registro\\RegistroOcorrencia.mdb\"";
var ConnectObj = new ActiveXObject("ADODB.Connection");
var RS = new ActiveXObject("ADODB.Recordset");
var sql = "SELECT ID_Ocorrencia, Data, Hora, Solicitante, Empresa, email, Assunto, Descricao,Geografia, Aceite_G, TI, Aceite_TI, Geocodificacao, Geocod, Obs, HD FROM Registro WHERE ID_Ocorrencia = '" + ocorrencia + "' AND Solicitante = '" + solicitante + "' AND Empresa = '" + empresa + "'";
ConnectObj.Open (myConnect);
RS.Open(sql,ConnectObj);
data = RS.Fields.Item("Data");
hora = RS.Fields.Item("Hora");
email = RS.Fields.Item("email");
assunto = RS.Fields.Item("Assunto");
desc = RS.Fields.Item("Descricao");
dataG = RS.Fields.Item("Geografia");
AceiteG = RS.Fields.Item("Aceite_G");
dataTI = RS.Fields.Item("TI");
AceiteTI = RS.Fields.Item("Aceite_TI");
geocodificacao = RS.Fields.Item("Geocodificacao");
geocod = RS.Fields.Item("Geocod");
obs = RS.Fields.Item("Obs");
HDobs = RS.Fields.Item("HD");
} catch(erro) {
alert(erro.message);
}
RS.Close();
ConnectObj.Close();
alert("Executado");
return (ocorrencia, data, hora, solicitante, empresa, email, assunto, desc, dataG, AceiteG, dataTI, AceiteTI, geocodificacao, geocod, obs, HDobs);
}
//-->
</script>
<input type="button" onclick="DB(form.ocorrencia.value,form.data.value,form.hora.value,form.solicitante.value,form.empresa.value,form.email.value,form.assunto.value,form.desc.value,form.dataG.value,form.AceiteG.checked,form.dataTI.value,form.AceiteTI.checked,form.geocodificacao.value,form.geocod.checked,form.obs.value,form.HDobs.value)" value="Salvar" />
<input type="button" onclick="DBConsult(form.ocorrencia.value,form.data.value,form.hora.value,form.solicitante.value,form.empresa.value,form.email.value,form.assunto.value,form.desc.value,form.dataG.value,form.AceiteG.checked,form.dataTI.value,form.AceiteTI.cheched,form.geocodificacao.value,form.geocod.checked,form.obs.value,form.HDobs.value)" value="Consulta" /></td>
</tr>
</table>
</form>
</body>
</html>

ontem durante o dia eu tinha feito algumas modificações no código para teste, os parâmetros estão sendo enviados sim. Quando eu mudei a forma de exibição para um "document.write" só, tudo exibiu normalmente...

Vou implementar as mudanças que parece que surtirão efeito e qualquer novidade eu posto aqui.. Muito obrigada novamente ^^

Bem.. Eu modifiquei tecnicamente a forma de retorno, visto que a referenciação por id dos campos funcionou perfeitamente... Tendo então esse resultado:

function DBConsult(ocorrencia) {
try {
var myConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"C:\\Documents and Settings\\caroline.mathias\\Meus documentos\\Projetos\\Registro\\RegistroOcorrencia.mdb\"";
var ConnectObj = new ActiveXObject("ADODB.Connection");
var RS = new ActiveXObject("ADODB.Recordset");
var sql = "SELECT Data, Hora, Solicitante, Empresa, email, Assunto, Descricao, Geografia, Aceite_G, TI, Aceite_TI, Geocodificacao, Geocod, Obs, HD FROM Registro WHERE ID_Ocorrencia = '" + ocorrencia + "'";
ConnectObj.Open (myConnect);
RS.Open(sql,ConnectObj);
alert('Resultados encontrados: ' + RS.Fields.Count);

var data = RS.Fields.Item("Data");
var hora = RS.Fields.Item("Hora");
var solicitante = RS.Fields.Item("Solicitante");
var empresa = RS.Fields.Item("Empresa");
var email = RS.Fields.Item("email");
var assunto = RS.Fields.Item("Assunto");
var desc = RS.Fields.Item("Descricao");
var dataG = RS.Fields.Item("Geografia");
var AceiteG = RS.Fields.Item("Aceite_G");
var dataTI = RS.Fields.Item("TI");
var AceiteTI = RS.Fields.Item("Aceite_TI");
var geocodificacao = RS.Fields.Item("Geocodificacao");
var geocod = RS.Fields.Item("Geocod");
var obs = RS.Fields.Item("Obs");
var HDobs = RS.Fields.Item("HD");

} catch(erro) {
alert(erro.message);
}
document.getElementById('data').value = data;
document.getElementById('hora').value = hora;
document.getElementById('solicitante').value = solicitante;
document.getElementById('empresa').value = empresa;
document.getElementById('email').value = email;
document.getElementById('assunto').value = assunto;
document.getElementById('desc').value = desc;
document.getElementById('dataG').value = dataG;
document.getElementById('AceiteG').checked = AceiteG;
document.getElementById('dataTI').value = dataTI;
document.getElementById('AceiteTI').checked = AceiteTI;
document.getElementById('geocodificacao').value = geocodificacao;
document.getElementById('geocod').checked = geocod;
document.getElementById('obs').value = obs;
document.getElementById('HDobs').value = HDobs;
RS.Close();
ConnectObj.Close();
}

(A sintaxe está desse jeito para manter um padrão requisitado)

Porém, a pesquisa que eu estou fazendo agora, como pode notar, somente pelo numero do ID não dá puxa os dados.. Já identifiquei o problema, mas não sei como resolvê-lo.

A entrada no campo é String, e no DB o ID é uma auto-numeração em números inteiros, o erro que aponta é o seguinte: "Tipo de dados incompatível na expressão de critério."

Eu mudei o campo do ID para texto e fiz a pesquisa novamente, os dados até antes do campo "assunto" foram retornados normalmente. Consegui uma forma de converter o campo do ID para int usando um "parseInt()" o valor é convertido, mas continua dando o mesmo erro...

Alguma dica..?

Link para o comentário
Compartilhar em outros sites

tenta esse sql:

var sql = "SELECT * FROM Registro WHERE ID_Ocorrencia = " + parseInt(ocorrencia)

no mysql isso funcionaria sem problema, mas nunca testei com o ADODB+access.

se não funcionar, tenta assim:

var sql = "SELECT * FROM Registro WHERE 'ID_Ocorrencia' = '" + parseInt(ocorrencia) + "'";

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!