Prezados, boa tarde!
Fiz a função abaixo no VBA do access, onde a sentença de SQL está correta, porém, eventualmente tenho retorno do erro de que o "processo foi cancelado devido a uma interrupção", alguém poderia me ajudar?
Quando o erro ocorre, a depuração mostra que o problema é na linha sql.MoveFirst, ao meu ver, parece que o SQL ainda não retornou todos os dados e o MoveFirst acaba interrompendo o processo. Como resolver isso?
Function LIB_EMP()
Dim conn As ADODB.Connection
Dim sql As ADODB.Recordset
Dim strConnect As String
Dim strSql As String
Dim dtInicial As String
Dim dtFinal As String
dtInicial = InputBox("Informe a Data Inicial:", "Informar Data")
dtFinal = InputBox("Informe a Data Final:", "Informar Data")
strConnect = "DRIVER={IBM DB2 ODBC DRIVER};DSN=***;DBALIAS=***;UID=***;PWD=****"
Set conn = New ADODB.Connection
conn.Open strConnect
'STRING SQL
strSql = "SELECT " & _
"CO.NUMCOOPERATIVA AS COOP, " & _
"B.IDUNIDADEINST AS PAC, " & _
"A.IDPRODUTO, " & _
"COUNT(A.NUMCONTRATOCREDITO) AS QTDE, " & _
"SUM(A.VALORCONTRATOOPCRED) As VALOR " & _
"FROM COOPCONS.CONTRATOCREDITO AS A " & _
"JOIN COOPCONS.INSTITUICAOCOOPERATIVA AS CO ON (CO.IDINSTITUICAO=A.IDINSTITUICAO) " & _
"JOIN COOPCONS.CLIENTEINSTUNIDADE AS B ON (A.IDCLIENTE=B.IDCLIENTE " & _
"AND A.IDINSTITUICAO=B.IDINSTITUICAO) " & _
"JOIN COOPCONS.MODALIDADEPRODUTOINSTITUICAO AS C ON (C.IDPRODUTO=A.IDPRODUTO " & _
"AND A.IDMODALIDADEPRODUTO=C.IDMODALIDADEPRODUTO " & _
"AND A.IDINSTITUICAO=C.IDINSTITUICAO) " & _
"JOIN COOPCONS.CONTRATOMUTUO AS D ON (D.IDPRODUTO=A.IDPRODUTO " & _
"AND D.IDMODALIDADEPRODUTO=A.IDMODALIDADEPRODUTO " & _
"AND D.IDCLIENTE=A.IDCLIENTE " & _
"AND D.NUMCONTRATOMUTUO=A.NUMCONTRATOCREDITO " & _
"AND D.IDINSTITUICAO=A.IDINSTITUICAO) " & _
"JOIN COOPCONS.FINALIDADEOPCRED AS E ON (E.IDPRODUTO=D.IDPRODUTO " & _
"AND E.IDFINALIDADEOPCRED=D.IDFINALIDADEOPCRED " & _
"AND E.IDINSTITUICAO=D.IDINSTITUICAO) "
strSql = strSql & "WHERE A.IDINSTITUICAO IN (22,24,28,29,30,31,264) " & _
"AND A.IDPRODUTO=7 " & _
"AND A.DATAMOVENTRADA BETWEEN '" & dtInicial & "' AND '" & dtFinal & "'" & _
"AND A.IDNIVELRISCOINICIAL<>'HH' " & _
"AND C.DESCMODALIDADEPRODUTO<>'RENEGOCIAÇÃO' " & _
"AND E.DESCFINALIDADEOPCRED NOT LIKE ('CESSAO%') " & _
"AND E.DESCFINALIDADEOPCRED NOT LIKE ('CESSÃO%') " & _
"Group BY " & _
"B.IDUNIDADEINST, " & _
"A.IDPRODUTO, " & _
"CO.NUMCOOPERATIVA"
Set sql = conn.Execute(strSql)
sql.MoveFirst
Do While Not sql.EOF
DoCmd.RunSQL ("INSERT INTO TB_LIBERACOES (COOP, PAC, PRODUTO, QTDE, VALOR) VALUES (" & sql!COOP & "," & sql!PAC & "," & sql!IDPRODUTO & "," & sql!QTDE & ",'" & sql!valor & "')")
sql.MoveNext
Loop
conn.Close
Set sql = Nothing
Set conn = Nothing
End Function
[/color]
Fiz a função abaixo no VBA do access, onde a sentença de SQL está correta, porém, eventualmente tenho retorno do erro de que o "processo foi cancelado devido a uma interrupção", alguém poderia me ajudar?
Quando o erro ocorre, a depuração mostra que o problema é na linha sql.MoveFirst, ao meu ver, parece que o SQL ainda não retornou todos os dados e o MoveFirst acaba interrompendo o processo. Como resolver isso?
Function LIB_EMP()
Dim conn As ADODB.Connection
Dim sql As ADODB.Recordset
Dim strConnect As String
Dim strSql As String
Dim dtInicial As String
Dim dtFinal As String
dtInicial = InputBox("Informe a Data Inicial:", "Informar Data")
dtFinal = InputBox("Informe a Data Final:", "Informar Data")
strConnect = "DRIVER={IBM DB2 ODBC DRIVER};DSN=***;DBALIAS=***;UID=***;PWD=****"
Set conn = New ADODB.Connection
conn.Open strConnect
'STRING SQL
strSql = "SELECT " & _
"CO.NUMCOOPERATIVA AS COOP, " & _
"B.IDUNIDADEINST AS PAC, " & _
"A.IDPRODUTO, " & _
"COUNT(A.NUMCONTRATOCREDITO) AS QTDE, " & _
"SUM(A.VALORCONTRATOOPCRED) As VALOR " & _
"FROM COOPCONS.CONTRATOCREDITO AS A " & _
"JOIN COOPCONS.INSTITUICAOCOOPERATIVA AS CO ON (CO.IDINSTITUICAO=A.IDINSTITUICAO) " & _
"JOIN COOPCONS.CLIENTEINSTUNIDADE AS B ON (A.IDCLIENTE=B.IDCLIENTE " & _
"AND A.IDINSTITUICAO=B.IDINSTITUICAO) " & _
"JOIN COOPCONS.MODALIDADEPRODUTOINSTITUICAO AS C ON (C.IDPRODUTO=A.IDPRODUTO " & _
"AND A.IDMODALIDADEPRODUTO=C.IDMODALIDADEPRODUTO " & _
"AND A.IDINSTITUICAO=C.IDINSTITUICAO) " & _
"JOIN COOPCONS.CONTRATOMUTUO AS D ON (D.IDPRODUTO=A.IDPRODUTO " & _
"AND D.IDMODALIDADEPRODUTO=A.IDMODALIDADEPRODUTO " & _
"AND D.IDCLIENTE=A.IDCLIENTE " & _
"AND D.NUMCONTRATOMUTUO=A.NUMCONTRATOCREDITO " & _
"AND D.IDINSTITUICAO=A.IDINSTITUICAO) " & _
"JOIN COOPCONS.FINALIDADEOPCRED AS E ON (E.IDPRODUTO=D.IDPRODUTO " & _
"AND E.IDFINALIDADEOPCRED=D.IDFINALIDADEOPCRED " & _
"AND E.IDINSTITUICAO=D.IDINSTITUICAO) "
strSql = strSql & "WHERE A.IDINSTITUICAO IN (22,24,28,29,30,31,264) " & _
"AND A.IDPRODUTO=7 " & _
"AND A.DATAMOVENTRADA BETWEEN '" & dtInicial & "' AND '" & dtFinal & "'" & _
"AND A.IDNIVELRISCOINICIAL<>'HH' " & _
"AND C.DESCMODALIDADEPRODUTO<>'RENEGOCIAÇÃO' " & _
"AND E.DESCFINALIDADEOPCRED NOT LIKE ('CESSAO%') " & _
"AND E.DESCFINALIDADEOPCRED NOT LIKE ('CESSÃO%') " & _
"Group BY " & _
"B.IDUNIDADEINST, " & _
"A.IDPRODUTO, " & _
"CO.NUMCOOPERATIVA"
Set sql = conn.Execute(strSql)
sql.MoveFirst
Do While Not sql.EOF
DoCmd.RunSQL ("INSERT INTO TB_LIBERACOES (COOP, PAC, PRODUTO, QTDE, VALOR) VALUES (" & sql!COOP & "," & sql!PAC & "," & sql!IDPRODUTO & "," & sql!QTDE & ",'" & sql!valor & "')")
sql.MoveNext
Loop
conn.Close
Set sql = Nothing
Set conn = Nothing
End Function
[/color]