cancel
Showing results for 
Search instead for 
Did you mean: 

Querys con tablas de usuarios

Former Member
0 Kudos

Estimados

Alguien sabe por que no se puede usar como condicion los campos de una tabla de usuario en una query?

Por ejemplo tengo esta:

<br>

-


SELECT T2.TransId, T0.RefDate, case when T2.TransType=30 then 'RD'

when T2.TransType=46 then 'PE'

when T2.TransType=24 then 'PR'

when T2.TransType=13 then 'FAC'

when T2.TransType=14 then 'NC'

when T2.TransType=25 then 'DEP'

when T2.TransType=18 then 'FP'

when T2.TransType=19 then 'NCP'

when T2.TransType=59 then 'EM'

when T2.TransType=20 then 'EMP'

when T2.TransType=69 then 'CI'

when T2.TransType=60 then 'SM'

when T2.TransType=67 then 'TS'

when T2.TransType=15 then 'GP'

when T2.TransType=58 then 'RD'

else T2.TransType end as [Tipo Doc.], T2.BaseRef, T0.Account,T1.FormatCode, T1.AcctName, T0.Debit, T0.Credit, T0.SYSDeb,T0.SYSCred,T0.FCDebit, T0.FCCredit, T0.FCCurrency, T0.DueDate, T0.LineMemo, T0.U_MMM_NumPers,T3.Name as Nombre, T5.[GroupName], 'C4' as C4, 'c5' as C5

FROM [dbo].[JDT1] T0

INNER JOIN [dbo].[OACT] T1 ON T0.Account = T1.AcctCode

INNER JOIN [dbo].[OJDT] T2 ON T0.TransId = T2.TransId

left JOIN [@MMM_NUMPERS] T3 ON T0.U_MMM_NumPers = T3.Code

left join OCRD T4 on (substring(T4.CardCode,1,8)=T0.U_MMM_NumPers or substring(T4.CardCode,1,7)=T0.U_MMM_NumPers)

left JOIN OCRG T5 ON T5.GroupCode = T4.GroupCode

WHERE ((T0.U_MMM_NumPers ='[%0]' and '[%0]'<>'') or '[%0]'='') and ((T1.FormatCode like '%%[%2]%%' and '[%2]'<>'') or '[%2]'='') and T0.RefDate between [%3] and [%4] and ((T5.[GroupName] ='[%5]' and '[%5]'<>'') or '[%5]'='') and T1.U_NPersona='Si'

order by T0.U_MMM_NumPers, T0.Debit, T0.Credit

-


<br>

Si trato de preguntar en el where por T3.Name=[%0], me arroja un error.

Todos los usuarios me reclaman que tiene que aprenderse los codigos y la verdad si son tablas grandes no tiene mucha gracia.

Alguien sabe como puede resolver esto?

Gracias

Edited by: Claudio Guerra on Jan 7, 2010 6:42 PM

Accepted Solutions (0)

Answers (5)

Answers (5)

Former Member
0 Kudos

Hola Claudio,

el código que puse es complicado, es una vista completa creada para

un cliente, que da un ejemplo completo.

Si tienes vistas simples, no vas a tener problemas con las

consultas. Este tipo de "errores" o funcionamiento no adecuado de

los parámetros se da cuando las vistas son "complicadas"...

Para tu consulta anterior se debería crear la vista de esta

forma:

/SELECT FROM [[dbo]].[[@MMM_NumPers]] T10/

DECLARE @Customer1 AS char(100)

/* WHERE */

SET @Customer1 = /* t10.Name */ '[[%0]]'

SELECT *

FROM [[dbo]].[[@MMM_NumPers]]

WHERE [[dbo]].[[@MMM_NumPers]].Name = @Customer1

O sea:

1) primero entre barras y asteriscos ponerle un alias a la tabla

/SELECT FROM [[dbo]].[[@MMM_NumPers]] T10/

2) declarar una variable (del tipo correcto)

DECLARE @Customer1 AS char(100)

3) el where entre barras y asteriscos

/* WHERE */

4) setear-direccionar-asignar a la variable el campo que corresponda

al parametro

