ID | Asunto | Fecha | Nick | |
50221 | Estatuto SQL demasiado largo, cuando se consultan datos via ADO 2 | 29/09/09 05:22 | Padawan_Falcon | |  |
Estatuto SQL demasiado largo, cuando se consultan datos via ADO 2
Buenos dias, compañeros.
Mi situación es la siguiente, desde una macro me conecto a una db oracle, y extraigo los datos sin problemas usando un objeto ADO 2, siempre que el estatuto sql sea “relativamente corto”, por ejemplo:
gsSQL = "SELECT NUM_ID, NUM_IDENTIFICACION, NOM_NOMBRE, NOM_APELLIDO1, NOM_APELLIDO2 FROM FACT_OWNER.FACT_PERSONA WHERE (NOM_NOMBRE='MARIA') AND (NOM_APELLIDO2='CHAVES')"
Pero recientemente he tenido que escribir un estatuto SQL demasiado largo y cuando el programa pasa por la instrucción open, me dice que no encuentra el “FROM”, al revisar el contenido de la variable que tiene el estatuto SQL, veo que esta se corta antes de llegar al from:
SELECT FACT_PERFIL.COD_PERFIL, FACT_PERFIL.DSC_PERFIL, FACT_SRV_APLICACION.ARCHIVO, FACT_SRV_APLICACION.TIPO_SERVICIO, FACT_OBJ_SRV.DSC_ELEMENTO, FACT_SRV_APLICACION.DSC_SERVICIO, FACT_OBJ_SRV.TIPO_ELEMENTO FROM FACT_OWNER.FACT_OBJ_SRV FACT_OBJ_SRV, FACT_OWNER.FACT_PERFIL FACT_PERFIL, FACT_OWNER.FACT_SRV_APLICACION FACT_SRV_APLICACION, FACT_OWNER.FACT_SRV_PERFIL FACT_SRV_PERFIL WHERE FACT_SRV_PERFIL.COD_PERFIL = FACT_PERFIL.COD_PERFIL AND FACT_SRV_PERFIL.ID_SERVICIO = FACT_SRV_APLICACION.ID_SERVICIO AND FACT_OBJ_SRV.ID_SERVICIO = FACT_SRV_PERFIL.ID_SERVICIO AND ((FACT_PERFIL.FEC_BORRADO Is Null) AND (FACT_SRV_PERFIL.FEC_BORRADO Is Null) AND (FACT_SRV_APLICACION.FEC_BORRADO Is Null) AND (FACT_PERFIL.COD_PERFIL Like 'AFIL%') AND (FACT_OBJ_SRV.FEC_BORRADO Is Null)) AND FACT_PERFIL.COD_PERFIL||FACT_OBJ_SRV.ID_SERVICIO||FACT_OBJ_SRV.DSC_ELEMENTO||FACT_OBJ_SRV.TIPO_ELEMENTO NOT IN (SELECT FACT_OBJ_SRV_PRF.COD_PERFIL||FACT_OBJ_SRV_PRF.ID_SERVICIO||FACT_OBJ_SRV_PRF.DSC_ELEMENTO||FACT_OBJ_SRV.TIPO_ELEMENTO FROM FACT_OWNER.FACT_OBJ_SRV FACT_OBJ_SRV, FACT_OWNER.FACT_OBJ_SRV_PRF FACT_OBJ_SRV_PRF WHERE FACT_OBJ_SRV_PRF.DSC_ELEMENTO = FACT_OBJ_SRV.DSC_ELEMENTO AND FACT_OBJ_SRV_PRF.ID_SERVICIO = FACT_OBJ_SRV.ID_SERVICIO AND ((FACT_OBJ_SRV_PRF.FEC_BORRADO Is Null) AND (FACT_OBJ_SRV.FEC_BORRADO Is Null))) ORDER BY FACT_OBJ_SRV.DSC_ELEMENTO DESC
Y este es el codigo que utilizo para consultar, que con un estatuto sql pequeño si funciona: Sub PRUEBA2() Dim Col As Long Dim Row As Long Dim sqltxt As String Set gConexion = New ADODB.Connection lsConexion = "Provider=MSDASQL.1;Persist Security Info=False;User ID=jvalveji;Password=Marte8080;Data Source=SFCV01.world" gConexion.Open lsConexion Set gRegistros = New ADODB.Recordset 'Inicializa la variable de los registros gsSQL = "SELECT * FROM gnac.empleado where empleado = '900760864'"
gRegistros.Open gsSQL, gConexion, 2, 3 Row = 1 While Not gRegistros.EOF For a = 0 To 4 Col = a + 1 If IsNumeric(gRegistros.Fields(a)) Then Cells(Row, Col) = CStr(gRegistros.Fields(a)) Else Cells(Row, Col) = gRegistros.Fields(a) End If Next a Row = Row + 1 gRegistros.MoveNext Wend gRegistros.Close gConexion.Close Set gRegistros = Nothing Set gConexion = Nothing End Sub
Preguntas: Hay alguna forma de expandir la longitude de la variable que guarda el estatuto SQL? Sera que no estoy haciendo la consulta correctamente? O es que tengo que usar otro objeto de conexión?
Saludos …
|
|
ID | Asunto | Fecha | Nick | |
50479 | Re: Estatuto SQL demasiado largo, cuando se consultan datos via ADO 2 (Resp: 50221) | 20/10/09 14:35 | May | | |
hola,
No se si habras ya solucionado el tema o no pero en todo caso pregunto:
-Desde donde estas ejecutando el codigo?? que programa o soft utilizas para la ejecucion de ese codigo ?? -has probado si funciona correctamente en Oracle esa consulta que intentas cargar en la variable?
Comentanos...!
Saludos Monica
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
ID | Asunto | Fecha | Nick | |
50487 | Re: Estatuto SQL demasiado largo, cuando se consultan datos via ADO 2 (Resp: 50221) | 20/10/09 22:25 | Padawan_Falcon | | |
Buenas compañeros, si ya resolví el problema.
La consulta la estoy haciendo directamente desde una macro en Excel 2007 haciendo uso de VBA, a una bd oracle.
En oracle la consulta anterior se ejecuta correctamente, es mas si la ejecuto desde en MSQuery igual funciona.
El problema es la longitud de la consulta (longitud en cantidad de caracteres), es muy extensa; asi que lo que hice, fue ponerle alias muy cortos a las tablas, alias de una sola letra, y asi calificar los campos de las tablas, de esta forma pude reducir la longitud en caracteres de la consulta en varias lineas, luego de esto la consulta se ejecutó sin problema alguno.
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
ID | Asunto | Fecha | Nick | |
50510 | Re: Estatuto SQL demasiado largo, cuando se consultan datos via ADO 2 (Resp: 50487) | 22/10/09 09:31 | May | | |
Muchas gracias por el feed-back Padawan  !! Saludos Monica
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |