¿Bucles?, no gracias!!!

20/10/2003 - 13:55 por dgironal | Informe spam
Muy buenas, quizás alguien pueda orientarme.
Necesito almacenar en una tabla (temporal) una serie de registro que
previamente almaceno en otra tabla de la siguiente manera

TablaOrigen
Id Imprimir Etiquetas
x TRUE 2
y TRUE 3
z FALSE 0
t TRUE 1

El id=x se va a imprimir 2 veces
El id=y se va imprimir 3 veces
el id=z no se va imprimir
el id=t se va imprimir 1 veces

En la tabla temporal almaceno los id que se van a imprimir tantas veces como
indique el campo Etiquetas

He de "LLENAR" la TablaDestino de esa forma:
Resultado:

TablaDestino (la temporal)
Articulo
x
x
y
y
y
t

¿Cómo realizarías el proceso de añadir esos registros en la TablaDestino?

La TablaOrigen está preparada, necesito una orientación para cargar la
TablaDestino, he pensado en lo siguiente:

Pseudocódigo

Para cada registro en TablaOrigen
If [Imprimir] =TRUE entonces
For i=0 to Etiquetas-1
AñadeEnTablaTemporal (los datos que me interesen de ese
registro)
Next i
End if
Next OtroRegistro

Pero no parece nada elegente

Gracias!!

Preguntas similare

Leer las respuestas

#1 E.Feijoo
20/10/2003 - 15:18 | Informe spam
Es un método valido, y que además funciona, mejóralo añadiendo un índice para el campo Imprimir, con lo que evitaras recorrer todos los registros..

También puedes cambiarlo aquí, (un leve calculo menos, que los segundos son muy caros)

Antes For i=0 to Etiquetas-1
Después For i=1 to Etiquetas

Un saludo E. Feijoo

"dgironal" escribió en el mensaje news:
| Muy buenas, quizás alguien pueda orientarme.
| Necesito almacenar en una tabla (temporal) una serie de registro que
| previamente almaceno en otra tabla de la siguiente manera
|
| TablaOrigen
| Id Imprimir Etiquetas
| x TRUE 2
| y TRUE 3
| z FALSE 0
| t TRUE 1
|
| El id=x se va a imprimir 2 veces
| El id=y se va imprimir 3 veces
| el id=z no se va imprimir
| el id=t se va imprimir 1 veces
|
| En la tabla temporal almaceno los id que se van a imprimir tantas veces como
| indique el campo Etiquetas
|
| He de "LLENAR" la TablaDestino de esa forma:
| Resultado:
|
| TablaDestino (la temporal)
| Articulo
| x
| x
| y
| y
| y
| t
|
| ¿Cómo realizarías el proceso de añadir esos registros en la TablaDestino?
|
| La TablaOrigen está preparada, necesito una orientación para cargar la
| TablaDestino, he pensado en lo siguiente:
|
| Pseudocódigo
|
| Para cada registro en TablaOrigen
| If [Imprimir] =TRUE entonces
| For i=0 to Etiquetas-1
| AñadeEnTablaTemporal (los datos que me interesen de ese
| registro)
| Next i
| End if
| Next OtroRegistro
|
| Pero no parece nada elegente
|
| Gracias!!
|
|
Respuesta Responder a este mensaje
#2 CarCar
20/10/2003 - 15:23 | Informe spam
Hola:

A mí me parece elegantísima y es la que te hubiera
propuesto yo. No se me ocurre otra más clara y eficaz.

Saludos,
CarCar
MVP-Access


Muy buenas, quizás alguien pueda orientarme.
Necesito almacenar en una tabla (temporal) una serie de


registro que
previamente almaceno en otra tabla de la siguiente manera

TablaOrigen
Id Imprimir Etiquetas
x TRUE 2
y TRUE 3
z FALSE 0
t TRUE 1

El id=x se va a imprimir 2 veces
El id=y se va imprimir 3 veces
el id=z no se va imprimir
el id=t se va imprimir 1 veces

En la tabla temporal almaceno los id que se van a


imprimir tantas veces como
indique el campo Etiquetas

He de "LLENAR" la TablaDestino de esa forma:
Resultado:

TablaDestino (la temporal)
Articulo
x
x
y
y
y
t

¿Cómo realizarías el proceso de añadir esos registros en


la TablaDestino?

La TablaOrigen está preparada, necesito una orientación


para cargar la
TablaDestino, he pensado en lo siguiente:

Pseudocódigo

Para cada registro en TablaOrigen
If [Imprimir] =TRUE entonces
For i=0 to Etiquetas-1
AñadeEnTablaTemporal (los datos que me


interesen de ese
registro)
Next i
End if
Next OtroRegistro

Pero no parece nada elegente

Gracias!!


.

Respuesta Responder a este mensaje
#3 dgironal
20/10/2003 - 16:05 | Informe spam
Gracias por contestar.
Cuando me refería a un método más elegante era por las siguientes cuetiones:

1;-Hacer uso del lenguaje SQL: es decir usar
UPDATE Tabla SET Campo=valor WHERE Condición

En contraposición a:

Cargo RecordSet
For i=0 to NumeroRegistro
IF (se cumple la condición) THEN
CampoParaModificar=NuevoValor
END IF
NEXT i

Personalmente me quedo con la instrucción SQL

2;- Si he de cargar datos es una tabla que provienen de otra/s tabla/a usar
SQL
INSERT FROM

En definitiva usar la noción de conjunto en vez del acceso secuencial
(BUCLES)

El problema que me ha surjido, ¿no es posible solucionarlo de esa manera?
(sin un acceso secuencial registro a registro)
Respuesta Responder a este mensaje
#4 Martín
20/10/2003 - 16:32 | Informe spam
Mi opinión:
Las acciones de Editar o Actualizar, sí las puedes hacer con instrucciones
SQL, pero recorrer una tabla, evaluar uno o varios campos de cada registro y
sobre ellos realizar o no acciones creo que no puede hacerse con SQL...
Sería como devolver "acciones" en vez de registros y encima ir
ejecutandolas... eso puedes hacerlo con ADO o con DAO (con bucles) y
elegantemente... y también mucho mas fiable.

Saludos,
Martín

"dgironal" escribió en el mensaje
news:
Gracias por contestar.
Cuando me refería a un método más elegante era por las siguientes


cuetiones:

1;-Hacer uso del lenguaje SQL: es decir usar
UPDATE Tabla SET Campo=valor WHERE Condición

En contraposición a:

Cargo RecordSet
For i=0 to NumeroRegistro
IF (se cumple la condición) THEN
CampoParaModificar=NuevoValor
END IF
NEXT i

Personalmente me quedo con la instrucción SQL

2;- Si he de cargar datos es una tabla que provienen de otra/s tabla/a


usar
SQL
INSERT FROM

En definitiva usar la noción de conjunto en vez del acceso secuencial
(BUCLES)

El problema que me ha surjido, ¿no es posible solucionarlo de esa manera?
(sin un acceso secuencial registro a registro)


Respuesta Responder a este mensaje
#5 Victor Delgadillo
20/10/2003 - 16:42 | Informe spam
Puedes hacer el bucle con la instruccion Do While IsNot rst.EOF, mas o menos
asi:

Do While NOT rst.EOF (rst es el recordset abierto)
With rst
If !campo = Yes (o cualquier otra cosa) Then
!Otro_Campo = variable
End If
End With
Loop

en este caso el bucle va por toda la tabla abierta en rst (recordset)
buscando cual cumple la igualdad y modificando el o los campos necesarios.

Victor Delgadillo [MVP Access]
Miami, Florida

Consultas al grupo, asi todos nos beneficiamos.

_
"Martín" <centralbib @hotmail.com> wrote in message
news:#
Mi opinión:
Las acciones de Editar o Actualizar, sí las puedes hacer con instrucciones
SQL, pero recorrer una tabla, evaluar uno o varios campos de cada registro


y
sobre ellos realizar o no acciones creo que no puede hacerse con SQL...
Sería como devolver "acciones" en vez de registros y encima ir
ejecutandolas... eso puedes hacerlo con ADO o con DAO (con bucles) y
elegantemente... y también mucho mas fiable.

Saludos,
Martín

"dgironal" escribió en el mensaje
news:
> Gracias por contestar.
> Cuando me refería a un método más elegante era por las siguientes
cuetiones:
>
> 1;-Hacer uso del lenguaje SQL: es decir usar
> UPDATE Tabla SET Campo=valor WHERE Condición
>
> En contraposición a:
>
> Cargo RecordSet
> For i=0 to NumeroRegistro
> IF (se cumple la condición) THEN
> CampoParaModificar=NuevoValor
> END IF
> NEXT i
>
> Personalmente me quedo con la instrucción SQL
>
> 2;- Si he de cargar datos es una tabla que provienen de otra/s tabla/a
usar
> SQL
> INSERT FROM
>
> En definitiva usar la noción de conjunto en vez del acceso secuencial
> (BUCLES)
>
> El problema que me ha surjido, ¿no es posible solucionarlo de esa


manera?
> (sin un acceso secuencial registro a registro)
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida