Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Error con Recordset en tiempo de ejecucion VB6

Estas en el tema de Error con Recordset en tiempo de ejecucion VB6 en el foro de Visual Basic clásico en Foros del Web. Buenas, me esta saliendo un error muy raro cuando intento hacer una consulta SQL en el recordset. rs1.Open "SELECT EosCodEmp,EosFecCot,EosCodRub,EosDscLin,SUM([Case] WHEN EosCodDC = 'C' THEN ...
  #1 (permalink)  
Antiguo 01/04/2011, 07:20
 
Fecha de Ingreso: marzo-2011
Mensajes: 75
Antigüedad: 13 años, 9 meses
Puntos: 6
Pregunta Error con Recordset en tiempo de ejecucion VB6

Buenas, me esta saliendo un error muy raro cuando intento hacer una consulta SQL en el recordset.


rs1.Open "SELECT EosCodEmp,EosFecCot,EosCodRub,EosDscLin,SUM([Case] WHEN EosCodDC = 'C' THEN EosImpMN * -1 ELSE EosImpMN END) FROM Linea_Factura", cnn, adOpenDynamic, adLockOptimistic

Es una consulta simple, no tiene mayor dificultad, cuando la ejecuto me sale el siguiente error:

"Error en el metodo "open" del ebjeto '_Recordset'"

Esta es la conexion que hago a la base de datos acces

Sub abrirConexion()
Set cnn = New ADODB.Connection
cnn.CursorLocation = adUseClient
cnn.ConnectionString = App.Path + "\BaseDeDatos.mdb"
cnn.Provider = "microsoft.jet.oledb.4.0"
cnn.Open
End Sub

Espero puedan ayudarme Garacias!!
  #2 (permalink)  
Antiguo 01/04/2011, 08:27
 
Fecha de Ingreso: marzo-2011
Mensajes: 75
Antigüedad: 13 años, 9 meses
Puntos: 6
Respuesta: Error con Recordset en tiempo de ejecucion VB6

Pude solucionarlo. Es un error con en microsoft.jet.oledb.4.0 Hay que poner las palabras claves entr []

Ahora otro error.

En la misma consulta:

SELECT EosCodEmp,EosFecCot,EosCodRub,EosDscLin,SUM([Case] WHEN EosCodDC = 'C' THEN EosImpMN * -1 ELSE EosImpMN END) FROM Linea_Factura

Me dice: Error de sintaxis (falta operador) en la exprecion de consulta 'SUM([Case] WHEN EosCodDC = 'C' THEN EosImpMN * -1 ELSE EosImpMN END)'

Gracias
  #3 (permalink)  
Antiguo 01/04/2011, 08:49
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 15 años, 2 meses
Puntos: 47
Respuesta: Error con Recordset en tiempo de ejecucion VB6

Hola!!
Creo que le faltan parámetros al query:

• No tienes GROUP BY (ya que usas la funcion SUM)
• No tienes la clausula WHERE (para fltrar los datos)

Nunca he usado los parametros WHEN... THEN... ELSE... END en un query... veo que cierras un parentesis en la linea del END, pero no lo abres...

Última edición por lokoman; 01/04/2011 a las 08:54
  #4 (permalink)  
Antiguo 01/04/2011, 09:21
 
Fecha de Ingreso: marzo-2011
Mensajes: 75
Antigüedad: 13 años, 9 meses
Puntos: 6
Respuesta: Error con Recordset en tiempo de ejecucion VB6

Probe lo que me dijiste lokoman, pero sigue el mismo error. La consulta quedo asi

SELECT EosCodEmp,EosFecCot,EosCodRub,sum(Case [when] EosCodDC = 'C' [THEN] EosImpMN *-1 [ELSE] EosImpMN [END]) FROM Linea_Factura Where Eoscodemp = 'IS' group by EosCodEmp,EosFecCot,EosCodRub"

Lo curioso es que es en acces 2007 que me da error, la probe en SQL y funciona bien
  #5 (permalink)  
Antiguo 01/04/2011, 09:44
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 15 años, 2 meses
Puntos: 47
Respuesta: Error con Recordset en tiempo de ejecucion VB6

Quita los [ ]:
Código vb:
Ver original
  1. "SELECT EosCodEmp,EosFecCot,EosCodRub,sum(Case when EosCodDC = 'C' THEN EosImpMN *-1 ELSE EosImpMN END) FROM Linea_Factura Where Eoscodemp = 'IS' group by EosCodEmp,EosFecCot,EosCodRub"
  #6 (permalink)  
Antiguo 01/04/2011, 10:55
 
Fecha de Ingreso: marzo-2011
Mensajes: 75
Antigüedad: 13 años, 9 meses
Puntos: 6
Respuesta: Error con Recordset en tiempo de ejecucion VB6

Si quito los [] me da el error que comente al principio -.-
  #7 (permalink)  
Antiguo 01/04/2011, 12:16
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 15 años, 2 meses
Puntos: 47
Respuesta: Error con Recordset en tiempo de ejecucion VB6

Si no me equivoco Access usa los corchetes [ ] para los nombres de los campos, WHEN... THEN... ELSE... END... no son campos, sino instrucciones y al parecer son propias del SQL Server, no sirven en Access.

Lo que se me ocurre es lo siguiente:

Código vb:
Ver original
  1. 'Un Recordset:
  2.  
  3. rstData.Open "SELECT EosCodEmp,EosFecCot,EosCodRub, EosCodDC, sum(EosImpMN) as MONTO_SUMA FROM Linea_Factura Where Eoscodemp = 'IS' group by EosCodEmp,EosFecCot,EosCodRub, EosCodDC", cnn, adOpenDynamic, adLockOptimistic
  4.  
  5. 'Luego, validar:
  6.  
  7. If EosCodDC='C' then
  8.   TOTAL= (rstData!MONTO_SUMA) *-1
  9. Else
  10.    TOTAL=rstData!MONTO_SUMA
  11. End If
  #8 (permalink)  
Antiguo 04/04/2011, 08:43
 
Fecha de Ingreso: marzo-2011
Mensajes: 75
Antigüedad: 13 años, 9 meses
Puntos: 6
Respuesta: Error con Recordset en tiempo de ejecucion VB6

Gracias lokoman, me sirvio, me termine pasando la base de datos a SQL para no tener futuros problemas.
  #9 (permalink)  
Antiguo 07/04/2011, 13:46
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 15 años, 2 meses
Puntos: 47
Respuesta: Error con Recordset en tiempo de ejecucion VB6


Etiquetas: ejecucion, recordset, vb
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:00.