Ir para conteúdo

POWERED BY:

Arquivado

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

Mauriciodellafina

[Resolvido] Falha função 3 pontinhos

Recommended Posts

Ola galera,

 

Eu já testei vários tipos de função 3 pontinhos, e todos funcionam muito bem mas basta eu colocar a instrução SQL abaixo que começa a dar problema com a quantidade superior a 250 caractares.

 

"SELECT noticia.categoria, noticia.titulo, noticia.foto, noticia.datas, noticia.noticia, noticia.cod, COUNT(coment_noticia.id_comentario) AS total FROM noticia LEFT JOIN coment_noticia ON coment_noticia.codI = noticia.cod WHERE noticia.categoria = 'jornal' GROUP BY noticia.titulo, noticia.foto, noticia.datas, noticia.noticia, noticia.cod, noticia.categoria ORDER BY cod DESC"

 

No momento é essa função, mas já utilizei várias outras:

 

<%
Function resumindos(txt,vCrt)
        vX = Mid(txt, 1, vCrt)
        if NOT Len(txt) <= vCrt then
                resumindos = vX & "..."
        else
                resumindos = vX
        end if
end function
%>

chamo a função assim

 

<%=resumindo(Recordset1.Fields.Item("noticia").Value,500)%>

 

se eu coloco - .value,50 - funciona normalmente, mas passou de 250, some os ... e não aumenta a quantidade de caracteres.

 

Alguém saberia resolver essa bagaça....tks

Compartilhar este post


Link para o post
Compartilhar em outros sites

o nome da função é "resumindos" e vce xamou com "resumindo"

 

Verdade, mas mesmo alterando para resumindos não funciona, só funciona qdo eu altero a instrução SQL somente para chamar a tabela noticia, se eu tento unir com a tabela comente_noticia, dai já não funciona...

karaca, não sei como isso pode interferir numa função...HELP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz um teste assim, com textos maiores que 250 caracteres:

<%
Function resumindos(txt,vCrt)
        vX = Mid(txt, 1, vCrt)
        if NOT Len(txt) <= vCrt then
                resumindos = vX & "..."
        else
                resumindos = vX
        end if
end function

Dim texto

texto = Recordset1.Fields.Item("noticia").Value

Response.Write len(texto) & "<br />"
Response.Write len(resumindos(texto,250))
%>
Posta o resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

se no texto que você quer resumir tiver tags html pode dar coincidencia de cortar o texto antes de fechar uma ou mais tag e ai o browser não sabe o que deve fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz um teste assim, com textos maiores que 250 caracteres:

<%
Function resumindos(txt,vCrt)
        vX = Mid(txt, 1, vCrt)
        if NOT Len(txt) <= vCrt then
                resumindos = vX & "..."
        else
                resumindos = vX
        end if
end function

Dim texto

texto = Recordset1.Fields.Item("noticia").Value

Response.Write len(texto) & "<br />"
Response.Write len(resumindos(texto,250))
%>
Posta o resultado.

 

 

Fiz o teste com essa função e houve a seguinte resposta:

 

255

 

253

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teste com uma SQL simples, retornando apenas o campo de "noticias" de seu BD. Se funcionar normal possivelmente será alguma limitação do "LEFT JOIN".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teste com uma SQL simples, retornando apenas o campo de "noticias" de seu BD. Se funcionar normal possivelmente será alguma limitação do "LEFT JOIN".

 

JÁ FIZ UM TESTE COM SQL SIMPLES, retornando só o campo notícia, assim funciona beleza....mas tem uma solução pra isso, já testei com INNER JOIN e tbm não funcionou....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se era para escrever apenas 250 caracteres, como contou 253?

 

Verifica o que o jonathandj disse no post #5.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entrei por curiosidade nesse tópico, e só agora fui entender que "cargas-dágua" é essa função 3 pontinhos rssss

Cansei de ver tópicos referentes à função 3 pontinhos e ficava curioso pra saber do que se tratava, mas acabava não vendo.

Eu chamava isso de outro nome :D

Limitador de caracteres.

Uso isso pra limitar a quantidade de caracteres de um tópico, pra não extrapolar o tamanho da tabela.

 

:D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu uso a função que eu fiz, tem mais codigo mas não tem o problema que essas mais usadas tem. Ele testa se a palavra vai ser cortada, se for cortada volta para a palavra anterior pra não ultrapassar a quantidade de caracteres. Bom proveito.

'resumirTexto : resume o texto sem cortes. Caso o corte ocorra em uma palavra, ele retorna a um espaço para resumir
'Funções necessárias: limparHtml
Function resumirTexto(entrada, maximoCaracter, link)
 '--[ PARÂMETROS
 '--[ entrada: String contendo o texto a ser testado
 '--[ Link: String html contendo o link para texto completo
 Dim posicao
 Dim posicaoEspacoPalavra
 Dim posicaoEspaco

 entrada = Trim(limparHTML(entrada & "")) 
 If Clng("0" & maximoCaracter) = 0 Then
 posicao = Len(entrada)
 Else
 posicao = maximoCaracter
 End If
 If InStr(Mid(entrada, 1, Len(entrada)), " ") <> 0 Then 
 If Len(entrada) >= posicao + 1 Then 
 If Trim(Mid(entrada, posicao, posicao - 1)) <> " " Then 
 posicaoEspaco = Cint("0" & InStrRev(Mid(entrada, 1, posicao - 1), " ")) 
 If posicaoEspaco <> 0 Then 
 entrada = Trim(Mid(entrada, 1, posicaoEspaco)) & link 
 Else 
 posicaoEspacoPalavra = InStr(Mid(Trim(entrada), 1, Len(entrada)), " ") 
 If (posicaoEspacoPalavra > maximoCaracter) Or maximoCaracter < 1 Then 
 entrada = Trim(Mid(entrada, 1, posicaoEspacoPalavra)) & link 
 ElseIf posicaoEspaco < InStr(Mid(Trim(entrada), 1, posicaoEspacoPalavra), " ") Then 
 entrada = Trim(Mid(entrada, 1, posicao)) & link 
 Else 
 entrada = Trim(Mid(entrada, 1, posicaoEspacoPalavra)) & link 
 End If 
 End If 
 End If 
 End If 
 End If

 resumirTexto = entrada
 
 Set posicao = Nothing
 Set posicaoEspacoPalavra = Nothing
 Set posicaoEspaco = Nothing

End Function
'limparHtml: retirar da string tags HTML
'Funções necessárias: replaceBr
Function limparHtml(strHtml)
 Dim objER
 strHtml = replaceBr(strHtml)
 Set objER = New RegExp
 objER.IgnoreCase = True
 objER.Global = True
 objER.Pattern = "<[^>]*>"
 strHtml = objER.Replace(strHtml, "")
 Set objER = Nothing
 limparHtml = strHtml
End Function

response.write resumirTexto("meu texto vai aqui. ele deve ser resumido sem corte de palavras.", 15, "<a href=""detalhe.asp?codigo=" & rs(0) & """>veja +</a>")

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai galera, já descobri o porque da bagaça não funcionar

é a cláusula GROUP BY.

 

Eu fiz o seguinte teste, retirei a função de resumir e mesmo assim retornou o texto limitado em seu número de caracteres

 

Se houver dúvida daquilo que estou falando faça o seguinte teste

 

Tabela1: id, noticia, titulo

Tabela2: cod, comentario

 

O que dá certo: SQL - SELECT * FROM tabela1

depois chama a noticia, que ela resume beleza

 

o que não dá certo: SQL - SELECT tabela1.noticia, tabela1.titulo, COUNT(tabela2.cod) FROM tabela2 LEFT JOIN tabela1 ON tabela2.cod = tabela1.id GROUP BY tabela1.noticia, tabela1.titulo

 

depois chama a noticia, nem precisa colocar a função que ela já vem limitada em seu número de caracteres....

 

 

KARACA....doidera...ve se tem alguma explicação pra isso...

 

 

Inté

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe .... acho que não escrevi muito claro... é que descobri onde o problema nasce...mas não resolvi o problema... ainda estou esperando alguma solução, ajuda, direcionamento de como fazer.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo usando LEFT JOIN sem a GROUP BY retorna limitado?

 

Qual a estrutura das tabelas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta dessa forma:

SELECT noticia.categoria, noticia.titulo, noticia.foto, noticia.datas, noticia.noticia, noticia.cod, COUNT(noticia.cod) AS total FROM noticia INNER JOIN coment_noticia ON coment_noticia.codI = noticia.cod WHERE noticia.categoria = 'jornal' GROUP BY noticia.titulo, noticia.foto, noticia.datas, noticia.noticia, noticia.cod, noticia.categoria ORDER BY cod DESC

Poste o resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta dessa forma:

SELECT noticia.categoria, noticia.titulo, noticia.foto, noticia.datas, noticia.noticia, noticia.cod, COUNT(noticia.cod) AS total FROM noticia INNER JOIN coment_noticia ON coment_noticia.codI = noticia.cod WHERE noticia.categoria = 'jornal' GROUP BY noticia.titulo, noticia.foto, noticia.datas, noticia.noticia, noticia.cod, noticia.categoria ORDER BY cod DESC

Poste o resultado.

 

Ola Hargon,

 

Não funionou novamente e acho que é pelas seguintes razões:

 

1. Estou querendo que conte a quantidade de comentários relacionados a uma determinada noticia...em função disso acho que deveria contar "coment_noticia.codI;

 

2. A junção feita com INNER JOIN, não me retorna a notícia que não tem comentário, ou seja se não tiver comentário a noticia nem aparece...por isso usei o LEFT ou RIGHT.

 

Eu acredito que exista uma solução, porque já vi sites fazendo o mesmo esquema que quero fazer, mas realmente não estou sabendo como fazer isso...

 

Mas obrigado pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

acrediro que seu problema seja no sql. li rapidamente os posts, espero que tenha entendido o problema. se estiver correto, segue a minha solução:

SELECT n.categoria, n.titulo, n.foto, n.datas, n.noticia, n.cod, ( SELECT COUNT(*) FROM coment_noticia cn WHERE cn.codI = n.cod ) as total FROM noticia n WHERE n.categoria = 'jornal' ORDER BY n.cod DESC
se você quer listar as noticias, independente se tem comentarios, você não poderá fazer join com os comentarios se não ele vai se perder e não vai contar o total de comentario para cdaa noticia. É preciso uma subquery pra isso

Compartilhar este post


Link para o post
Compartilhar em outros sites

acrediro que seu problema seja no sql. li rapidamente os posts, espero que tenha entendido o problema. se estiver correto, segue a minha solução:

SELECT n.categoria, n.titulo, n.foto, n.datas, n.noticia, n.cod, ( SELECT COUNT(*) FROM coment_noticia cn WHERE cn.codI = n.cod ) as total FROM noticia n WHERE n.categoria = 'jornal' ORDER BY n.cod DESC
se você quer listar as noticias, independente se tem comentarios, você não poderá fazer join com os comentarios se não ele vai se perder e não vai contar o total de comentario para cdaa noticia. É preciso uma subquery pra isso

 

Ola jonathandj,

 

Obrigado, agora sim...funcionou perfeitamente...eu utilizei uma outra função de resumir que não corta as palavras e a subquery como sugeriu...segue abaixo como ficou.

 

A FUNÇÃO PARA RESUMIR

=====================

<%
Function Resumindo(Txt, Tam)
Palavras = Split(Txt, " ")
Texto = ""
Comp = 0
For i = 0 To UBound(Palavras)  
Comp = Comp + Len(Palavras(i))  
If i < UBound(Palavras) Then Comp = Comp + 1     
If Comp <= Tam Then        
Texto = Texto & Palavras(i) & " "     
Else        
Texto = Texto & "..."     
Exit For 
End If
Next
Resumindo = Trim(Texto)
End Function
%>

O SQL

=====

 

"SELECT noticia.categoria, noticia.titulo, noticia.foto, noticia.datas, noticia.noticia, noticia.cod, ( SELECT COUNT(*) FROM coment_noticia coment_noticia WHERE coment_noticia.codI = noticia.cod ) as total  FROM noticia  WHERE noticia.categoria = 'jornal' ORDER BY noticia.cod DESC"

Mas uma vez obrigado pela atenção e pela dica.

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.