SET @Customer1 = /* t10.Name */ '[[%0]]'

5) la consulta en si, utilizando el filtro que necesitamos.

SELECT *

FROM [[dbo]].[[@MMM_NumPers]]

WHERE [[dbo]].[[@MMM_NumPers]].Name = @Customer1

Espero sea de tu ayuda.

Former Member
0 Kudos

Muchas Gracias por sus respuestas, me salvaron mucho.

Efectivamente el problema era el tema del [dbo].[...]

Me faltaba colocarle el dbo entre corchetes y los corchetes a todas las tablas.

Gracias

angeles804
Active Contributor
0 Kudos

Es un format search, entonces debe de ser donde lo estas colocando en el query manager y tu usuario tiene permiso para ejecutar este query. será eso?.

Former Member
0 Kudos

No es un format search es una simple query a una tabla de usuario ocupando el campo name como filtro.

Lo estoy ejecutando con manager

A uds les funciona hacer algo como lo que mande sobre una tabla de usuario?

angeles804
Active Contributor
0 Kudos

Es un format search, entonces debe de ser donde lo estas colocando en el query manager y tu usuario tiene permiso para ejecutar este query. será eso?.

Former Member
0 Kudos

Buenas tardes Claudio, nosotros encontramos que en ciertas ocaciones las consultas no

funcionan en forma correcta y no por utiliizar tablas de usuario, sino cuando son "algo"

complicadas. Es como que no las puede resolver si existen parametros del tipo %.

Para solucionar esto utilizamos declaración de variables de la forma en que te paso en el

ejemplo de mas abajo.

Es algo complejo pero de esta forma funciona correctamente.

Un saludo y espero que te sea de utilidad.

/SELECT FROM .[OCRD] T10/

DECLARE @Customer1 AS char(100)

/* WHERE */

SET @Customer1 = /* t10.CardCode */ '[%0]'

/SELECT FROM .[OCRD] T10/

DECLARE @Customerf1 AS char(100)

/* WHERE */

SET @Customerf1 = /* t10.CardCode */ '[%1]'

/SELECT FROM .[OINV] T0/

DECLARE @desde AS datetime

/* WHERE */

SET @desde = /* t0.DocDate */ '[%2]'

/SELECT FROM .[OINV] T0/

DECLARE @hasta AS datetime

/* WHERE */

SET @hasta = /* t0.DocDate */ '[%3]'

/SELECT FROM .[@FGIFAM] T11/

DECLARE @FamDesde AS char(100)

/* WHERE */

SET @FamDesde = /* t11.Code */ '[%4]'

/SELECT FROM .[@FGIFAM] T11/

DECLARE @FamHasta AS char(100)

/* WHERE */

SET @FamHasta = /* t11.Code */ '[%5]'

/SELECT FROM .[OITB] T13/

DECLARE @MarcaDesde AS int

/* WHERE */

SET @MarcaDesde = /* t13.ItmsGrpCod */ '[%6]'

/SELECT FROM .[OITB] T13/

DECLARE @MarcaHasta AS int

/* WHERE */

SET @MarcaHasta = /* t13.ItmsGrpCod */ '[%7]'

select Codigo, Cliente, sum(Venta) as Venta, sum() as ,

sum() as , sum(Comision) as Comision, sum() as

