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
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...