Buscar
   miércoles, 10 de marzo de 2010
  
  
           
 Categorías         
   
           
 Más Visitados  
   
           
 Archivo                
   
           
Mi Blog sobre la web, .NET y DotNetNuke  Mi Blog sobre la web, .NET y DotNetNuke  
01

Hay un error en los Foros de Dotnetnuke que hacen que al pulsar el vínculo "Mis mensajes" o "My Posts" aparezca el siguiente error

A critical error has occurred.
ORDER BY items must appear in the select list if SELECT DISTINCT is specified. 0

Es un problema conocido y antiguo... Hay una solución provisional en esta dirección

 http://support.dotnetnuke.com/issue/ViewIssue.aspx?ID=3690

 

Desde luego la solución no es fácil de aplicar... en cierta ocasión la he recomendado a algún usuario y he terminado haciendolo yo...

 

ATENCIÓN --> ¡ HAZ ANTES UN BACKUP DE LA BASE DE DATOS !

Solo ejecutar este Alter Procedure si no utilizas "Qualifier" en el web.config si utilizas "Qualifier" deberás adaptar los nombres de tus tablas.

 

ALTER PROCEDURE dbo.Forum_SearchGetResults
(
@Filter  nvarchar(500),
@PageIndex int,
@PageSize int,
@UserID  int,
@ModuleID int,
@FromDate datetime,
@ToDate datetime
)
AS
 -- Create a temp table to store the select results
 CREATE TABLE #PageIndex
 (
  IndexID int IDENTITY (1, 1) NOT NULL,
  ThreadID int
 )
 -- Create dynamic SQL to populate temporary table
 DECLARE @sql nvarchar(2000)
 SELECT  @sql = 'INSERT INTO #PageIndex(ThreadID) SELECT DISTINCT(P.ThreadID) CreatedDate ' +  
    'FROM Forum_Posts P ' +
    'INNER JOIN Forum_Threads T ON P.ThreadID = T.ThreadID ' +
    'INNER JOIN Forum_Forums F ON T.ForumID = F.ForumID ' +
    'INNER JOIN Forum_Groups G ON F.GroupID = G.GroupID ' +  
    'INNER JOIN Forum_Posts LP ON T.ThreadID = LP.ThreadID ' +
    'WHERE P.ThreadID = T.ThreadID AND ' +
    'T.ForumID = F.ForumID AND ' +  
    'F.GroupID = G.GroupID ' + 
    'AND P.[CreatedDate] >  ''' + CONVERT(varchar, @FromDate) + ''' ' +
    'AND P.[CreatedDate] < ''' + CONVERT(varchar, @ToDate) + ''' ' +
    'AND P.IsApproved = 1 ' +
    'AND P.IsLocked = 0 ' +
    'AND G.ModuleID = ' + CONVERT(varchar, @ModuleID) + ' AND ' +
  
    '( F.ForumID NOT IN (SELECT ForumID FROM  Forum_PrivateForums) OR ' +
     ' F.ForumID IN ( ' +
      'SELECT ForumID  ' +
      'FROM  Forum_PrivateForums (nolock)  ' +
      'WHERE (RoleID IN (SELECT RoleID FROM  UserRoles WHERE UserID = ' + CONVERT(varchar, @UserID) + ' ) ' +
      'OR EXISTS (SELECT TOP 1 1 FROM  Users WHERE UserID = ' + CONVERT(varchar, @UserID) + '  and IsSuperUser=1))))  ' +
    @Filter + ' GROUP BY P.ThreadID , P.CreatedDate ORDER BY P.ThreadID DESC '
 Print @sql
 EXEC(@sql)
 -- All of the rows are inserted into the table - now select the correct subset
 DECLARE @PageLowerBound int
 DECLARE @PageUpperBound int
 DECLARE @RecordCount int
 -- Set the page bounds
 SET @PageLowerBound = @PageSize * @PageIndex
 SET @PageUpperBound = @PageLowerBound + @PageSize + 1
 SELECT @RecordCount = COUNT(*) FROM #PageIndex

 Print @RecordCount
 -- Select the data out of the temporary table
 -- Select the data out of the temporary table
 SELECT
  PageIndex.ThreadID, 
  P.[Subject],
  P.[CreatedDate],
  FU.[UserID],
  FU.[Alias],
  T.[ForumID],
  T.[Replies],
  T.[Views],
  F.[Name] As ForumName,
  RecordCount = @RecordCount,
  (SELECT Count([ThreadID]) FROM Forum_ThreadRating  WHERE ThreadID = PageIndex.ThreadID) As RatingCount,
  (SELECT AVG([Rate]) FROM Forum_ThreadRating  WHERE ThreadID = PageIndex.ThreadID) As Rating,
  (SELECT Distinct  Count(UserID) FROM Forum_ThreadsRead WHERE ForumID = T.[ForumID] AND UserID = FU.[UserID] AND P.[CreatedDate] > LastPurseDate AND ReadThreads NOT LIKE '%' + CONVERT(varchar, PageIndex.ThreadID) + ';%')  As IsUnRead
 FROM
  Forum_Posts P
  INNER JOIN Forum_Threads T ON P.ThreadID = T.ThreadID
  INNER JOIN Forum_Forums F ON T.ForumID = F.ForumID
  INNER JOIN Forum_Users FU ON P.UserID = FU.UserID, #PageIndex PageIndex
 WHERE
  PageIndex.IndexID > @PageLowerBound AND
  PageIndex.IndexID < @PageUpperBound AND
  PageIndex.ThreadID = P.ThreadID AND 
  FU.[UserID] = P.[UserID] AND
  P.[ThreadID] = T.[ThreadID] AND
  P.[CreatedDate] > @FromDate AND
  P.[CreatedDate] < @ToDate AND
  T.[ForumID] = F.[ForumID] AND
  (P.[CreatedDate] = (SELECT MAX([CreatedDate]) FROM Forum_Posts WHERE ThreadID = PageIndex.ThreadID)) AND
  (F.ForumID NOT IN (SELECT ForumID FROM Forum_PrivateForums) OR
  F.ForumID IN (
   SELECT ForumID
   FROM Forum_PrivateForums
   WHERE (RoleID IN (SELECT RoleID FROM UserRoles WHERE UserID = @UserID)
   OR EXISTS (SELECT TOP 1 1 FROM Users WHERE UserID = @UserID and IsSuperUser=1))))  
 ORDER BY
  P.CreatedDate DESC

 

Publicado en: Dotnetnuke, Módulos DNN

Valoración

Comments

Armando Delgado
# Armando Delgado
viernes, 14 de marzo de 2008 0:59
Excelente !!!, soluciono mi problema.

Gracias ...

Publicar Comentario

Nombre (obligatorio)

Email (obligatorio)

Website

Enter the code shown above:

   

  
  
Términos de Uso   Declaración de Privacidad