from (

SELECT T0.CardCode as , T0.CardName as ,

sum(T1.U_FGIAGRIM) as , SUM(T1.GrssProfSC) AS ,

sum((T0.DiscPrcnt* T1.U_FGIAGRIM)/100) as ,

sum((T1.U_FGICOM* T1.U_FGIAGRIM)/100) as ,

sum(T1.GrssProfSC) -sum((T0.DiscPrcnt* T1.U_FGIAGRIM)/100)-sum((T1.U_FGICOM* T1.U_FGIAGRIM)/100) as

FROM OINV T0 INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry

INNER JOIN OITM T2 ON T1.ItemCode = T2.ItemCode

where (t0.CardCode >= @Customer1 or @Customer1 = '') and (t0.CardCode <= @Customerf1 or @Customerf1 = '') and

(t0.DocDate >= @desde or @desde = '') and (t0.DocDate <= @hasta or @hasta = '') and

(t2.U_FGIFAM >= @FamDesde or @FamDesde = '')and (t2.U_FGIFAM <= @FamHasta or @FamHasta = '') and

(t2.ItmsGrpCod >= @MarcaDesde or @MarcaDesde = '') and (t2.ItmsGrpCod <= @MarcaHasta or @MarcaHasta = '')

GROUP BY T0.CardCode, T0.CardName

union all

SELECT T0.CardCode as , T0.CardName as ,

-sum(T1.U_FGIAGRIM) as , -SUM(T1.GrssProfSC) AS ,

sum((T0.DiscPrcnt* T1.LineTotal)/100) as ,

-sum((T1.U_FGICOM* T1.U_FGIAGRIM)/100) as , -sum(T1.GrssProfSC)

-sum((T0.DiscPrcnt* T1.U_FGIAGRIM)/100)-sum((T1.U_FGICOM* T1.U_FGIAGRIM)/100) as

FROM ORIN T0 INNER JOIN RIN1 T1 ON T0.DocEntry = T1.DocEntry

INNER JOIN OITM T2 ON T1.ItemCode = T2.ItemCode

where (t0.CardCode >= @Customer1 or @Customer1 = '') and (t0.CardCode <= @Customerf1 or @Customerf1 = '') and

(t0.DocDate >= @desde or @desde = '') and (t0.DocDate <= @hasta or @hasta = '') and

(t2.U_FGIFAM >= @FamDesde or @FamDesde = '') and (t2.U_FGIFAM <= @FamHasta or @FamHasta = '') and

(t2.ItmsGrpCod >= @MarcaDesde or @MarcaDesde = '') and (t2.ItmsGrpCod <= @MarcaHasta or @MarcaHasta = '')

GROUP BY T0.CardCode, T0.CardName) as T10

group by Codigo, Cliente

Former Member
0 Kudos

Nestor no entendi mucho el codigo que me pusiste.

Como llenas las variables declaradas?

Por ejemplo algo tan simple como esto

select TOP 1 @NumPers=T4.Code from [@MMM_NumPers] T4 where T4.Name='[%0]'

siendo [@MMM_NumPers] una tabla de usuario que solo tiene Code, Name y quiero que me muestre al filtrar los Nombres

Alquien sabe como hacerlo?

former_member188440
Active Contributor
0 Kudos

.

former_member188440
Active Contributor
0 Kudos

No entiendo porque no pueda funcionarte

este simple query lo corri para traer los proyectos por usuario de sbo que se tienen definidos en una tabla de usuarios


SELECT *  FROM [dbo].[@TMP_PYT]  T0 WHERE T0.[U_USER] =[%0]

Lo que si veo en el codigo del primer post, es que te faltan datos en el FROM , cuando se refiere a una tabla de usuario, por ejemplo el [dbo]. (punto)

Prueba meter asi el codigo, separando las tablas de usuario como lo puse aqui.


[dbo].[@tabla_de_usuario] T0

former_member188440
Active Contributor
0 Kudos

Que error te marca?? nosotros usamos muchas validaciones de tablas de usuario para busquedas formateadas, que error es?

Former Member
0 Kudos

No sale ningun error claro. Muestra los tipicos mensajes sin sentido que tira cuando ejecutas la query, por ejemplo

<bR>

'Contratos de Servicios' OCRT

ese mensaje sale. No tiene nada que ver porque no se utiliza esa tabla

<BR>

En las consultas formateadas no es el problemas, si no que en las querys para informes del query manager.

former_member188440
Active Contributor
0 Kudos

Si ese tipo de errores arroja el Query Manager, pero antes de eso de Contratos de Servicios, debe arrojar algun texto que comienza con MSSQL Server...............

Que luego son errores de sintaxis , etc.

Former Member
0 Kudos

No arroja ningun error antes de ese.

Presiono el boton ejecutar y sale de inmediato el error. Es como que no puede levantar la pantalla de filtros

Tu puedes hacer la prueba simple, tratando de buscar por el campo name usandolo como filtro?