Estoy en un ciclo leyendo un recordset(ado) de unos 550,000 registros y en ciertas condiciones voy y actualizo una tabla lo cual lo hace bien, pero en cierto momento me da el error [DBNETLIB][ConnectionOpen (Connect())No existe el servidor SQL Server o se ha denegado el acceso al mismo. He cachado el error y le pongo un resume y después de cierto momento continua con el proceso pero esto me hace muy tardado el proceso y la verdad es que se esta haciendo critico para los procesos que hago.
1 respuesta
Respuesta de pcampora
1
1
pcampora, DATOS PERSONALES: Nacionalidad: Argentina
Si queres pasame el codigo donde te da el error, ya que si no se porque te da el error no te puedo ayudar. Si no podes pasarme el código, por lo menos explicame lo que sucede (normal y con error) y el código (numero) del error.
'Este es el codigo donde se presenta el problema aunque permiteme mencionar que el codigo se ejecuta varias veces y en cierto momento da el error que menciono y como estoy cachando el error, en la rutina de error le doy un resume y repite la instruccion donde tronó has ta que esta se ejecuta correctamente. Private Sub Acumular_Click() On Error GoTo ERRSQL ' "Acumula movimientos aplicados" 'Este programa Acumula los importes de cada concepto de prestamos a los campos de la '*tabla de prestamos Dim rs As New ADODB.Recordset Dim SSQL As String ' SSQL = "select ClavePension,tipoprestamo,numeropagare, sum(CASE LEFT(CLAVEMOVIMIENTO,1) WHEN 'A' THEN capital ELSE CAPITAL *-1 END) as capital, sum(CASE LEFT(CLAVEMOVIMIENTO,1) WHEN 'A' THEN interesNormal ELSE iNTERESNORMAL *-1 END ) as interesNormal," & _ "sum( CASE LEFT(CLAVEMOVIMIENTO,1) WHEN 'A' THEN seguroPasivo ELSE SEGUROPASIVO *-1 END) as seguroPasivo, sum(CASE LEFT(CLAVEMOVIMIENTO,1) WHEN 'A' THEN fondoGarantia ELSE FONDOGARANTIA*-1 END) as fondogarantia " & _ " INTO TMPSDOS from TABLA_DE_MOVIMIENTOS_DE_PRESTAMOS where clavemovimiento <> 'CPP' " & _ " AND YEAR(FECHAMOV) > 2001 group by Clavepension,tipoprestamo,numeropagare " conexion.Execute SSQL DoEvents SSQL = "UPDATE tabla_de_prestamos SET tabla_de_prestamos.ImportePagosCapital = TMPSDOS.CAPITAL), " & _ "ImportePagosInteres = TMPSDOS.INTERESNORMAL," & _ "ImpSegPasivoPagado = TMPSDOS.SEGUROPASIVO," & _ "ImpFonGarPagado = TMPSDOS.FONDOGARANTIA " & _ " FROM tabla_de_prestamos,TMPSDOS " & _ " WHERE tabla_de_prestamos.ClavePension = TMPSDOS.clavepension AND " & _ "tabla_de_prestamos.TIPOPRESTAMO=TMPSDOS.tipoprestamo AND tabla_de_prestamos.NUMEROPAGARE=" & _ "TMPSDOS.numeropagare " conexion.Execute SSQL DoEvents SSQL = "select ClavePension,tipoprestamo,numeropagare, capital, interesNormal," & _ "seguroPasivo, fondogarantia " & _ "from tabla_de_movimientos_de_prestamos where YEAR(FECHAMOV) = 2001 " rs.Open SSQL, conexion, adOpenStatic, adLockReadOnly PB1.Max = rs.RecordCount + 1 rs.MoveFirst Do While Not rs.EOF SSQL = "UPDATE TABLA_DE_PRESTAMOS SET IMPORTEPAGOSCAPITAL= ImportePagosCapital + " & _ "ImporiGpRESTAMO - " & CStr(rs!CAPITAL) & "," & _ "ImportePagosInteres = ImportePagosInteres + iMPORTEiNTCALCULADO - " & CStr(rs!INTERESNORMAL) & "," & _ "ImpSegPasivoPagado = ImpSegPasivoPagado + IMPORTESEGPASIVO - " & CStr(rs!SEGUROPASIVO) & "," & _ "ImpFonGarPagado = ImpFonGarPagado + iMPORTEFONGARANTIA - " & CStr(rs!FONDOGARANTIA) & _ " WHERE ClavePension = '" & rs!clavepension & "' AND TIPOPRESTAMO='" & rs!tipoprestamo & "' AND NUMEROPAGARE=" & CStr(rs!numeropagare) conexion.Execute SSQL DoEvents rs.MoveNext PB1.Value = PB1.Value + 1 Loop Exit Sub ERRSQL: DoEvents Resume End Sub
Creo que el error te lo da en la linea conexión. Execute, aunque no se en cual. Este error suele suceder cuando intentamos ejecutar algo (select, update, insert, etc.) sin antes haber creado (o terminado de crear) la conexión con el servidor. Para saber en que linea, cuando y porque te da este error tienes que utilizar Debugging. Para hacer esto tienes que posicionarte en una linea y hacer clic con el botón derecho. En el menu que te aparece tienes que seleccionar Add -> Breakpoint, ahora esa linea tendrá un punto rojo en el inicio y con el fondo también de rojo. Para ejecutar el Debugging solo tienes que hacer clic en el Play (botoncito azul) de la barra de VB. Ahora, cada vez que se ejecute una linea que tenga breakpoint, se detendrá la ejecución, así puedes ver el valor de cualquier variable, cuantas veces se ejecuta la linea, etc. No te olvides de ponerle puntaje a la respuesta.