Excel - Recordset no trae todos los registros de una consulta de access

   
Vista:

Recordset no trae todos los registros de una consulta de access

Publicado por Miguel (54 intervenciones) el 11/03/2018 02:28:54
Hola a todos, pueden ayudarme o darme una idea?

Desde una hoja excel y por medio de una macro, ejecuto una consulta que se encuentra en una base de datos de Access y me trae datos posicionandolos a partir de una determinada celda.
Esta consulta de access es algo compleja porque se genera a partir de otras consultas y algunas tablas fijas y otras vinculadas. En Access se genera muy bien y con aprox 2300 registros

El problema radica que cuando genero la consulta desde el excel y que debería traer los aprox mas menos 2300 registros y 20 columnas; solamente me trae de los primeros 136 registros.

La conexión a la BD esta bien porque trae los datos, no me muestra ningún error; en el mismo libro excel y en otra hoja he ejecutado otra consulta con mas de 8000 registros y 10 columnas y lo hace muy bien.

A que se puede deber?

Utilizo para ello el recordset
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
Imágen de perfil de Abraham Valencia

Recordset no trae todos los registros de una consulta de access

Publicado por Abraham Valencia (66 intervenciones) el 11/03/2018 15:44:13
Pues sin ver como lo haces desde Excel, y que diferencias hay con lo que haces en Access, es un poco difícil ayudarte.

Abraham Valencia
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

Recordset no trae todos los registros de una consulta de access

Publicado por Miguel (54 intervenciones) el 12/03/2018 14:16:50
Adjunto lo que he venido haciendo y como reitero, he hecho otras dos consultas y si me trae los datos, salvo esta que tiene mas de 2300 registros.

Esto es lo que he hecho, previa activación de las referencias:

Microsoft access 11.0 Object Library
Microsoft DAO 3.51 Object Library




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Sub ConsultaAccess()
'
 
'Paso 1:Declarar Variables
Dim MyDatabase As DAO.database      'MyDatabase: Expone la base de datos de Access por medio de la DAO Object Library
Dim MyQueryDef As DAO.QueryDef      'MyQueryDef: Sirve como una variable de almacenamiento para contener la consulta 
Dim MyRecordset As DAO.Recordset    'MyRecordset: Guarda los resultados de la consulta
Dim i As Integer                    'i: Se utiliza para añadir titulos a las columnas
 
Set MyDatabase = DBEngine.OpenDatabase("C:\Documents\Utilidades Access\BD Prod.mdb")
 
 
Set MyQueryDef = MyDatabase.QueryDefs("Alarmas por existencias")
Set MyRecordset = MyQueryDef.OpenRecordset
 
 
Sheets("Sheet1").Select
ActiveSheet.Range("A6:Z10000").ClearContents
ActiveSheet.Range("A7").CopyFromRecordset MyRecordset
 
 
For i = 1 To MyRecordset.Fields.Count
ActiveSheet.Cells(6, i).Value = MyRecordset.Fields(i - 1).Name
Next i
 
Set MyRecordset = Nothing
 
 
End Sub
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
Imágen de perfil de Abraham Valencia

Recordset no trae todos los registros de una consulta de access

Publicado por Abraham Valencia (66 intervenciones) el 12/03/2018 21:35:59
En el archivo Access ¿cuál es el SQL de la Consulta? ¿no será que tiene parámetros que no estás enviando?

Abraham Valencia
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

Recordset no trae todos los registros de una consulta de access

Publicado por Miguel (54 intervenciones) el 13/03/2018 00:33:35
Gracias de antemano por tu atención e intención de ayudarme.

No es una consulta simple sino que lee tablas fijas, otras vinculadas e incluso algunas otras consultas que se generan en el momento.
Lo que he hecho es asignar por defecto los valores como por ejemplo el día de hoy que es un dato o parámetro con el cual mas me muevo para saber los datos de cada día; es por ello que he evitado el ingresar datos sino que lea automáticamente la fecha actual.

HAce poco cree una nueva BD y solo lleve las tablas y consultas que uso pero tampoco funciona.

Me parece raro que solo traiga los "primeros 136 registros", esto ya lo confirmé porque los revise con lo que se genera desde el mismo access.

Tampoco puedo pensar que no se "conecta" con las otras tablas vinculadas porque si trae datos pero los corta y de los mas de 2300 solo trae 136 registros

Puse un contador de registros
Antes de: Sheets("Sheet1").Select
y me muestra 1 registro


Puse un contador de registros
Despues de ActiveSheet.Range("A7").CopyFromRecordset MyRecordset
y me indica 136 registros nada mas

No se que pasa ¿¿??
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
Imágen de perfil de Abraham Valencia

Recordset no trae todos los registros de una consulta de access

Publicado por Abraham Valencia (66 intervenciones) el 13/03/2018 03:38:14
Pues cada vez tengo menos dudas, al parecer sí es problema de parámetros que, repito, no estás enviando a través de tu macro. Anda a la consulta en tu archivo, ponlo en "Vista SQL", toma una captura de pantalla y déjala por aquí.

Abraham Valencia
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

Recordset no trae todos los registros de una consulta de access

Publicado por Miguel (54 intervenciones) el 13/03/2018 19:47:25
Adjunto la consulta principal que es la que llamo o ejecuto desde excel. Hay otras subconsultas que si deseas igual puedo enviar


SELECT dbo_FP_DATOS_POZOS_PRODUCTORES.Pozo, dbo_FP_DATOS_POZOS_PRODUCTORES.Bat, Left([prd_meth_ds],(InStr(1,[prd_meth_ds],"-")-1)) AS ME, dbo_FP_DATOS_POZOS_PRODUCTORES.Tipo, IIf([Tipo]="Viejo",[Ult Ctrl Potencial - Preview02].EFF_DT,[Ult Ctrl Aprobado - Preview02].EFF_DT) AS FControl, IIf([Tipo]="Viejo",[Ult Ctrl Potencial - Preview02].PROD_OIL_24,[Ult Ctrl Aprobado - Preview02].PROD_OIL_24) AS Petroleo, IIf([Tipo]="Viejo",[Ult Ctrl Potencial - Preview02].PROD_WAT_24,[Ult Ctrl Aprobado - Preview02].PROD_WAT_24) AS Agua, [Petroleo]+[Agua] AS Bruta, [Agua]/([Petroleo]+[Agua])*100 AS [% Agua], [Ultima Diferida y Muestra].FMuestra, [Ultima Diferida y Muestra].AD1 AS Muestra, ([Petroleo]+[Agua])-[AguaSgnMuestra] AS PetSgnMuestra, ([Petroleo]+[Agua])*[AD1]/100 AS AguaSgnMuestra, [Petroleo]-[PetSgnMuestra] AS [DifPet Pot y SgnMuest Bls], IIf(([% Agua]-[muestra])=0,0,IIf(([% Agua]>[muestra]),([muestra]-[% Agua]),([muestra]-[% Agua]))) AS VMuestra, Date()-[FMuestra] AS DiasSinMuestra, IIf([Muestra]<=[% Agua],0,[DifPet Pot y SgnMuest Bls]) AS Diferida, IIf([DifPet Pot y SgnMuest Bls]=[Petroleo],Format("23:59:59","hh:nn:ss"),Format((1440*[Diferida]/[Petroleo])/1440,"hh:nn:ss")) AS TiempDif, [Ultima Diferida y Muestra].FDiferida, IIf(IsNull([FDiferida]),Null,[HC1]) AS HDCD1, IIf(IsNull([FDiferida]),Null,[HC2]) AS HDCD2, IIf(IsNull([FDiferida]),Null,[HC3]) AS HDCD3, IIf(IsNull([FDiferida]),Null,[HC4]) AS HDCD4
FROM (((dbo_FP_DATOS_POZOS_PRODUCTORES LEFT JOIN [Ultima Diferida y Muestra] ON dbo_FP_DATOS_POZOS_PRODUCTORES.Pozo = [Ultima Diferida y Muestra].Pozo) LEFT JOIN dbo_VC_PUMPER_STOP ON dbo_FP_DATOS_POZOS_PRODUCTORES.Bat = dbo_VC_PUMPER_STOP.STOP_S_NAME) LEFT JOIN [Ult Ctrl Aprobado - Preview02] ON dbo_FP_DATOS_POZOS_PRODUCTORES.COMP_SK = [Ult Ctrl Aprobado - Preview02].COMP_SK) LEFT JOIN [Ult Ctrl Potencial - Preview02] ON dbo_FP_DATOS_POZOS_PRODUCTORES.COMP_SK = [Ult Ctrl Potencial - Preview02].COMP_SK
WHERE (((dbo_VC_PUMPER_STOP.STOP_SK) Between 2 And 45))
ORDER BY dbo_FP_DATOS_POZOS_PRODUCTORES.Pozo;
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
Imágen de perfil de Abraham Valencia

Recordset no trae todos los registros de una consulta de access

Publicado por Abraham Valencia (66 intervenciones) el 14/03/2018 04:08:18
Hola

Pues sí, no conozco tu BD pero el problema es de parámetros; tú que conoces tu tablas, objetos, campos, etc., vas a tener que ver cuales parámetros son los que falta enviar coin el código y agregarlos a tu macro.

https://msdn.microsoft.com/en-us/library/office/ff193967.aspx

Abraham Valencia
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

Recordset no trae todos los registros de una consulta de access

Publicado por Miguel (54 intervenciones) el 10/04/2018 23:36:52
Encontré el error.

Espero le pueda servir a alguien, después de desmenuzar la consulta y traerla por partes a excel desde el access, pude darme cuenta que al realizar una formula, en access aparecia #Error pero igual generaba todos los registros, sin embargo al traerlos desde excel se cortaba en el registro donde estaba el error. Me costo darme cuenta porque como son tantos registros y mas de 20 columna no podía darme cuenta.

Lo que hice es validar previamente en access que en caso de error pusiera valores cero o nulo.
Normalmente pasa si se realiza divisiones entre cero. Aplicaba algunas formular pero como los datos son diversos no se podía saber cuanto daría un error así.

Gracias de todas manera por tu atención y ayuda
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
Revisar política de publicidad