Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Problemas de conexion

31 views
Skip to first unread message

Carlos Silberberg

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to
Porque con este código, da error de conexion (no siempre) o timeout???
Gracias, Carlos
Private Sub LIQ2_Click()
Dim cnn1 As ADODB.Connection
Dim rst1 As ADODB.Recordset
Dim rst2 As ADODB.Recordset
Dim rst3 As ADODB.Recordset
Dim rst4 As ADODB.Recordset
Dim rst5 As ADODB.Recordset
Dim rst6 As ADODB.Recordset
Dim int1 As Integer
Dim x, m, s
Dim cmd1 As ADODB.Command
Dim cmd2 As ADODB.Command
Dim cmd3 As ADODB.Command
Set cnn1 = New ADODB.Connection
strCnn = "Provider=sqloledb;DataSource=Equipo1;User ID=sa;Password=;Initial
Catalog=BEnero2"
cnn1.Open strCnn

Set rst1 = New ADODB.Recordset
Set rst2 = New ADODB.Recordset
Set rst3 = New ADODB.Recordset
Set rst4 = New ADODB.Recordset
Set rst5 = New ADODB.Recordset
Set rst6 = New ADODB.Recordset

Set cmd1 = New ADODB.Command
Set cmd2 = New ADODB.Command
Set cmd3 = New ADODB.Command
With cmd1
.ActiveConnection = CurrentProject.Connection
.CommandText = "delete from lq"
.CommandType = adCmdText
.Execute
.Prepared = True
End With
With cmd2
.ActiveConnection = CurrentProject.Connection
.CommandText = "delete from tmovimm"
.CommandType = adCmdText
.Execute
.Prepared = True
End With
With cmd3
.ActiveConnection = CurrentProject.Connection
.CommandText = "delete from Desctos"
.CommandType = adCmdText
.Execute
.Prepared = True
End With
rst1.CursorType = adOpenForwardOnly
rst1.LockType = adLockReadOnly
rst1.Open "pNetosM", cnn1, , , adCmdStoredProc
'-----------------------------------------------
rst5.CursorType = adOpenForwardOnly
rst5.LockType = adLockReadOnly
rst5.Open "pvDesctosM", cnn1, , , adCmdStoredProc
'-------------------------------------------------
rst3.CursorType = adOpenForwardOnly
rst3.LockType = adLockReadOnly
rst3.Open "MOVIMM", cnn1, , , adCmdStoredProc

rst2.CursorType = adOpenForwardOnly
rst2.LockType = adLockOptimistic

rst2.Open "Lq", cnn1, , , adCmdTable
rst4.CursorType = adOpenForwardOnly
rst4.LockType = adLockOptimistic
rst4.Open "tMovimm", cnn1, , , adCmdTable

'---------------------------------------------------------------------------
rst6.CursorType = adOpenForwardOnly
rst6.LockType = adLockOptimistic

rst6.Open "desctos", cnn1, , , adCmdTable
Do While Not rst3.EOF
rst4.AddNew


rst4!IdNomina = rst3!IdNomina
rst4!Idtarea = rst3!Idtarea

rst4!TotalTarea = rst3!TotalTarea
rst4!VALOR = rst3!VALOR
rst4!NOMBRE = rst3!NOMBRE
rst4!CATEGORIA = rst3!CATEGORIA
rst4!sueldo = rst3!sueldo
rst4!CUIL = rst3!CUIL
rst4!FECHAINGRESO = rst3!FECHAINGRESO
rst4!DIRECCION = rst3!DIRECCION
rst4!Localidad = rst3!Localidad
rst4!TAREA = rst3!TAREA
rst4.Update
rst3.MoveNext
Loop

Do While Not rst1.EOF
x = rst1!NETO
m = rst1!IdNomina
s = convert(rst1!NETO)
rst2.AddNew
rst2!pesos = s
rst2!IdNomina = m
rst2!NETO = x
rst2!Presentismo = rst1!Presentismo
rst2!tsf = rst1!tsf
rst2!TotalDesc = rst1!TotalDesc
rst2!mtotal = rst1!mtotal
rst2.Update
rst1.MoveNext
Loop
Do While Not rst5.EOF
rst6.AddNew


rst6!IdNomina = rst5!IdNomina
rst6!TAREA = rst5!TAREA


rst6!VALOR = rst5!VALOR
rst6!DESCTOS = rst5!DESCTOS
rst6!mtotal = rst5!mtotal

rst6.Update
rst5.MoveNext
Loop

MsgBox ("LIQUIDACION OK")
rst1.Close
rst2.Close
rst3.Close
rst4.Close
rst5.Close
rst6.Close
End Sub


Fernando G. Guerrero

unread,
Feb 22, 2000, 3:00:00 AM2/22/00
to
Si experimentas problemas intermitentes de conexión, puedes intentar ampliar
el tiempo límite de conexión, mediante la propiedad ConnectionTimeout, por
defecto tiene un valor de 15 segundos, pero puede ser insuficiente en tu
caso. Si quieres ampliarlo a un minuto debería modificar tu código del
siguiente modo:

Set cnn1 = New ADODB.Connection
strCnn = "Provider=sqloledb;DataSource=Equipo1;User ID=sa;Password=;Initial

Catalog=BEnero2;"
cnn1.ConnectionTimeout = 60
cnn1.Open strCnn

Por cierto, te faltaba un punto y coma detrás de BEnero2.

En cuanto a las consultas, también pueden provocar problemas de timeout.
Esto se puede deber a la complejidad de la consulta o a bloqueos por otras
conexiones. Para alargar el timeout de consulta puedes utilizar la propiedad
CommandTimeout del objeto Command.

Veo que abres las tablas Lq, tMovimm y desctos en modo adTable. Este modo de
apertura se ofrece solamente por motivos de compatibilidad, pero es un
método muy ineficiente. Puedes obtener mejor rendimiento abriendo una corta
consulta en dichas tablas en modo adCmdText, ya que la única razón de
apertura de las mismas es la de añadir registros, algo como (para SQL Server
7.0 o MSDE 1.0):

rst2.CursorType = adOpenForwardOnly
rst2.LockType = adLockOptimistic

rst2.Open "SELECT TOP 1 * Lq", cnn1, , , adCmdText

Pero echándole un vistazo a tu código, veo que lo que haces es ejecutar un
procedimiento almacenado y utilizando este resultado insertar registros en
otra tabla. En este caso yo haría todo el trabajo directamente en SQL
Server, lo cual sería mucho más eficiente. Por ejemplo, los registros a
insertar en tMovimm vienen de la ejecución del procedimiento almacenado
Movimm, lo cual quiere decir que en dicho procedimiento almacenado tienes
una instrucción SELECT que muestra, al menos los campos a introducir en
tMovimm. Si el único cometido de Movimm es el de ser ejecutada para insertar
registros en tMovimm, modifícala para que haga todo el trabajo mediante una
instrucción del tipo:

INSERT INTO tMovimm
(IdNomina,
Idtarea,
TotalTarea,
VALOR,
NOMBRE,
CATEGORIA,
sueldo,
CUIL,
FECHAINGRESO,
DIRECCION,
Localidad,
TAREA)
SELECT ... Aquí pondrás la instrucción SELECT que ya tenías en el
procedimiento almacenado.

Si el procedimiento Movimm te devuelve exclusivamente los campos solicitados
y en el orden que los necesitas y quieres utilizar el procedimiento para
otros procesos sin tocarlo, podrías crear un procedimiento almacenado con
una única instrucción:

INSERT INTO tMiovimm
(IdNomina,
etc.
...
)
EXECUTE Movimm

Este procedimiento almacenado podría ser llamado desde VB simplemente
creando un objeto Command y llamando el método Execute sin abrir Recordset
alguno en él.

Si tienes algún problema con esto mándame el procedimiento almacenado Movimm
y te sugerriré cómo modificarlo.

--
Fernando G. Guerrero
MCDBA, MCSD, MCT, MCSE+Internet
QA Group Ltd., UK


"Carlos Silberberg" <c...@supernet.com.ar> wrote in message
news:OXLPkNNf$GA.264@cppssbbsa05...

0 new messages