Usuário com melhor resposta
marcar checkbox com outro recordset

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
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()
wendend if
%>
Abraços
Estevam
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()
wendend if
%>
Abraços
Estevam
-
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 -
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%> -
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()
wendend if
%>
Observação.: Como voce esta abrindo o recordset?
Abraços
Estevam
-
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 -
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()
wendend if
%>
Abraços
Estevam
-
-
-
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> - Tipo de erro:
-
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%> -
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
-
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 -
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 -
-