cancel
Showing results for 
Search instead for 
Did you mean: 

Formula en Campos (Formula Fields)

Former Member
0 Kudos

Hola a todos, tal vez lo que pregunte es algo tonto pero he buscado información y no he encontrado, espero me ayuden.

Tengo una tabla con los siguientes campos:

ide, Campo1, Campo2,.... ,CampoN

El punto es que necesito recorrer los campos con un ciclo para ello, necesito en vez del numero que aparece en el campo poner la variable del ciclo

ejemplo: Sin Ciclo

{vwTabla.Campo1}:= "Informacion"

{vwTabla.Campo2}:= "Informacion"

{vwTabla.Campo3}:= "Informacion"

{vwTabla.Campo4}:= "Informacion"

.

.

{vwTabla.CampoN}:= "Informacion"

Con un ciclo

for i := 1  to N step 1  do

     //Aca el problema

     {vwTabla.Campo[i]}:= "Informacion";

Me genera un error, no se como se puede hacer o tendré que trabajar campo por campo.???

Saludos y Gracias de Antemano

Accepted Solutions (0)

Answers (1)

Answers (1)

former_member413321
Contributor
0 Kudos

Hola, donde lo estas trabajando?

TN, Busqueda formateada, Programacion.

Cada una tiene una solucion.

Debes convertir la instruccion a un string. Y luego ejecutarla para que puedas llamarlo asi.

Former Member
0 Kudos

Alejandro Hola,

Uso esto en Crystal Reports XI, en Formulas de Campo.

Si Observas tenemos nombre de la tabla (Vista en este caso) seguido del nombre de campo, cuando la convierto a String me genera el error.

Acá dejo una imagen para que veas mas detalladamente.

Gracias de antemano

former_member413321
Contributor
0 Kudos

Umm, en Crystal no se puede. Porque el Crystal todo lo liga por el nombre de los campos que el crea.

Cual es el objetivo, y tal vez podemos pensar en otra solucion. Es dinamica la consulta, o son campos fijos?

Former Member
0 Kudos

Bien, Alejandro ni modo.

Son campos fijos. Te explico un poco. como dije arriba una tabla con N campos pero fueron llamados de la siguiente forma Campo1, campo2, campo3, campo4, campo5.........Campo25 por dar un ejemplo, mi objetivo es mas de optimizacion de codigo por que yo puedo acceder a cada uno de ellos por el nombre, he aqui el uso del ciclo y meter el campo con la variable del ciclo me sirviera para trabajar el indice del campo. y en vez de trabajar x lineas de codigo solo unas cuantas con el ciclo..

Gracias, muy Agradecido

former_member413321
Contributor
0 Kudos

La otra opcion es que lo hagas en la vista y lo retornes como una columna.

En la vista si hay manera por ser SQL

Former Member
0 Kudos

Explicate mejor Alejandro porfavor,

Con un pequeño ejemplo talvez!!!

former_member413321
Contributor
0 Kudos

Un ejemplo sería asi.

Create table #Temporal (Campo1 int, Campo2 int, Campo3 int, Campo4 int)

Insert #Temporal Values(1,2,3,4)

Declare @SQL nvarchar(500)

Declare @ParmDefinition nvarchar(500)

Declare @I as int

Declare @Resultado int

Declare @ResultadoFinal int

Set @I = 1

Set @SQL = ''

Set @Resultado = 0

Set @ResultadoFinal = 0

While @I < 5

Begin

     Set @SQL = 'Select @ResultadoOUT = Campo' + convert(varchar,@I) + ' From #temporal'

     SET @ParmDefinition = N'@ResultadoOUT varchar(5) OUTPUT'

     EXECUTE sp_executesql @SQL, @ParmDefinition, @ResultadoOUT=@Resultado OUTPUT

      Set @ResultadoFinal = @ResultadoFinal + @Resultado

     Set @I = @I + 1

End

Select @ResultadoFinal

Drop table #Temporal

este Ejemplo Devuelve el valor contenido en esos campos.

former_member413321
Contributor
0 Kudos

O armar el query por codigo. De esta manera

Create table #Temporal (Campo1 int, Campo2 int, Campo3 int, Campo4 int)

Insert #Temporal Values(1,2,3,4)

Declare @SQL nvarchar(500)

Declare @I as int

Declare @ParmDefinition nvarchar(500)

Declare @ResultadoFinal int

Set @I = 1

Set @SQL = 'Select @ResultadoOUT = '

Set @ResultadoFinal = 0

While @I < 5

Begin

     Set @SQL = @SQL + ' Campo' + convert(varchar,@I) + case when @I < 4 then ' + ' else '' end      Set @I = @I + 1

End

Set @SQL = @SQL + ' From #Temporal'

SET @ParmDefinition = N'@ResultadoOUT varchar(5) OUTPUT'

EXECUTE sp_executesql @SQL, @ParmDefinition, @ResultadoOUT=@ResultadoFinal OUTPUT

Select @ResultadoFinal

Drop table #Temporal

Former Member
0 Kudos

Gracias Alex

former_member413321
Contributor
0 Kudos

Recuerda marcar la respuesta de la pregunta.