|
Cierto, por eso usamos un agente ejecutado en servidor que realice la consulta.
ej:
Dim con As ODBCConnection
Dim qry As ODBCQuery
Dim result As ODBCResultSet
Set con = New ODBCConnection
Set qry = New ODBCQuery
Set result = New ODBCResultSet
Set qry.Connection = con
Set result.Query = qry
'Inicializa las variables de error
cod_error="r00"
lit_error="Consulta realizada con éxito."
con.SilentMode=True
If Not con.ConnectTo( OrigenDatos, Usuario, Password ) Then
cod_error="c"+Cstr( con.Geterror )
lit_error=Cstr( con.GetExtendedErrorMessage )+" ERROR 1."
Print lit_error
Exit Sub
Else
'Conpone la sentencia SQL
qry.SQL = |select CAST( estructura AS VARCHAR(128)), CAST( t.[name] AS VARCHAR(128)), CAST( c.termid AS VARCHAR(128)) from term t, cargo c where t.termid = c.termid order by t.[name]|
result.FirstRow
If Not result.Execute Then
cod_error="q"+Cstr( con.Geterror )
lit_error=Cstr( con.GetExtendedErrorMessage )+qry.SQL+" ERROR 2."
Print lit_error
Exit Sub
End If
'Realiza la introducción de datos
'i_dt=0
'i_dr=0
'i_zona=0
i=0
Do
result.NextRow
aux=result.GetValue(1)
If Cstr(aux)="False" And i_dt=0 Then
cod_error="r11"
lit_error="No existen valores para los criterios de búsqueda especificados. (Listado Cargos)"
Exit Sub
End If
aux_result=result.GetValue(2)
If aux_result <> "- - - - - - - -" And aux_result <> "A definir" _
And aux_result <> "Lector" Then
Redim Preserve lista(i)
lista(i)=aux_result+" ("+result.GetValue(3)+")"
i=i+1
End If
' Select Case result.GetValue(1)
' Case "DT", "SS.CC."
' Redim Preserve lista_dt(i_dt)
' lista_dt(i_dt)=result.GetValue(2)+" ("+result.GetValue(3)+")"
' i_dt=i_dt+1
' Case "DR"
' Redim Preserve lista_dr(i_dr)
' lista_dr(i_dr)=result.GetValue(2)+" ("+result.GetValue(3)+")"
' i_dr=i_dr+1
' Case "Zona"
' Redim Preserve lista_zona(i_zona)
' lista_zona(i_zona)=result.GetValue(2)+" ("+result.GetValue(3)+")"
' i_zona=i_zona+1
' End Select
Loop Until result.IsEndOfData
'Cierra base de datos y conexión
result.Close(DB_CLOSE)
con.Disconnect
End If
Llamado por un agente
Sub ObtenerListaCargosPorEstructura ( clave_eo As String, nivel As String, doc_aux As NotesDocument, codigo_con_unidad As String , dt, dr,zona, area)
Dim s As New NotesSession
Dim db As NotesDatabase
Dim DocCom As NotesDocument, doc_config As NotesDocument, DocResp As NotesDocument
Dim col As NotesDocumentCollection
Dim vista As notesview
Dim docEstructura As notesdocument
Dim listaCargos() As String
Dim contador As Integer
Dim pos As Integer
Dim codigoCargo As Integer
Dim listaCodigos List As String
Dim item As notesitem
contador=0
Set db = s.CurrentDatabase
Set doc_config=ObtenerDocConfig
Set vista=db.getview("(Estructura organizativa por codigo)")
Set docEstructura=vista.GetDocumentByKey(codigo_con_unidad, True)
If docEstructura Is Nothing Then
Set DocCom=db.CreateDocument
Set Item = New NotesItem( DocCom, "Autores", "*", AUTHORS )
Call DocCom.save(True, True)
Call DocCom.replaceItemValue("Clave",DocCom.Noteid)
Call DocCom.replaceItemValue("Form","F.Comunicacion")
Call DocCom.replaceItemValue("clave_eo", clave_eo )
Call DocCom.replaceItemValue("nivel", nivel )
Call DocCom.replaceItemValue("dt", dt )
Call DocCom.replaceItemValue("dr", dr )
Call DocCom.replaceItemValue("zona", zona )
Call DocCom.replaceItemValue("area", area )
Call DocCom.save(True, True)
'Ejecuta el agente en el servidor
If EjecutarAgenteServidor(db, DocCom, "(ARGOS obtener cargos por estructura)") Then
clave = "F.Respuesta" + DocCom.Noteid
If EsperarRespuesta(Cstr(clave), DocCom, DocResp) Then
If DocResp.cod_error(0)="r00" Or DocResp.cod_error(0)="" Then
Set vista=db.GetView("(Responsables unidad)")
Set docEstructura=vista.GetDocumentByKey(nivel)
If Not docEstructura Is Nothing Then
Forall cod_cargo In docEstructura.codigos_cargos
listaCodigos(cod_cargo)=""
End Forall
End If
' Quitamos codigos
Forall cargo In DocResp.lista
pos=Instr(cargo, "-")
Redim Preserve listaCargos(contador)
If Isnumeric(Trim(Left(cargo, pos-1))) Then
listaCargos(contador)=Trim(Right(cargo, Len(cargo)-pos))
Else
listaCargos(contador)= cargo
End If
contador=contador+1
End Forall
Call doc_aux.ReplaceItemValue( "lista_cargos", listaCargos )
'Call doc_aux.ReplaceItemValue( "lista_cargos", DocResp.lista )
' lista=DocResp.lista
End If
End If
End If
Else
Call doc_aux.ReplaceItemValue( "lista_cargos", docEstructura.resp_unidad(0) )
End If
End Sub
|