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

#1 KL
14/03/2005 - 19:11 | Informe spam
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
#2 fredy
14/03/2005 - 20:13 | Informe spam
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
#3 KL
14/03/2005 - 20:36 | Informe spam
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
#4 fredy
17/03/2005 - 21:31 | Informe spam
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
#5 KL
17/03/2005 - 23:40 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida