Ir para conteúdo

POWERED BY:

Arquivado

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

Cesão

Dividindo registros em células

Recommended Posts

Olá pessoal,

 

Gostaria de saber o seguinte... tenho uma tabela no DB que tem X registros...

Gostaria que os mesmos aparecessem em uma tabela de 3 celulas (vejam bem... 3 celulas e nao 3 colunas)...

 

Isso pq estou usando um recurso em javascript que os registros tem de estar na mesma celula para funcionar corretamente...

ou seja... se eu tiver 99 registros, quero que apareça 33 na primeira celula (um registro embaixo do outro), 33 na segunda e 33 na terceira...

 

isso pq estou fazendo um coletor de feeds (como o netvibes) e para eu poder arrastar os quadros (registros) e eles se encaixarem perfeitamente embaixo do outro, tem de estar na mesma celula...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Todos os outros topico referentes a este assunto foram excluidos

 

Restando apenas este.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cesão,

 

Código pronto eu não vou te passar, apenas a lógica, mas antes me tire algumas duvidas:

Três células com a mesma quantidade de registros, mas caso não seja múltiplo de 3 onde deve ficar o restante, na 1ª, 2ª ou 3ª células?

 

 

Lógica:

Selecionar todos os registros e também o "count" desses registros, dividir esses dados por 3 e pegar apenas o INT, verificar se o resto dessa conta é maior que zero.

Você irá fazer um FOR de 1 a 3, abre a célula, dentro dele um FOR de 1 até o Total da divisão por 3, fecha a célula. Esse é um básicão, tem que fazer as verificações para as contas não exatas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cesão,

 

Código pronto eu não vou te passar, apenas a lógica, mas antes me tire algumas duvidas:

Três células com a mesma quantidade de registros, mas caso não seja múltiplo de 3 onde deve ficar o restante, na 1ª, 2ª ou 3ª células?

 

 

Lógica:

Selecionar todos os registros e também o "count" desses registros, dividir esses dados por 3 e pegar apenas o INT, verificar se o resto dessa conta é maior que zero.

Você irá fazer um FOR de 1 a 3, abre a célula, dentro dele um FOR de 1 até o Total da divisão por 3, fecha a célula. Esse é um básicão, tem que fazer as verificações para as contas não exatas.

Então salgado... se não for exato (divisivel por 3) deverá ficar em qualquer uma das colunas.. na verdade tanto faz pq depois ele vai arrastar e alterar como quiser..

 

Então, eu fiz mais ou menos essa logica que você me disse mas nao funcionou muito bem...

 

fiz um select para o count (nomeei o count como TOTAL) e um select para os dados..

dai fiz:

 

Divisao = cint(Total / 3)

 

dai existe minha tabela de tres celulas, mas nao entendi como fazer para na primeira celula aparecer o primeiro terço, na segunda o segundo terço e na terceira o restante...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como já havia dito mais acima>

Você irá fazer um FOR de 1 a 3, abre a célula, dentro dele um FOR de 1 até o Total da divisão por 3, fecha a célula. Esse é um básicão, tem que fazer as verificações para as contas não exatas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema é que nao manjo como encaixar esses FOR pq nao manjo como fazer um FOR de 1 ate 3, como você disse...

 

antes eu estava usando um codigo assim:

<%
					DIVISAO = TOTAL / 3 'TOTAL é o nome que dei ao COUNT do select
   					contador = 1
					maxcol = DIVISAO	'<------------------ numero de registros por colunas
					do while not TB.eof%>
					  <% 
					if contador <= maxcol then %>
						  <td>
						<div class="portlet">
						<div id="boxMiniFeed">
						<a href="java script:void(0)"><img src="../imgs/icon_x_blue.gif" width="8" height="8" alt="FECHAR FEED" title="FECHAR FEED" /></a>
						<img src="../imgs/plasicon_feed.gif" height="25" width="25" alt="Meus Feeds" style="float:left; margin:0 5px 0 0;" />
							<div id="news<%=TB("ID_CANAL")%>">
								<script language="javascript">getNoticias("int_list_news.asp?IDL=<%=TB("ID_CANAL")%>", "news<%=TB("ID_CANAL")%>");</script>
							</div>
						</div>
						</div>
						  </td>
					  <%
					  contador = contador + 1
					else
					%>
					</tr>
					<tr>
						  <td>
						<div class="portlet">
						<div id="boxMiniFeed">
						<a href="java script:void(0)"><img src="../imgs/icon_x_blue.gif" width="8" height="8" alt="FECHAR FEED" title="FECHAR FEED" /></a>
						<img src="../imgs/plasicon_feed.gif" height="25" width="25" alt="Meus Feeds" style="float:left; margin:0 5px 0 0;" />
							<div id="news<%=TB("ID_CANAL")%>">
								<script language="javascript">getNoticias("int_list_news.asp?IDL=<%=TB("ID_CANAL")%>", "news<%=TB("ID_CANAL")%>");</script>
							</div>
						</div>
						</div>
						  </td>
					  <%
					  contador = 1
					end if
					  TB.movenext
					loop
 
					'completa as colunas
					do while contador <= maxcol %>
						  <td> </td>
					<%  contador = contador + 1
					loop %>

mas ele nao funciona bem.. ele cria linhas (mas nao quero que crie linhas.. quero apenas que os registros se distribuam entre as 3 celulas)...

E como nao manjo criar esse FOR, nao sei como criar esse esquema que você me passou... tipo, tem como me explicar como eu encaixaria esse for no codigo? e eu vou precisar de um contador como no meu codigo antigo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não use esse Script para seu caso. Resumidamente seria assim:

ASP
<table>

For x = 1 to 3

<td><tr>

For y = 1 to Divisão

Aqui irá os response.write dos registros

Next

</tr></td>

Next

Mas ainda deve-se atentar para o "resto" da sua divisão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz assim, mas nao funcionou...

 

ASP
<table cellspacing="0" id="columns" border="2">

                                        <tr>

                                        <%For colunas = 1 to 3%>

                                                <td>

                                                <%

                                                For y = 1 to DIVISAO

                                                do while not TB.EOF

                                                %>

                                                <div class="portlet">

                                                <div id="boxMiniFeed">

                                                <a href="java script:void(0)"><img src="../imgs/icon_x_blue.gif" width="8" height="8" alt="FECHAR FEED" title="FECHAR FEED" /></a>

                                                <img src="../imgs/plasicon_feed.gif" height="25" width="25" alt="Meus Feeds" style="float:left; margin:0 5px 0 0;" />

                                                        <div id="news<%=TB("ID_CANAL")%>">

                                                                <script language="javascript">getNoticias("int_list_news.asp?IDL=<%=TB("ID_CANAL")%>", "news<%=TB("ID_CANAL")%>");</script>

                                                        </div>

                                                </div>

                                                </div>

                                                <%

                                                TB.MoveNext : Loop

                                                Next

                                                %>

                                                </td>

                                        <%Next%>

                                        </tr>

                                </table>

 

aparece todos os registros na mesma coluna... um embaixo do outro...

eu tinha feito SEM o while do TB.. ele ficava posicionado certinho, mas carregava apenas 1 registro...

Compartilhar este post


Link para o post
Compartilhar em outros sites
Fiz assim, mas nao funcionou...

 

ASP
<table cellspacing="0" id="columns" border="2">

                     <tr>

                     <%For colunas = 1 to 3%>

                         <td>

                         <%

                         For y = 1 to DIVISAO

                         do while not TB.EOF

                         %>

                         <div class="portlet">

                         <div id="boxMiniFeed">

                         <a href="java script:void(0)"><img src="../imgs/icon_x_blue.gif" width="8" height="8" alt="FECHAR FEED" title="FECHAR FEED" /></a>

                         <img src="../imgs/plasicon_feed.gif" height="25" width="25" alt="Meus Feeds" style="float:left; margin:0 5px 0 0;" />

                             <div id="news<%=TB("ID_CANAL")%>">

                                 <script language="javascript">getNoticias("int_list_news.asp?IDL=<%=TB("ID_CANAL")%>", "news<%=TB("ID_CANAL")%>");</script>

                             </div>

                         </div>

                         </div>

                         <%

                         TB.MoveNext : Loop

                         Next

                         %>

                         </td>

                     <%Next%>

                     </tr>

                 </table>

 

aparece todos os registros na mesma coluna... um embaixo do outro...

eu tinha feito SEM o while do TB.. ele ficava posicionado certinho, mas carregava apenas 1 registro...

Retire o Do While e o LOOP, mas mantenha o TB.MoveNext.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ah cara, agora eu sei pq eu tava me atrapalhando... eu nem sabia que podia colocar um TB.movenext sem abrir um while antes... na verdade nem sabia que isso poderia dar certo... hahahaha

mas valew...

 

mas eh como você mesmo disse... agora soh falta mostrar os registros (quando o COUNT nao eh divisivel por 3)... ou seja.. tenho 7 registros, mas soh apareceram 6...

 

alguém sabe como eu poderia fazer para mostrar os outros registros??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como pode ficar em qualquer célula o excesso, faça então um While Not TB.EOF logo após o NEXT desse FOR, antes de fechar a TD.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como pode ficar em qualquer célula o excesso, faça então um While Not TB.EOF logo após o NEXT desse FOR, antes de fechar a TD.

até testei assim como você disse:

ASP
<table cellspacing="0" id="columns" border="2">

                                        <tr>

                                        <%For colunas = 1 to 3%>

                                                <td>

                                                <%

                                                For y = 1 to DIVISAO

                                                %>

                                                <div class="portlet">

                                                <div id="boxMiniFeed">

                                                <a href="java script:void(0)"><img src="../imgs/icon_x_blue.gif" width="8" height="8" alt="FECHAR FEED" title="FECHAR FEED" /></a>

                                                <img src="../imgs/plasicon_feed.gif" height="25" width="25" alt="Meus Feeds" style="float:left; margin:0 5px 0 0;" />

                                                        <div id="news<%=TB("ID_CANAL")%>">

                                                                <script language="javascript">getNoticias("int_list_news.asp?IDL=<%=TB("ID_CANAL")%>", "news<%=TB("ID_CANAL")%>");</script>

                                                        </div>

                                                </div>

                                                </div>

                                                <%

                                                TB.MoveNext

                                                Next

                                               

                                                do while not TB.EOF

                                                %>

                                                <div class="portlet">

                                                <div id="boxMiniFeed">

                                                <a href="java script:void(0)"><img src="../imgs/icon_x_blue.gif" width="8" height="8" alt="FECHAR FEED" title="FECHAR FEED" /></a>

                                                <img src="../imgs/plasicon_feed.gif" height="25" width="25" alt="Meus Feeds" style="float:left; margin:0 5px 0 0;" />

                                                        <div id="news<%=TB("ID_CANAL")%>">

                                                                <script language="javascript">getNoticias("int_list_news.asp?IDL=<%=TB("ID_CANAL")%>", "news<%=TB("ID_CANAL")%>");</script>

                                                        </div>

                                                </div>

                                                </div>

                                                <%

                                                TB.movenext : loop

                                                %>

                                                </td>

                                        <%Next%>

                                        </tr>

                                </table>

 

Mas deu pau... ele desarruma todos os registros deixando eles na vertical e dando pau em um deles...

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que significa "deu pau" nesse caso? Exibiu alguma mensagem de erro? Verifique no código fonte do html se não aparece alguma mensagem de erro nele perdida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que significa "deu pau" nesse caso? Exibiu alguma mensagem de erro? Verifique no código fonte do html se não aparece alguma mensagem de erro nele perdida.

então, se eu faço do modo que coloquei acima, ele mostra os 7 registros existentes, mas um embaixo do outro (ao inves de montar a tabela com 3 celulas)... soh que tbm aparece um 8º quadro, do lado do primeiro, mas ele nao carrega nada.. carrega apenas o erro:

ADODB.Field error '80020009'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

/concepcao/labiz2/nav/int_noticias.asp, line 0

 

Esse erro normalmente ocorre quando não existem registros certo?

 

Da outra maneira aparece da maneira correta, mas faltando alguns registros (quando o count não é divisivel por 3)... e dessa vez aparece os 7 registros, mas um embaixo do outro, e com um 8º quadro com a falha...

Compartilhar este post


Link para o post
Compartilhar em outros sites

No lugar do laço Do While use While/Wend e veja se rola. Se não funcionar partiremos para outra solução (até um pouco melhor)

Compartilhar este post


Link para o post
Compartilhar em outros sites

No lugar do laço Do While use While/Wend e veja se rola. Se não funcionar partiremos para outra solução (até um pouco melhor)

Putz, usando wend deu o mesmo erro exatamente igual que passei acima...

 

coloquei:

while not TB.EOF

e fechei com:

TB.movenext : wend

 

e deu exatamente o mesmo erro, mostrando os 7 registros na vertical... do lado do primeiro aparece um outro registro inexistente com a falha citada acima.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha ai pessoal,

 

se deixo meu código assim:

<%
				TB.Close
				Set TB_COUNT = Server.CreateObject("ADODB.RecordSet")
				TB_COUNT.CursorLocation = 3
				TB_COUNT.CursorType = 3
		
				SQL = "SELECT ID_CANAL, ID_USUARIO FROM TBL_NOTICIAS_CANAIS_USUARIOS WHERE ID_USUARIO = "&var_idUser
				TB.Open SQL, Conn
		
				SQL = "SELECT COUNT(ID_CANAL) AS TOTAL FROM TBL_NOTICIAS_CANAIS_USUARIOS WHERE ID_USUARIO = "&var_idUser
				TB_COUNT.Open SQL, Conn
		
				DIVISAO = Cint(TB_COUNT("TOTAL") / 3)
				DIVISAO2 = DIVISAO + DIVISAO
				%>
				
				<table cellspacing="0" id="columns" border="2">
					<tr>
					<%For colunas = 1 to 3%>
						<td>
						<%
						For y = 1 to DIVISAO
						%>
						<div class="portlet">
						<div id="boxMiniFeed">
						<a href="int_feeds_news_acoes.asp?IDC=<%=TB("ID_CANAL")%>" target="frameaction" onClick="java script:return confirm('Você realmente deseja excluir este feed?');"><img src="../imgs/icon_x_blue.gif" width="8" height="8" alt="FECHAR FEED" title="FECHAR FEED" /></a>
						<img src="../imgs/plasicon_feed.gif" height="25" width="25" alt="Meus Feeds" style="float:left; margin:0 5px 0 0;" />
							<div id="news<%=TB("ID_CANAL")%>">
								<script language="javascript">getNoticias("int_list_news.asp?IDL=<%=TB("ID_CANAL")%>", "news<%=TB("ID_CANAL")%>");</script>
							</div>
						</div>
						</div>
						<%
						TB.MoveNext
						Next

						%>
						</td>
						<%Next%>
					</tr>
				</table>

ele deixa o posicionamento correto (apenas 3 celulas e os registros sendo distribuidos dentro... como se fossem 3 colunas)... mas daí nao aparecem os registros que nao sao divisiveis por 3... quanto tem 5 registros ele dah pau no suposto 6º registro (que nao existe).. o pau eh o que citei nos posts acima...

 

se existem 6 registros, nao ha falhas.. se existem 7, ele simplesmente nao mostra o 7º, ou seja, preciso fazer um calculo para que ele pare de dar pau nos registros nao divisiveis por 3...

 

dai tentei assim:

<%
				TB.Close
				Set TB_COUNT = Server.CreateObject("ADODB.RecordSet")
				TB_COUNT.CursorLocation = 3
				TB_COUNT.CursorType = 3
		
				SQL = "SELECT ID_CANAL, ID_USUARIO FROM TBL_NOTICIAS_CANAIS_USUARIOS WHERE ID_USUARIO = "&var_idUser
				TB.Open SQL, Conn
		
				SQL = "SELECT COUNT(ID_CANAL) AS TOTAL FROM TBL_NOTICIAS_CANAIS_USUARIOS WHERE ID_USUARIO = "&var_idUser
				TB_COUNT.Open SQL, Conn
		
				DIVISAO = Cint(TB_COUNT("TOTAL") / 3)
				DIVISAO2 = DIVISAO + DIVISAO
				%>
				
				<table cellspacing="0" id="columns" border="2">
					<tr>
					<%For colunas = 1 to 3%>
						<td>
						<%
						For y = 1 to DIVISAO
						%>
						<div class="portlet">
						<div id="boxMiniFeed">
						<a href="int_feeds_news_acoes.asp?IDC=<%=TB("ID_CANAL")%>" target="frameaction" onClick="java script:return confirm('Você realmente deseja excluir este feed?');"><img src="../imgs/icon_x_blue.gif" width="8" height="8" alt="FECHAR FEED" title="FECHAR FEED" /></a>
						<img src="../imgs/plasicon_feed.gif" height="25" width="25" alt="Meus Feeds" style="float:left; margin:0 5px 0 0;" />
							<div id="news<%=TB("ID_CANAL")%>">
								<script language="javascript">getNoticias("int_list_news.asp?IDL=<%=TB("ID_CANAL")%>", "news<%=TB("ID_CANAL")%>");</script>
							</div>
						</div>
						</div>
						<%
						TB.MoveNext
						Next
											   
						while not TB.EOF
						%>
						<div class="portlet">
						<div id="boxMiniFeed">
						<a href="int_feeds_news_acoes.asp?IDC=<%=TB("ID_CANAL")%>"><img src="../imgs/icon_x_blue.gif" width="8" height="8" alt="FECHAR FEED" title="FECHAR FEED" /></a>
						<img src="../imgs/plasicon_feed.gif" height="25" width="25" alt="Meus Feeds" style="float:left; margin:0 5px 0 0;" />
							<div id="news<%=TB("ID_CANAL")%>">
								<script language="javascript">getNoticias("int_list_news.asp?IDL=<%=TB("ID_CANAL")%>", "news<%=TB("ID_CANAL")%>");</script>
							</div>
						</div>
						</div>
						<%
						TB.movenext : wend
						%>
						</td>
						<%Next%>
					</tr>
				</table>

ou seja, coloquei mais um while embaixo para mostrar o restante dos registros.. dai ele mostra todos, mas acaba com o posicionamento, deixando todos na mesma celula, ficando um embaixo do outro, todos na vertical.. e do lado la do primeiro registro, aparece um do lado dando pau, como se fosse um registro fantasma... esse pau eh o que citei nos posts acima...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cesão, tem como postar o link online para que possamos ver?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cesão, tem como postar o link online para que possamos ver?

Ok, vou mandar o endereço, login e senha do sistema para você por MP!!

Não posso colocar aqui porque o projeto não vai ser público...

 

mas apenas para explicar:

quando você entrar no sistema, entrará direto na página onde ele mostra os feeds... você verá que poderá arrastá-los para mudar de posição... eu selecionei 8 para você... você verá que não terão 8 quadros, e sim 9, dando falha no último, já que esse não existe... depois que você ver os 9, clique no X de algum deles para retirar, ou seja, ficarão 7, mas você verá que não mostrará 7, e sim 6, sem dar falha em nenhum...

 

Estou enviando as informações por MP então...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, vamos ver alguma coisa aqui:

ASP
<%

                TB.Close

                Set TB_COUNT = Server.CreateObject("ADODB.RecordSet")

                TB_COUNT.CursorLocation = 3

                TB_COUNT.CursorType = 3

       

                SQL = "SELECT ID_CANAL, ID_USUARIO FROM TBL_NOTICIAS_CANAIS_USUARIOS WHERE ID_USUARIO = "&var_idUser

                TB.Open SQL, Conn

       

                SQL = "SELECT COUNT(ID_CANAL) AS TOTAL FROM TBL_NOTICIAS_CANAIS_USUARIOS WHERE ID_USUARIO = "&var_idUser

                TB_COUNT.Open SQL, Conn

       

                DIVISAO = Cint(TB_COUNT("TOTAL") / 3)

                DIVISAO2 = DIVISAO + DIVISAO

                %>

               

                <table cellspacing="0" id="columns" border="2">

                    <tr>

                    <%For colunas = 1 to 3%>

                        <td>

                        <%

                        For y = 1 to DIVISAO

                        IF NOT TB.EOF Then

                        %>

                        <div class="portlet">

                        <div id="boxMiniFeed">

                        <a href="int_feeds_news_acoes.asp?IDC=<%=TB("ID_CANAL")%>" target="frameaction" onClick="java script:return confirm('Você realmente deseja excluir este feed?');"><img src="../imgs/icon_x_blue.gif" width="8" height="8" alt="FECHAR FEED" title="FECHAR FEED" /></a>

                        <img src="../imgs/plasicon_feed.gif" height="25" width="25" alt="Meus Feeds" style="float:left; margin:0 5px 0 0;" />

                            <div id="news<%=TB("ID_CANAL")%>">

                                <script language="javascript">getNoticias("int_list_news.asp?IDL=<%=TB("ID_CANAL")%>", "news<%=TB("ID_CANAL")%>");</script>

                            </div>

                        </div>

                        </div>

                        <%

                        TB.MoveNext

                        End IF

                        Next

                        If Not TB.EOF Then

                        while not TB.EOF

                        %>

                        <div class="portlet">

                        <div id="boxMiniFeed">

                        <a href="int_feeds_news_acoes.asp?IDC=<%=TB("ID_CANAL")%>"><img src="../imgs/icon_x_blue.gif" width="8" height="8" alt="FECHAR FEED" title="FECHAR FEED" /></a>

                        <img src="../imgs/plasicon_feed.gif" height="25" width="25" alt="Meus Feeds" style="float:left; margin:0 5px 0 0;" />

                            <div id="news<%=TB("ID_CANAL")%>">

                                <script language="javascript">getNoticias("int_list_news.asp?IDL=<%=TB("ID_CANAL")%>", "news<%=TB("ID_CANAL")%>");</script>

                            </div>

                        </div>

                        </div>

                        <%

                        TB.movenext : wend

                        End IF

                        %>

                        </td>

                        <%Next%>

                    </tr>

                </table>

Testa com essas alterações, acrescentei uns IF's para testar ali.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.