Access - Crear record a partir de dos valores en una tabla

 
Vista:

Crear record a partir de dos valores en una tabla

Publicado por Pedro Jimenez (22 intervenciones) el 25/05/2005 23:19:59
Tengo una tabla en la que dos de los campos son fechas, desde y hasta, lo que necesito es que a partir de esas fechas me genere una tabla con un registro para cada dia que haya entre las fechas, ejemplo:

TABLA QUE YA EXITE
ID PRECIO DESDE HASTA PRODUCTO
1 $100 01-Ene-05 02-Ene-05 Libros
2 $105 03-Ene-05 04-Ene-05 Dvd´s

QUIERO QUE ME GENERE LA SIGUIENTE TABAL:
ID PRECIO FECHA PRODUCTO
1 $100 01-Ene-05 Libros
2 $100 02-Ene-05 Libros
3 $105 03-Ene-05 Dvd´s
4 $105 04-Ene-05 Dvd´s

Resumiendo: necesito que la consulta obtenga el rango de dias que hay entre las dos fechas de cada registo y que me gener un nuevo registro para cada uno de los días que existe entre esas fechas, en el ejmplo solo hay dos dias entre cada rango, pero se puede dar el caso que un producto tenga la misma tarifa los 365 dias del año, entonces necesitaria que me generara 365 registros.

Espero haberme explicado y les agradezco su ayuda.

Pedro Jimenez
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Crear record a partir de dos valores en una tab

Publicado por Rafael (19 intervenciones) el 26/05/2005 17:59:01
Lo que tienes que hacer es:
1. Crear la tabla "nueva" con los campos id, fecha, precio y producto (en blanco)
2. En cualquier formulario crear un "Botón de comando" sin codigo (para esto si te sale el "Asistente para botones de comando" le das Cancelar.
3. Le das click derecho al botón que acabas de crear y escoges "Generar evento" y en el siguiente cuadro escoges "Generador de codigo" y se te abre la ventana de codigo... entonces pegas las siguientes lineas que te escribo abajo despues del punto 5.
4. Para que funcione, en la ventana de codigo, en el menú Herramientas>>Referencias debes tener por lo menos las siguientes:
*Visual Basic For Applications
*Microsoft Access 10.0 Object Library (o el de la version que tengas)
*OLE Automation
*Microsoft DAO 3.6 Object Library (o el de la version que tengas)
5. Al final cierrar y ejecutas el formulario y el proceso se hará al hacer click en el botón creado. Las tablas que usa se llaman Existe y Nueva.

Suerte

Dim prec, prod As Variant
Dim INI, FIN As Date
Dim bd As Database
Dim lrec1 As Recordset
Dim lrec2 As Recordset
Set bd = OpenDatabase("c:\carpeta\bd2.mdb", False) 'mi base se llama bd2 y esta en carpeta de c
Set lrec1 = bd.OpenRecordset("SELECT * FROM nueva", dbOpenDynaset) 'Una tabla con los campos id, fecha, precio y producto en blanco
Set lrec2 = bd.OpenRecordset("SELECT * FROM existe")

lrec2.MoveFirst
If lrec2.EOF Then Exit Sub

'INI = lrec2![desde]
'FIN = lrec2![hasta]

Do While Not lrec2.EOF ' Busca el fin del archivo.
INI = lrec2![desde]
FIN = lrec2![hasta]
prec = lrec2![precio]
prod = lrec2![producto]

Do While INI <= FIN
lrec1.AddNew
lrec1!precio = prec
lrec1!FECHA = INI
lrec1!producto = prod
lrec1.Update
INI = DateAdd("d", 1, INI) ' le agrego un dia a la fecha
Loop

lrec2.MoveNext

Loop


lrec1.Close

MsgBox "Proceso terminado"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar