border

Miembros:
Mensajes:
Temas:
Online:

Ultimo Miembro:

 
 

  #1 (permalink)  
Antiguo 29-09-2005, 09:27:19
Un Nuevo Amigo
 
Registrado: jul 2005
Posts: 18
silang2 Valoración +2
Predeterminado -2147467259(80004005)

:smt010 :smt010 :smt010 :smt010

Hola a todos y gracias de antemano.
Tengo un problema con mi Recordset y creo saber porque, pero no la solucion. El caso es que todo me funcionaba bien hasta que cambie el comando SQL e hice un GROUP BY. Desde entonces me da el siguiente error:

Error '-2147467259(80004005)' en tiempo de ejecución:

El proveedor de datos u otro servicio devolvió un estado E_FAIL

Alguien me puede ayudar, no se si tengo que cambiar el tipo de conexion o que. La open del Recordset la hago asi por si sirve de algo


RecClientes.Open sClientes, Conn, adOpenDynamic, adLockReadOnly, adCmdText

Y el error me da en el RecordCount del RecordSet.

Muchas gracias y espero que puedan ayudarme.
__________________
Muchas gracias, un saludo

Silvia
Responder Con Cita
  #2 (permalink)  
Antiguo 29-09-2005, 12:05:56
Avatar de J.M.Movilla
Administrator
 
Registrado: dic 2002
Ubicación: BURGOS - ESPAÑA
Posts: 5.404
J.M.Movilla Valoración +2
Predeterminado

Creo que lo fundamental es que reportes el valor de sClientes, que lógicamente es la SQL en la que hay que buscar el error...
__________________
José María Movilla Cuadrado
______________________

Visual Basic Videos Programacion Foro Programacion
Tutoriales Programacion Trucos Programacion Codigos Programacion
Responder Con Cita
  #3 (permalink)  
Antiguo 29-09-2005, 12:52:58
Un Nuevo Amigo
 
Registrado: jul 2005
Posts: 18
silang2 Valoración +2
Predeterminado

Hola de nuevo!

Esta es la sentencia SQL que contiene sClientes

SELECT CCLITE, CPOENT, CCLTAN, DNOMBC, DNOMDI, NORDVI,
SUM(DECODE(CMARCA,'11',ITOTAA)) ITOTAA,
SUM(DECODE(CMARCA,'11',IREACA)) IREACA,
SUM(DECODE(CMARCA,'11',IREAMI)) IREAMI
FROM PR80, BK96, BA21, BH97 , AV42, AV43
WHERE PR80.CSBCNL = BK96.CSBCNL AND PR80.CMTVOA = BA21.CMTVOA(+) AND PR80.CFICLT = BH97.CFICLT(+)
AND PR80.CESCOM = AV42.CESCOM AND AV42.CTERRI = AV43.CTERRI AND AV43.CUNMER = '60' AND CDELEG = '045'
AND CRUTAP = '01'GROUP BY CCLITE, CPOENT, CCLTAN, DNOMBC, DNOMDI, NORDVI
ORDER BY NORDVI

Si la lanzo en directamente contra la BD devuelve datos, osea que la estructura es correcta, o eso creo

Muchas gracias
__________________
Muchas gracias, un saludo

Silvia
Responder Con Cita
  #4 (permalink)  
Antiguo 29-09-2005, 13:22:47
Moderador
 
Registrado: dic 2002
Ubicación: Oviedo - Asturias
Posts: 1.251
angelescj Valoración +2
Predeterminado

Separa '01' de group by

..... CRUTAP = '01'GROUP BY CCLITE, CPOENT, CCLTAN, DNOMBC, DNOMDI, NORDVI
ORDER BY NORDVI

:smt004
__________________
Angeles
-------------------------------------
Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #5 (permalink)  
Antiguo 29-09-2005, 14:14:56
Un Nuevo Amigo
 
Registrado: jul 2005
Posts: 18
silang2 Valoración +2
Predeterminado

Lo siento ha sido un error mio al pegar la SQL pero en realidad si que hay espacio entre ..... CRUTAP = '01'GROUP.
__________________
Muchas gracias, un saludo

Silvia
Responder Con Cita
  #6 (permalink)  
Antiguo 29-09-2005, 14:37:42
Avatar de juancarlosavalos
Gran Participación en el Foro
 
Registrado: jul 2005
Ubicación: Libertad / Merlo prov Buenos Aires
Posts: 206
juancarlosavalos Valoración +2
Predeterminado

Cita:
Empezado por silang2
Lo siento ha sido un error mio al pegar la SQL pero en realidad si que hay espacio entre ..... CRUTAP = '01'GROUP.
Yo cre que deberias enviarnos la sentencia tal cual la usas en visual para poder tener una referencia mejor de donde puede estar el error, porque asi es algo abstracto y uno debe hacer solo presunciones.
Espero tu respuesta para poder ayudarte.
Responder Con Cita
  #7 (permalink)  
Antiguo 29-09-2005, 14:48:16
Un Nuevo Amigo
 
Registrado: jul 2005
Posts: 18
silang2 Valoración +2
Predeterminado

Vale, ya los sineto esta es la sentencia completa

SELECT CCLITE, CPOENT, CCLTAN, DNOMBC, DNOMDI, DECODE(SDIRBJ,'S','INACTIVO','N','ACTIVO'),
DECODE(PR80.CMTVOA,NULL,' ',DMTVOC) , FANALT, DSUBCC, DPOBLC, DFICLC, NORDVI,
SUM(DECODE(CMARCA,'11',ITOTAA)) ITOTAA, SUM(DECODE(CMARCA,'11',IREACA)) IREACA,
SUM(DECODE(CMARCA,'11',IREAMI)) IREAMI, SUM(DECODE(CMARCA,'11',IREAOP)) IREAOP,
SUM(DECODE(CMARCA,'11',IREAPR)) IREAPR, SUM(DECODE(CMARCA,'08',ITOTAA)) ITOTAA,
SUM(DECODE(CMARCA,'08',IREACA)) IREACA, SUM(DECODE(CMARCA,'08',IREAMI)) IREAMI,
SUM(DECODE(CMARCA,'08',IREAOP)) IREAOP, SUM(DECODE(CMARCA,'08',IREAPR)) IREAPR,
SUM(DECODE(CMARCA,'09',ITOTAA)) ITOTAA, SUM(DECODE(CMARCA,'09',IREACA)) IREACA,
SUM(DECODE(CMARCA,'09',IREAMI)) IREAMI, SUM(DECODE(CMARCA,'09',IREAOP)) IREAOP,
SUM(DECODE(CMARCA,'09',IREAPR)) IREAPR, SUM(DECODE(CMARCA,'04',ITOTAA)) ITOTAA,
SUM(DECODE(CMARCA,'04',IREACA)) IREACA, SUM(DECODE(CMARCA,'04',IREAMI)) IREAMI,
SUM(DECODE(CMARCA,'04',IREAOP)) IREAOP, SUM(DECODE(CMARCA,'04',IREAPR)) IREAPR,
SUM(DECODE(CMARCA,'01',ITOTAA)) ITOTAA, SUM(DECODE(CMARCA,'01',IREACA)) IREACA,
SUM(DECODE(CMARCA,'01',IREAMI)) IREAMI, SUM(DECODE(CMARCA,'01',IREAOP)) IREAOP,
SUM(DECODE(CMARCA,'01',IREAPR)) IREAPR, SUM(DECODE(CMARCA,'05',ITOTAA)) ITOTAA,
SUM(DECODE(CMARCA,'05',IREACA)) IREACA, SUM(DECODE(CMARCA,'05',IREAMI)) IREAMI,
SUM(DECODE(CMARCA,'05',IREAOP)) IREAOP, SUM(DECODE(CMARCA,'05',IREAPR)) IREAPR,
SUM(DECODE(CMARCA,'06',ITOTAA)) ITOTAA, SUM(DECODE(CMARCA,'06',IREACA)) IREACA,
SUM(DECODE(CMARCA,'06',IREAMI)) IREAMI, SUM(DECODE(CMARCA,'06',IREAOP)) IREAOP,
SUM(DECODE(CMARCA,'06',IREAPR)) IREAPR, SUM(DECODE(CMARCA,'13',ITOTAA)) ITOTAA,
SUM(DECODE(CMARCA,'13',IREACA)) IREACA, SUM(DECODE(CMARCA,'13',IREAMI)) IREAMI,
SUM(DECODE(CMARCA,'13',IREAOP)) IREAOP, SUM(DECODE(CMARCA,'13',IREAPR)) IREAPR,
SUM(DECODE(CMARCA,'02',ITOTAA)) ITOTAA, SUM(DECODE(CMARCA,'02',IREACA)) IREACA,
SUM(DECODE(CMARCA,'02',IREAMI)) IREAMI, SUM(DECODE(CMARCA,'02',IREAOP)) IREAOP,
SUM(DECODE(CMARCA,'02',IREAPR)) IREAPR, SUM(DECODE(CMARCA,'00',ITOTAA)) ITOTAA,
SUM(DECODE(CMARCA,'00',IREACA)) IREACA, SUM(DECODE(CMARCA,'00',IREAMI)) IREAMI,
SUM(DECODE(CMARCA,'00',IREAOP)) IREAOP, SUM(DECODE(CMARCA,'00',IREAPR)) IREAPR,
SUM(DECODE(CMARCA,'07',ITOTAA)) ITOTAA, SUM(DECODE(CMARCA,'07',IREACA)) IREACA,
SUM(DECODE(CMARCA,'07',IREAMI)) IREAMI, SUM(DECODE(CMARCA,'07',IREAOP)) IREAOP,
SUM(DECODE(CMARCA,'07',IREAPR)) IREAPR, SUM(DECODE(CMARCA,'03',ITOTAA)) ITOTAA,
SUM(DECODE(CMARCA,'03',IREACA)) IREACA, SUM(DECODE(CMARCA,'03',IREAMI)) IREAMI,
SUM(DECODE(CMARCA,'03',IREAOP)) IREAOP, SUM(DECODE(CMARCA,'03',IREAPR)) IREAPR,
SUM(DECODE(CMARCA,'14',ITOTAA)) ITOTAA, SUM(DECODE(CMARCA,'14',IREACA)) IREACA,
SUM(DECODE(CMARCA,'14',IREAMI)) IREAMI, SUM(DECODE(CMARCA,'14',IREAOP)) IREAOP,
SUM(DECODE(CMARCA,'14',IREAPR)) IREAPR, SUM(DECODE(CMARCA,'15',ITOTAA)) ITOTAA,
SUM(DECODE(CMARCA,'15',IREACA)) IREACA, SUM(DECODE(CMARCA,'15',IREAMI)) IREAMI,
SUM(DECODE(CMARCA,'15',IREAOP)) IREAOP, SUM(DECODE(CMARCA,'15',IREAPR)) IREAPR
FROM PR80, BK96, BA21, BH97 , AV42, AV43
WHERE PR80.CSBCNL = BK96.CSBCNL AND PR80.CMTVOA = BA21.CMTVOA(+)
AND PR80.CFICLT = BH97.CFICLT(+) AND PR80.CESCOM = AV42.CESCOM
AND AV42.CTERRI = AV43.CTERRI AND AV43.CUNMER = '60'
AND CDELEG = '045' AND CRUTAP = '01'
GROUP BY CCLITE, CPOENT, CCLTAN, DNOMBC, DNOMDI,
DECODE(SDIRBJ,'S','INACTIVO','N','ACTIVO'), DECODE(PR80.CMTVOA,NULL,' ',DMTVOC) ,
FANALT, DSUBCC, DPOBLC, DFICLC, NORDVI
ORDER BY NORDVI

La conexion y el recordset lo preparo asi

'Abrir la conexion
Set Conn = New ADODB.Connection
Conn.CursorLocation = adUseClient
Conn.Mode = adModeReadWrite
Conn.Open Cadena

'preparar el recordset
Set RecClientes = New ADODB.Recordset
RecClientes.CursorLocation = adUseClient
RecClientes.Open sClientes, Conn, adOpenDynamic, adLockReadOnly, adCmdText
__________________
Muchas gracias, un saludo

Silvia
Responder Con Cita
  #8 (permalink)  
Antiguo 29-09-2005, 15:21:48
Avatar de juancarlosavalos
Gran Participación en el Foro
 
Registrado: jul 2005
Ubicación: Libertad / Merlo prov Buenos Aires
Posts: 206
juancarlosavalos Valoración +2
Predeterminado

Cita:
Empezado por silang2
DECODE(PR80.CMTVOA,NULL,' ',DMTVOC) ,
FANALT, DSUBCC, DPOBLC, DFICLC, NORDVI
ORDER BY NORDVI
prueba en la parte DECODE(PR80.CMTVOA,NULL,' ',DMTVOC) a dejarla asi DECODE(PR80.CMTVOA,NULL,'',DMTVOC), porque creo que ese registro esta vacío, sino es asi disculpa mi respuesta.
Responder Con Cita
  #9 (permalink)  
Antiguo 29-09-2005, 15:40:17
Un Nuevo Amigo
 
Registrado: jul 2005
Posts: 18
silang2 Valoración +2
Predeterminado

Lo acabo de probar y sigue dando el mismo problema, yo pensaba que el problema era algun parametro en la open del Recordset porque cuando lanzo la SQL sobre la base de datos directamente no me deja incluir la clausula FOR UPDATE NOWAIT con la expresion GROUP BY y pensaba que ese podia ser el problema del Recordset. Pero parece que no.

Si no hay manera de arreglarlo, lo unico que se me ocurre es cambiar la estructura de la tabla, para que en vez de crear un registro por cada marca, tenga todas las marcas en una linea y evitar el problema de tener que agrupar datos, no se la verdad estoy un poco desesperada.

Muchas gracias una vez mas.
__________________
Muchas gracias, un saludo

Silvia
Responder Con Cita
  #10 (permalink)  
Antiguo 29-09-2005, 15:54:24
Avatar de juancarlosavalos
Gran Participación en el Foro
 
Registrado: jul 2005
Ubicación: Libertad / Merlo prov Buenos Aires
Posts: 206
juancarlosavalos Valoración +2
Predeterminado

Cita:
Empezado por silang2
yo pensaba que el problema era algun parametro en la open del Recordset porque cuando lanzo la SQL sobre la base de datos directamente no me deja incluir la clausula FOR UPDATE NOWAIT con la expresion GROUP BY
Obviamente si quieres hacer un update la conexion no debe de ser de solo lectura (adLockReadOnly) sono cualquiera de los demás (según como quieras bloquear los registros).
Aca te envio lo que documenta Microsoft.

Sintaxis

recordset.Open Source, ActiveConnection, CursorType, LockType, Options

Parámetros

Source Opcional. Variant que da como resultado un nombre de variable de objeto Command válido, una instrucción SQL, un nombre de tabla, una llamada a un procedimiento almacenado o el nombre de archivo de un Recordset.

ActiveConnection Opcional. Un Variant que da como resultado un nombre de variable de objeto Connection válido o un String que contiene parámetros ConnectionString.

CursorType
Opcional. Un valor CursorTypeEnum que determina el tipo de cursor que el proveedor debe usar al abrir el Recordset. Puede ser una de las siguientes constantes (vea la propiedad CursorType para obtener definiciones de estos valores).

Constante Descripción
adOpenForwardOnly (Predeterminado) Abre un cursor de tipo sólo avance.
adOpenKeyset Abre un cursor de tipo conjunto de claves.
adOpenDynamic Abre un cursor de tipo dinámico.
adOpenStatic Abre un cursor de tipo estático.


LockType Opcional. Un valor LockTypeEnum que determina el tipo de bloqueo (concurrencia) que debe usar el proveedor al abrir el Recordset. Puede ser una de las siguientes constantes (vea la propiedad LockType para obtener más información).

Constante Descripción
adLockReadOnly (Predeterminado) Sólo lectura. No puede modificar los datos.
adLockPessimistic Bloqueo pesimista, registro a registro. El proveedor hace lo necesario para asegurar una modificación correcta de los registros, normalmente bloqueando registros en el origen de datos inmediatamente antes de la modificación.
adLockOptimistic Bloqueo optimista, registro a registro. El proveedor usa bloqueo optimista, bloqueando registros sólo cuando se llama al método Update.
adLockBatchOptimistic Actualizaciones optimistas por lotes. Requeridas en el modo de actualización por lotes en oposición al modo de actualización inmediata.


Options Opcional. Valor Long que indica cómo debe evaluar el proveedor el argumento Source si representa algo distinto que un objeto Command o que se debe restaurar el Recordset desde un archivo en el que se guardó anteriormente. Puede ser una de las siguientes constantes (vea la propiedad CommandType para obtener una explicación más detallada de las cinco primeras constantes de esta lista).

Constante Descripción
adCmdText Indica que el proveedor debe evaluar Source como una definición textual de un comando.
adCmdTable Indica que ADO debe generar una consulta SQL para devolver todas las filas de la tabla nombrada en Source.
adCmdTableDirect Indica que el proveedor debe devolver todas las filas de la tabla nombrada en Source.
adCmdStoredProc Indica que el proveedor debe evaluar Source como un procedimiento almacenado.
adCmdUnknown Indica que el tipo de comando del argumento Source es desconocido.
adCommandFile Indica que el Recordset guardado se debe restaurar desde el archivo nombrado en Source.
adExecuteAsync Indica que Source se debe ejecutar de forma asíncrona.
adFetchAsync Indica que, tras alcanzar la cantidad inicial especificada en la propiedad CacheSize, las filas restantes deben buscarse de forma asíncrona.


Comentarios

Al usar el método Open en un objeto Recordset, se abre un cursor que representa registros de una tabla de base, los resultados de una consulta o un Recordset guardado anteriormente.

Use el argumento opcional Source para especificar un origen de datos. Puede usar uno de los siguientes: una variable de objeto Command, una instrucción SQL, un procedimiento almacenado, un nombre de tabla o una ruta completa de acceso a archivo.

El argumento ActiveConnection corresponde a la propiedad ActiveConnection y especifica en qué conexión se debe abrir el objeto Recordset. Si pasa una definición de conexión para este argumento, ADO abre una nueva conexión usando los parámetros especificados. Puede cambiar el valor de esta propiedad después de abrir el Recordset para enviar actualizaciones a otro proveedor. Si establece el valor de esta propiedad a Nothing (en Microsoft Visual Basic) se desconectará el Recordset de cualquier proveedor.

Para los demás argumentos que corresponden directamente a propiedades de un objeto Recordset (Source, CursorType y LockType), la relación de los argumentos con las propiedades es la siguiente:

La propiedad es de lectura/escritura antes de abrir el objeto Recordset.


Se usan los valores de la propiedad a menos que pase los argumentos correspondientes cuando ejecuta el método Open. Si pasa un argumento, éste anula el valor de la propiedad correspondiente y el valor de la propiedad se actualiza con el valor del argumento.


Después de abrir el objeto Recordset, estas propiedades se vuelven de sólo lectura.
Nota Para los objetos Recordset cuya propiedad Source está establecida a un objeto Command válido, la propiedad ActiveConnection es de sólo lectura, incluso si el objeto Recordset no está abierto.

Si pasa un objeto Command en el argumento Source y pasa también un argumento ActiveConnection, se produce un error. La propiedad ActiveConnection del objeto Command ya debe estar establecida a un objeto Connection o cadena de conexión válidos.

Si pasa algo distinto que un objeto Command en el argumento Source, puede usar el argumento Options para optimizar la evaluación del argumento Source. Si el argumento Options no está definido, es posible que experimente una disminución en el rendimiento ya que ADO debe hacer llamadas al proveedor para determinar si el argumento es una instrucción SQL, un procedimiento almacenado o un nombre de tabla. Si sabe qué tipo de Source está usando, establezca el argumento Options para que dé instrucciones a ADO para que salte directamente al código relevante. Si el argumento Options no coincide con el tipo de Source, se produce un error.

El valor predeterminado para el argumento Options es adCommandFile, si no hay una conexión asociada al recordset. Este será el caso normalmente con los objetos Recordset guardados.

Si el origen de datos no devuelve registros, el proveedor establece el valor de las propiedades BOF y EOF a True, y la posición del registro actual no está definida. Aún puede agregar nuevos datos a este objeto Recordset vacío si el tipo de cursor lo permite.

Cuando haya concluido sus operaciones sobre un objeto Recordset abierto, use el método Close para liberar cualquier recurso del sistema asociado. Al cerrar un objeto, no se quita de la memoria; puede cambiar los valores de sus propiedades y usar el método Open para volver a abrirlo más tarde. Para eliminar completamente un objeto de la memoria, establezca el valor de la variable del objeto a Nothing.

Llame a Open sin operandos, y antes de que la propiedad ActiveConnection esté establecida, para crear una instancia de un Recordset creado anexando campos a la colección Recordset Fields.
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado


Temas Similares
Tema Autor Foro Respuestas Último Mensaje
-2147467259 ... Sql Posseida Visual Basic 6.00 13 21-11-2006 23:57:25
-2147467259 (80004005) imported_HurryCrack Visual Basic 6.00 1 28-01-2005 22:01:27
Error -2147467259(80004005) jyuenh Visual Basic 6.00 1 30-09-2004 03:31:15


La franja horaria es GMT. Ahora son las 23:27:17.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
A vBSkinworks Design

Alojado en el servicio Premium de Masquewebs | Diseño mejorado por MasqueWebs

right