none
marcar checkbox com outro recordset RRS feed

  • Pergunta

  • Galera, estou precisando de uma luz....

    eu tenho uma pagina onde eu carrego varios checkbox com dados de um recordset(rsAcoes) e nessa mesma pagina eu tenho que marcar esses checkbox com dados que eu trago de outro recordset(rsAcoesPerfil).

    <%if rsAcoes.RecordCount > 0 then%>   
    <%While (not rsAcoes.EOF)%>
                <div id="criarperfil_ckacoes">
    <input type="checkbox" id="grupoperfilacao" name="grupoperfilacao" value="<%=rsAcoes("codacao")%>"
    <%if rsAcoesPerfil("codacao") = rsAcoes("codacao") then Response.Write("checked")%>><%=rsAcoes("descricaoacao")%>
               </div>
            <%rsAcoes.MoveNext()
            wend%>
    <%end if%>
    dessa forma ela marca apernas um checkbox, tentei de outras formas usando while, for each e só consegui um loop eterno.....rsrs...se eu pude ser claro quanto a minha dúvida, alguem poderia me dar uma ideia?

    abraço
    terça-feira, 29 de janeiro de 2008 18:30

Respostas

  • Geovani, creio que foi erro meu tente com o código abaixo:

     

    <%if rsAcoes.RecordCount > 0 then%>   
         <%While (not rsAcoes.EOF)%>
                <div id="criarperfil_ckacoes">
                      <input type="checkbox" id="grupoperfilacao" name="grupoperfilacao" value="<%=rsAcoes("codacao")%>"

                           <%

                             if not rsAcoesPerfil.EOF then 

          Do while not rsAcoesPerfil.EOF

                                  if rsAcoesPerfil("codacao") = rsAcoes("codacao") then

                                       Response.Write("checked")

                                  end if

                                  rsAcoesPerfil.movenext

                              loop

                              rsAcoesPerfil.movefirst

                             end if

                            %>

                      >

    <%=rsAcoes("descricaoacao")%>
    </div>

    <%

    rsAcoes.MoveNext()
    wend

    end if

    %>

     

    Abraços

     

    Estevam

    quarta-feira, 30 de janeiro de 2008 14:19

Todas as Respostas

  • Geovani já tentou da forma abaixo:

     

    <%if rsAcoes.RecordCount > 0 then%>   
         <%While (not rsAcoes.EOF)%>
                <div id="criarperfil_ckacoes">
                      <input type="checkbox" id="grupoperfilacao" name="grupoperfilacao" value="<%=rsAcoes("codacao")%>"

                           <%

          Do while not rsAcoesPerfil.EOF

                                  if rsAcoesPerfil("codacao") = rsAcoes("codacao") then

                                       Response.Write("checked")

                                  end if

                                  rsAcoesPerfil.movenext

                              loop

                            %>

                      >

    <%=rsAcoes("descricaoacao")%>
    </div>

    <%

    rsAcoes.MoveNext()
    wend

    end if

    %>

     

     

    Abraços

     

    Estevam

    terça-feira, 29 de janeiro de 2008 19:51
  • Estevam, eu havia tentado usando só o rsAcoesPerfil.movenext junto com o rsAcoes.MoveNext() ....chegou atá a funcionar, mas apenas quando todos os itens estavam marcados, quando exitiam apenas alguns ou nenhum item marcado dava erro de pagina.

    Da forma que você passou não funcionou, quando tinha todos os itens marcados ele marcava apenas um item, quando tinha apenas alguns não marcava nehum e quando não tinha itens, dava erro na pagina.

    Para todos esse erros aparece a mesma mensagem:
    Tipo de erro:
    ADODB.Field (0x80020009)
    BOF ou EOF são verdadeiros, ou o registro atual foi excluído. A operação solicitada pelo aplicativo requer um registro atual.

    Se você ou alguem tiver outra idéa, to aceitando....rsrs....enquanto isso eu vou tentando aqui...

    obrigado

    quarta-feira, 30 de janeiro de 2008 10:45
  • bom, enquanto ninguem me response, eu vou colando umas tentativas aqui...

    Resolvi transformar um recordset em array e usar um for each para testar cada item, mas quanto ha itens não é marcado nenhum checkbox, mas quando não exite item da erro na pagina.
    ADODB.Field (0x80020009)
    BOF ou EOF são verdadeiros, ou o registro atual foi excluído. A operação solicitada pelo aplicativo requer um registro atual.


    segue o código
          <%if rsAcoes.RecordCount > 0 then%>   
                <%While (not rsAcoes.EOF)%>
                <div id="criarperfil_ckacoes">
                    <input type="checkbox" id="grupoperfilacao" name="grupoperfilacao" value="<%=rsAcoes("codacao")%>"   
                    <%//transforma o rsAcoesPerfil em array
                    Do while not rsAcoesPerfil.EOF
                        mystring = mystring & rsAcoesPerfil("codacao")&", "
                        rsAcoesPerfil.MoveNext()
                    loop
                    myarray = Split(mystring, ", ")%>   
                    <%//marca os checkbox
                    for each myitem in myarray
                        if myitem = rsAcoes("codacao") then
                            Response.Write("checked")
                        end if
                    next%>                   
                        ><%=rsAcoes("descricaoacao")%>
               </div>
            <%rsAcoes.MoveNext()
            wend%>
            <%end if%>
    quarta-feira, 30 de janeiro de 2008 11:49
  • Geovani pelas informações que você passou tente desta forma:

     

    <%if rsAcoes.RecordCount > 0 then%>   
         <%While (not rsAcoes.EOF)%>
                <div id="criarperfil_ckacoes">
                      <input type="checkbox" id="grupoperfilacao" name="grupoperfilacao" value="<%=rsAcoes("codacao")%>"

                           <%

                             rsAcoesPerfil.movefirst

                             if not rsAcoesPerfil.EOF then 

          Do while not rsAcoesPerfil.EOF

                                  if rsAcoesPerfil("codacao") = rsAcoes("codacao") then

                                       Response.Write("checked")

                                  end if

                                  rsAcoesPerfil.movenext

                              loop

                             end if

                            %>

                      >

    <%=rsAcoes("descricaoacao")%>
    </div>

    <%

    rsAcoes.MoveNext()
    wend

    end if

    %>

     

     

    Observação.: Como voce esta abrindo o recordset?

     

    Abraços

     

    Estevam

    quarta-feira, 30 de janeiro de 2008 12:20
  • Estevam, da forma que você postou agora funcionou, menos quando não ha itens, continua dando erro de pagina.

    eu abro o recordeset dessa forma, tanto para rsAcoes quanto para rsAcoesperfil

    Dim rsAcoesPerfil
    set rsAcoesPerfil = server.CreateObject("ADODB.Recordset")
    with rsAcoesPerfil
        .cursortype = 0
        .locktype = 1
        .cursorlocation = 3
        .activeconnection = MM_procon_STRING
    end with

    abraço

    quarta-feira, 30 de janeiro de 2008 14:01
  • Geovani, creio que foi erro meu tente com o código abaixo:

     

    <%if rsAcoes.RecordCount > 0 then%>   
         <%While (not rsAcoes.EOF)%>
                <div id="criarperfil_ckacoes">
                      <input type="checkbox" id="grupoperfilacao" name="grupoperfilacao" value="<%=rsAcoes("codacao")%>"

                           <%

                             if not rsAcoesPerfil.EOF then 

          Do while not rsAcoesPerfil.EOF

                                  if rsAcoesPerfil("codacao") = rsAcoes("codacao") then

                                       Response.Write("checked")

                                  end if

                                  rsAcoesPerfil.movenext

                              loop

                              rsAcoesPerfil.movefirst

                             end if

                            %>

                      >

    <%=rsAcoes("descricaoacao")%>
    </div>

    <%

    rsAcoes.MoveNext()
    wend

    end if

    %>

     

    Abraços

     

    Estevam

    quarta-feira, 30 de janeiro de 2008 14:19
  • Estavam, continua dando erro quando o rs AcoesPerfil vem vazio.
    quarta-feira, 30 de janeiro de 2008 14:38
  • Geovane, por favor, envie o erro e alinha na qual ele diz encontrar o erro.

     

    Abraços

     

    Estevam

    quarta-feira, 30 de janeiro de 2008 15:02
  • Estevam, o erro não indica a linha, apenas aparece a mensagem:

  • Tipo de erro:
    ADODB.Field (0x80020009)
    BOF ou EOF são verdadeiros, ou o registro atual foi excluído. A operação solicitada pelo aplicativo requer um registro atual.
    /informesindec/controleacesso/perfil/alteraperfil.asp


    Segue os recordset´s e o codigo da pagina

    Dim rsAcoes
    set rsAcoes = server.CreateObject("ADODB.Recordset")
    with rsAcoes
        .cursortype = 0
        .locktype = 1
        .cursorlocation = 3
        .activeconnection = MM_procon_STRING
    end with

    SQL = "SELECT codacao,descricaoacao FROM tbacao ORDER BY 2"

    rsAcoes.open SQL

    //lista ações do perfil selecionado
    idPerfil = Request.QueryString("codperfil")
    Dim rsAcoesPerfil
    set rsAcoesPerfil = server.CreateObject("ADODB.Recordset")
    with rsAcoesPerfil
        .cursortype = 0
        .locktype = 1
        .cursorlocation = 3
        .activeconnection = MM_procon_STRING
    end with

    SQL = "SELECT pa.codperfilacao,pa.codacao,p.descricaoperfil FROM tbperfilacao pa "&_
            "INNER JOIN tbperfil p ON p.codperfil = pa.codperfil "&_
            "WHERE pa.codperfil = '"& idPerfil &"'"

    rsAcoesPerfil.open SQL

    <form id="form_perfil" name="form_perfil" method="post" action="">
        <div id="alteraperfil_nome">
            Nome do perfil:<input id="alteraperfil_txtNome" name="alteraperfil_txtNome" type="text" size="40" value="<%=rsAcoesPerfil("descricaoperfil")%>">
        </div>
        <div id="alteraperfil_adados" >
            Ações:<br>
        <div id="alteraperfil_acoes">
        <%if rsAcoes.RecordCount > 0 then%>  
        <%While (not rsAcoes.EOF)%>
                <div id="criarperfil_ckacoes">
                <input type="checkbox" id="grupoperfilacao" name="grupoperfilacao" value="<%=rsAcoes("codacao")%>"
                <%if not rsAcoesPerfil.EOF then
                      Do while not rsAcoesPerfil.EOF
                          if rsAcoesPerfil("codacao") = rsAcoes("codacao") then
                              Response.Write("checked")
                          end if
                          rsAcoesPerfil.movenext
                      loop
                      rsAcoesPerfil.movefirst
                 end if%>
                 ><%=rsAcoes("descricaoacao")%>
            </div>
        <%rsAcoes.MoveNext()
        wend
        end if%>
        </div>
        <div id="botoes">
            <input id="btAlterar" type="button" class="button" value="Salvar" onClick="altera()">
            <input id="btCancelar" type="button" class="button" value="Voltar" onClick="location='listaperfil.asp';">
        </div>
    </form>

quarta-feira, 30 de janeiro de 2008 15:31
  • Esqueci de comentar. Esse erro sempre acontece quando o rsAcoesPerfil vem vazio.
    Então eu tentei colocar uma condição pra evitar de fazer a comparação, mas não deu certo...eu fiz assim:

        <%if rsAcoes.RecordCount > 0 then%>  
        <%While (not rsAcoes.EOF)%>
                <div id="criarperfil_ckacoes">
                <input type="checkbox" id="grupoperfilacao" name="grupoperfilacao" value="<%=rsAcoes("codacao")%>"
                <%if rsAcoesPerfil.RecordCount > 0 then
                if not rsAcoesPerfil.EOF  then
                      Do while not rsAcoesPerfil.EOF
                          if rsAcoesPerfil("codacao") = rsAcoes("codacao") then
                              Response.Write("checked")
                          end if
                          rsAcoesPerfil.MoveNext()
                      loop
                      rsAcoesPerfil.MoveFirst()
                 end if
                 end if%>
                 ><%=rsAcoes("descricaoacao")%>
            </div>
        <%rsAcoes.MoveNext()
        wend
        end if%>
    quarta-feira, 30 de janeiro de 2008 15:56
  • Geovani,

     

    Referente a esta linha que você adicionou:

    if rsAcoesPerfil.RecordCount > 0 then ....

     

    é praticamente a mesma coisa que

    if not rsAcoesPerfil.EOF   (Nesta linha estou dizendo "se nao chegou ao final do recordset faça isso")

     

    Na verdade qualquer uma das duas funcionaria, mas altere o código deixando somente uma das opções.

     

    Pelos testes que fiz aqui o código em si esta correto, pelo menos não consegui ver algum erro, você tem certeza que após o final do LOOP principal (Wend) não existe nenhuma outra parte do código requisitando algum campo do recordset rsAcoesPerfil??

     

    Outra você comentou que se o recordset vem com todos so records preenchidos ele não problema e mesmo ocorre se somente alguns vem preenchidos, agora lhe pergunta se somente o primeiro registro do recordset vem em branco ele funciona normal??

     

     

    Abraços

     

    Estevam

    quarta-feira, 30 de janeiro de 2008 17:48
  • Quanto a linha que eu adicionei eu ja a removi, eu tinha percebido que não tinha mudado nada..rs

    Eu chequei todas as linhas da pagina, mas não tem nenhum outro campo requisitando algum campo do rsAcoesPerfil.Eu postei aqui toda a pagina, tirando apenas algumas tags de html.

    Nesse momento, a pagina não apresenta erro quando todos records vem preenchidos ou somente alguns marcados, mesmo quando o primeiro item esta em branco. Esses que apenas alguns records estão marcados, o primeiro item esta desmarcado em todos.

    Eu dei ate um tempo pra esfirar a cabeça e voltar a pensar nele....eu também não entendo o porque desse erro.

    abraço
    quarta-feira, 30 de janeiro de 2008 18:07
  • Estevam, você tinha razão...eu não havia percebido, mas tem outro rsAcaoPerfil sendo requisitado...ele estava num imput antes dos LOOP.
    Nome do perfil:<input id="alteraperfil_txtNome" name="alteraperfil_txtNome" type="text" size="40" value="<%=rsAcoesPerfil("descricaoperfil")%>"

    Tirei ele e fiz o teste, funcionou certinho.

    Muito Obrigado pelo sua ajuda.

    Abraço

    quarta-feira, 30 de janeiro de 2008 18:30
  • Geovani, tem como você postar a página inteira (menos string de conexao com banco claro), acabei de fazer um teste igual ao seu na minha máquina e ta rolando perfeitamente.

     

    Abraços

     

    Estevam

     

    quarta-feira, 30 de janeiro de 2008 18:33
  • Oooopppssss desconsideras minha mensagem acima.

    Desculpe não tinha visto sua ultima response.

     

    Abraços

     

    Estevam

     

    quarta-feira, 30 de janeiro de 2008 18:37