consulta dbf transponer datos

14/03/2005 - 18:23 por fredy | Informe spam
hola grupo tengo la siguiente situacion:
estoy haciendo una consulta a dos bases de datos obteniendo los resultados
esperados ( gracias a Manuel y KL) estos datos estan en la hoja "C_pla_pun"
lo siguiente que quiero hacer es otra consulta para cada uno de los registros
de la hoja "C_pla_pun", pero esta vez transponiendo los datos es decir los
datos que obtengo de otra consulta y que pongo en la hoja "C_adiciona"( no
mas de 10 registros)pegarlos a cada registro de la hoja "C_pla_pun",
actualmente lo estoy haciendo con el siguiente codigo ( pero es super lento)

Sub datos_adiciona()
Application.ScreenUpdating = False
Application.EnableEvents = False

cn.Open "Driver={Microsoft dBASE Driver
(*.dbf)};DriverID'7;Dbq=C:\BORREME\2;"

Sheets("C_ADICIONA").Select
For i = 2 To 8000
MATRICULA = Sheets("c_pla_pun").Cells(i, 1)
FACTURA = Sheets("c_pla_pun").Cells(i, 3)

rs.Open "select adiciona.ADI_MATR,
adiciona.ADI_NFAC,adiciona.ADI_CODI,adiciona.ADI_VALO" & Chr(13) & "" &
Chr(10) & "FROM adiciona adiciona" & Chr(13) & "" & Chr(10) &
"WHERE(adiciona.ADI_MATR='" & MATRICULA & "') AND (adiciona.ADI_NFAC=" &
FACTURA & ")", cn, adlockoptimistic, adcmdtext

Range("A1").CopyFromRecordset rs

Sheets("c_adiCiona").Range("C1:C10).Copy
Sheets("c_pla_pun").Cells(i, 26).PasteSpecial Paste:=xlValues, Transpose:=True
Sheets("c_adiCiona").Range("D1:D10).Copy
Sheets("c_pla_pun").Cells(i, 36).PasteSpecial Paste:=xlValues, Transpose:=True
Sheets("c_adiCiona").Cells.Clear
rs.Close

Next i

cn.Close
End Sub

existe alguna forma de agilizar este proceso
es posible algo como copyfromrecordset ( pero transponerlo) los campos que
necesito de la tabla "adiciona" son adiciona.ADI_CODI adiciona.ADI_VALO, por
cada matricula y factura, la tabla adiciona puede devolver hasta 15 registros
estos son los que necesito transponer en la hoja "C_pla_pun", para la
matricula seleccionada

muchas gracias por su ayuda :B

Preguntas similare

Leer las respuestas

#6 fredy
17/03/2005 - 23:59 | Informe spam
hola KL , el error eran unos campos con #n/a

115190 78 56 3000 #N/A #N/A #N/A
115190 78 27 8247 #N/A #N/A #N/A
115190 78 39 172 #N/A #N/A #N/A
115190 78 28 0 #N/A #N/A #N/A
cuando los resultados debian ser

20041202 115190 63 78 -4
20041202 115190 41 78 37946
20041202 115190 40 78 0
20041202 115190 28 78 0
20041202 115190 39 78 172
20041202 115190 27 78 8247
20041202 115190 56 78 3000

oye aprovecho al mostrar estos resultados una consulta adicional, resulta
que la consulta me arroja los resultados dobles es decir:

20041202 115190 63 78 -4
20041202 115190 41 78 37946
20041202 115190 40 78 0
20041202 115190 28 78 0
20041202 115190 39 78 172
20041202 115190 27 78 8247
20041202 115190 56 78 3000
20041202 115190 63 78 -4
20041202 115190 41 78 37946
20041202 115190 40 78 0
20041202 115190 28 78 0
20041202 115190 39 78 172
20041202 115190 27 78 8247
20041202 115190 56 78 3000
cuando deberia ser
20041202 115190 63 78 -4
20041202 115190 41 78 37946
20041202 115190 40 78 0
20041202 115190 28 78 0
20041202 115190 39 78 172
20041202 115190 27 78 8247
20041202 115190 56 78 3000

que e el mismo recordset pero duplicado ( no pasa en todos ) a que puede
deberse?

gracias! ;D
"KL" wrote:

fredy,

?que error te daba?

KL

"fredy" wrote in message
news:
> hola kl
> no me funciono tu ultima sugerencia , a ver te cuento que resultado
> obtengo
> con mi macro
> 069270 79 56 23300
> 069270 79 63 -3
> 069270 79 31 46310
>
> yo quiero que me devuelva
>
> 069270 79 56 63 31 23300 -3 46310
>
> esto es posible?
>
> "KL" escribió:
>
>> Hola fredy,
>>
>> Creo q deberias definir la variable MiRango. Para esto deberias
>> establecer
>> un rango de iguales dimensiones q el recordset (haria falta saber el
>> numero
>> de filas y de columnas de antemano), p.ej:
>>
>> With Sheets("Hoja1")
>> Set
>> MiRango=.Range(.Cells(1,1),.Cells(rs.Fields.Count,rs.RecordCount))
>> End With
>>
>> Ojo - lo estoy haciendo todo desde la memoria por que de momento no tengo
>> acceso a Excel.
>>
>> Saludos,
>> KL
>>
>> "fredy" wrote in message
>> news:
>> > sale un error ( variable del objeto o bloque with no estableido) y
>> > marca
>> > con
>> > amarillo la linea
>> >
>> > MiRango.Value = Application.WorksheetFunction.Transpose(MiMatriz)
>> >
>> > que debo hacer? : o
>> >
>> > "KL" escribió:
>> >
>> >> Hola Fredy,
>> >>
>> >> He estado pensando (aunque no he tenido ocasion para experimentar con
>> >> esto)
>> >> ?que pasaria si pasaras el recordset a una matriz y la traspusieras
>> >> usando
>> >> la funcion de hoja de calculo, algo como:
>> >>
>> >> Dim MiMatriz As Variant
>> >> Dim MiRango As Range
>> >> Dim rs As New ADODB.Recordset
>> >>
>> >> MiMatriz=rs.GetRows
>> >> MiRango.Value=Application.WorksheetFunction.Transpose(MiMatriz)
>> >>
>> >> Saludos,
>> >> KL
>> >>
>> >>
>> >> "fredy" wrote in message
>> >> news:
>> >> > hola grupo tengo la siguiente situacion:
>> >> > estoy haciendo una consulta a dos bases de datos obteniendo los
>> >> > resultados
>> >> > esperados ( gracias a Manuel y KL) estos datos estan en la hoja
>> >> > "C_pla_pun"
>> >> > lo siguiente que quiero hacer es otra consulta para cada uno de los
>> >> > registros
>> >> > de la hoja "C_pla_pun", pero esta vez transponiendo los datos es
>> >> > decir
>> >> > los
>> >> > datos que obtengo de otra consulta y que pongo en la hoja
>> >> > "C_adiciona"( no
>> >> > mas de 10 registros)pegarlos a cada registro de la hoja "C_pla_pun",
>> >> > actualmente lo estoy haciendo con el siguiente codigo ( pero es
>> >> > super
>> >> > lento)
>> >> >
>> >> > Sub datos_adiciona()
>> >> > Application.ScreenUpdating = False
>> >> > Application.EnableEvents = False
>> >> >
>> >> > cn.Open "Driver={Microsoft dBASE Driver
>> >> > (*.dbf)};DriverID'7;Dbq=C:\BORREME\2;"
>> >> >
>> >> > Sheets("C_ADICIONA").Select
>> >> > For i = 2 To 8000
>> >> > MATRICULA = Sheets("c_pla_pun").Cells(i, 1)
>> >> > FACTURA = Sheets("c_pla_pun").Cells(i, 3)
>> >> >
>> >> > rs.Open "select adiciona.ADI_MATR,
>> >> > adiciona.ADI_NFAC,adiciona.ADI_CODI,adiciona.ADI_VALO" & Chr(13) &
>> >> > "" &
>> >> > Chr(10) & "FROM adiciona adiciona" & Chr(13) & "" & Chr(10) &
>> >> > "WHERE(adiciona.ADI_MATR='" & MATRICULA & "') AND
>> >> > (adiciona.ADI_NFAC="
>> >> > &
>> >> > FACTURA & ")", cn, adlockoptimistic, adcmdtext
>> >> >
>> >> > Range("A1").CopyFromRecordset rs
>> >> >
>> >> > Sheets("c_adiCiona").Range("C1:C10).Copy
>> >> > Sheets("c_pla_pun").Cells(i, 26).PasteSpecial Paste:=xlValues,
>> >> > Transpose:=True
>> >> > Sheets("c_adiCiona").Range("D1:D10).Copy
>> >> > Sheets("c_pla_pun").Cells(i, 36).PasteSpecial Paste:=xlValues,
>> >> > Transpose:=True
>> >> > Sheets("c_adiCiona").Cells.Clear
>> >> > rs.Close
>> >> >
>> >> > Next i
>> >> >
>> >> > cn.Close
>> >> > End Sub
>> >> >
>> >> > existe alguna forma de agilizar este proceso
>> >> > es posible algo como copyfromrecordset ( pero transponerlo) los
>> >> > campos
>> >> > que
>> >> > necesito de la tabla "adiciona" son adiciona.ADI_CODI
>> >> > adiciona.ADI_VALO,
>> >> > por
>> >> > cada matricula y factura, la tabla adiciona puede devolver hasta 15
>> >> > registros
>> >> > estos son los que necesito transponer en la hoja "C_pla_pun", para
>> >> > la
>> >> > matricula seleccionada
>> >> >
>> >> > muchas gracias por su ayuda :B
>> >>
>> >>
>> >>
>>
>>
>>



Respuesta Responder a este mensaje
#7 KL
18/03/2005 - 00:34 | Informe spam
Hola fredy,

115190 78 56 3000 #N/A #N/A #N/A
115190 78 27 8247 #N/A #N/A #N/A
115190 78 39 172 #N/A #N/A #N/A
115190 78 28 0 #N/A #N/A #N/A
cuando los resultados debian ser

20041202 115190 28 78 0
20041202 115190 39 78 172
20041202 115190 27 78 8247
20041202 115190 56 78 3000



Por lo visto no estabamos del todo desencaminados. Creo q seria cuestion de
jugar con los rangos para ajustarlos. Desgraciadamente me es imposible
modelar tu caso - me faltan horas en el dia :-( - asi q tengo q emplear al
maximo la imaginacion.

oye aprovecho al mostrar estos resultados una consulta adicional, resulta
que la consulta me arroja los resultados dobles es decir:



No logro encontrar ninguna duplicidad en el codigo. ?Es posible q sea la
propia base de datos q tenga los datos duplicados?

KL
Respuesta Responder a este mensaje
#8 fredy
18/03/2005 - 16:17 | Informe spam
No logro encontrar ninguna duplicidad en el codigo. ?Es posible q sea la
propia base de datos q tenga los datos duplicados?





ya verifique y no estan duplicados en la base , que podria ser?

"KL" escribió:

Hola fredy,

> 115190 78 56 3000 #N/A #N/A #N/A
> 115190 78 27 8247 #N/A #N/A #N/A
> 115190 78 39 172 #N/A #N/A #N/A
> 115190 78 28 0 #N/A #N/A #N/A
> cuando los resultados debian ser
>
> 20041202 115190 28 78 0
> 20041202 115190 39 78 172
> 20041202 115190 27 78 8247
> 20041202 115190 56 78 3000

Por lo visto no estabamos del todo desencaminados. Creo q seria cuestion de
jugar con los rangos para ajustarlos. Desgraciadamente me es imposible
modelar tu caso - me faltan horas en el dia :-( - asi q tengo q emplear al
maximo la imaginacion.

> oye aprovecho al mostrar estos resultados una consulta adicional, resulta
> que la consulta me arroja los resultados dobles es decir:

No logro encontrar ninguna duplicidad en el codigo. ?Es posible q sea la
propia base de datos q tenga los datos duplicados?

KL



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida