Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
Carolzita

[Resolvido] Comando SELECT em Javascript x Access

Recommended Posts

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á

Compartilhar este post


Link para o post
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; 

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 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..?

    Editado por gandalfnho
    União de posts

    Compartilhar este post


    Link para o post
    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) + "'";

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Cara... Eu te amo.!! xDD

    Funcionou perfeitamente..!! muito obrigada mesmo.!! Até a próxima...

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Visitante
    Este tópico está impedido de receber novos posts.
    Entre para seguir isso  





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×