Fijate si no tenes abierta o haciendo algo la tabla de sensores (o datos)
antes de llamar a esta rutina. Por ejemplo, tenes abierto un cursor con la
tabla datos al principio de la rutina y luego no lo usas para nada… no
deberia, pero podria estar tomando la tabla (esta abierta como lock
optimista) 

 

Si ya en el primer select se te queda, y esa tabla no tienen enormes
cantidades de registros, es obvio que el problema viene de otro lado y no de
esta rutina en particular. Proba lo de los indices para el select (siempre
va a ayudar pero si la tabla no tiene muchos registros seguramente ahí no
esta el problema)

 

Saludos

Gustavo Martucci

 

  _____  

De: [email protected] [mailto:[email protected]] En nombre de Carina V.
Barca
Enviado el: Lunes, 04 de Mayo de 2009 03:15 p.m.
Para: vbusers List Member
Asunto: [vbusers] Demora guardar datos

 

Gracias Daniel por contestar, te cuento que puse break points y se demora
una eternidad en hacer algo, se queda como esperando algo, y despues lo hace
de una en un ratito (los select y los insert), por eso no tengo idea que
puede ser, le puse break points a todo, incluso hice un trace para tratar de
descubrir que pasa y no pude detectar que es.

Voy a tener en cuenta todo lo que me aconsejas, si surge algo pregunto.

Muchas gracias

Saludos

 

Carina

  _____  

Date: Mon, 4 May 2009 14:29:56 -0300
Subject: [vbusers] Demora guardar datos
From: [email protected]
To: [email protected]

Hola Carina

La cuestion es saber donde esta la demora..

Te fijate cuanto tarda cada select?, los predicados se benefician de algun
indice o pK?

Pondría un break point antes de cada select y le daria F8 para que lo
ejecute, aver si la demora esta alli.
Por otra parte te doy un par de consejos

1.      Deberias hacer la actualización entro de una transaction. ( si te da
error a la mitad te queda actualizado solo una parte )
2.      Usaría un ebug.print now entre cada select y execute, para saber
cuanto tardan
3.      Trataría de separar la rutina en un par de metodos, como para poder
seguir mejor el código, asi es muy confuso.

Por ejemplo esto es candidato a ser una funcion...

          rsBd.Open "select id_sensor, ID_tipo_sensor, slot from sensores
where slot=" & i & " and id_estacion =" & estacion & " order by slot asc",
cnl, adoenkeyset, adLockOptimistic
          id_tipo_sensor = rsBd.Fields(1)
          id_sensor = rsBd.Fields(0)
          rsBd.Close

Daniel Calvin



2009/5/4 Carina V. Barca <[email protected]>

Hola a todos: tengo una aplicacion hecha en visual basic 6 que a la hora de
guardar datos se demora 10 minutos, el codigo que utilizo es el siguiente:
 
Private Sub guardaBaseDatos(estacion As Integer)
Dim rsBd As ADODB.Recordset
Set rsBd = New Recordset
Dim rsDatos As ADODB.Recordset
Set rsDatos = New Recordset
rsDatos.Open "Select * from datos", cnl, adoenkeyset, adLockOptimistic
         
filas = 2
i = 1
cant = 0
For j = 1 To 12
        Select Case estacion
            Case 1: slotActual = msf_cadena1.TextMatrix(1, 3 + i)
            Case 2: slotActual = msf_cadena2.TextMatrix(1, 3 + i)
            Case 3: slotActual = msf_cadena3.TextMatrix(1, 3 + i)
            Case 4: slotActual = msf_cadena4.TextMatrix(1, 3 + i)
            Case 5: slotActual = msf_cadena5.TextMatrix(1, 3 + i)
            Case 6: slotActual = msf_cadena6.TextMatrix(1, 3 + i)
            Case 7: slotActual = msf_cadena7.TextMatrix(1, 3 + i)
            Case 8: slotActual = msf_cadena8.TextMatrix(1, 3 + i)
            Case 9: slotActual = msf_cadena9.TextMatrix(1, 3 + i)
           ' Case 10: slotActual = msf_cadena10.TextMatrix(1, 3 + i)
            
        End Select
        If slotActual = "N" Or slotActual = "CB" Then
          filas = filas + 1
          i = i + 1
        Else
          'rsDatos.AddNew
          Select Case estacion
            Case 1: id_estacion = msf_cadena1.TextMatrix(1, 3)
            Case 2: id_estacion = msf_cadena2.TextMatrix(1, 3)
            Case 3: id_estacion = msf_cadena3.TextMatrix(1, 3)
            Case 4: id_estacion = msf_cadena4.TextMatrix(1, 3)
            Case 5: id_estacion = msf_cadena5.TextMatrix(1, 3)
            Case 6: id_estacion = msf_cadena6.TextMatrix(1, 3)
            Case 7: id_estacion = msf_cadena7.TextMatrix(1, 3)
            Case 8: id_estacion = msf_cadena8.TextMatrix(1, 3)
            Case 9: id_estacion = msf_cadena9.TextMatrix(1, 3)
           ' Case 10: id_estacion = msf_cadena10.TextMatrix(1, 3)
            
          End Select
          On Error Resume Next
          rsBd.Open "select id_sensor, ID_tipo_sensor, slot from sensores
where slot=" & i & " and id_estacion =" & estacion & " order by slot asc",
cnl, adoenkeyset, adLockOptimistic
          id_tipo_sensor = rsBd.Fields(1)
          id_sensor = rsBd.Fields(0)
          rsBd.Close
          Select Case estacion
            Case 1: v_valor = msf_cadena1.TextMatrix(1, 3 + i)
            Case 2: v_valor = msf_cadena2.TextMatrix(1, 3 + i)
            Case 3: v_valor = msf_cadena3.TextMatrix(1, 3 + i)
            Case 4: v_valor = msf_cadena4.TextMatrix(1, 3 + i)
            Case 5: v_valor = msf_cadena5.TextMatrix(1, 3 + i)
            Case 6: v_valor = msf_cadena6.TextMatrix(1, 3 + i)
            Case 7: v_valor = msf_cadena7.TextMatrix(1, 3 + i)
            Case 8: v_valor = msf_cadena8.TextMatrix(1, 3 + i)
            Case 9: v_valor = msf_cadena9.TextMatrix(1, 3 + i)
            'Case 10: v_valor = msf_cadena10.TextMatrix(1, 3 + i)
          End Select
          If (v_valor) = "" Then
              valor = 0
          Else
              valor = CDbl(v_valor)
          End If
          Select Case estacion
            Case 1: v_fecha = msf_cadena1.TextMatrix(1, 1)
            Case 2: v_fecha = msf_cadena2.TextMatrix(1, 1)
            Case 3: v_fecha = msf_cadena3.TextMatrix(1, 1)
            Case 4: v_fecha = msf_cadena4.TextMatrix(1, 1)
            Case 5: v_fecha = msf_cadena5.TextMatrix(1, 1)
            Case 6: v_fecha = msf_cadena6.TextMatrix(1, 1)
            Case 7: v_fecha = msf_cadena7.TextMatrix(1, 1)
            Case 8: v_fecha = msf_cadena8.TextMatrix(1, 1)
            Case 9: v_fecha = msf_cadena9.TextMatrix(1, 1)
            'Case 10: v_fecha = msf_cadena10.TextMatrix(1, 1)
          End Select
          If v_fecha = "" Then
              fecha = "01/01/1900"
          Else
              fecha = v_fecha
           End If
          Select Case estacion
            Case 1: v_hora = msf_cadena1.TextMatrix(1, 2)
            Case 2: v_hora = msf_cadena2.TextMatrix(1, 2)
            Case 3: v_hora = msf_cadena3.TextMatrix(1, 2)
            Case 4: v_hora = msf_cadena4.TextMatrix(1, 2)
            Case 5: v_hora = msf_cadena5.TextMatrix(1, 2)
            Case 6: v_hora = msf_cadena6.TextMatrix(1, 2)
            Case 7: v_hora = msf_cadena7.TextMatrix(1, 2)
            Case 8: v_hora = msf_cadena8.TextMatrix(1, 2)
            Case 9: v_hora = msf_cadena9.TextMatrix(1, 2)
            'Case 10: v_hora = msf_cadena10.TextMatrix(1, 2)
          End Select
          
          If v_hora = "" Then
              hora = "12:00"
          Else
              hora = v_hora
          End If

          v_sql = "INSERT INTO [Datos]([ID_Estacion], [ID_Tipo_Sensor],
[Valor], [Fecha], [Hora], dato) VALUES (" & estacion & ", " & id_tipo_sensor
& "," & Replace(valor, ",", ".") & ", '" & fecha & "', '" &
FormatDateTime(hora, 4) & "', 0)"
          v_sqlTMP = "INSERT INTO [Datos_tmp]([ID_Estacion], id_sensor,
[id_Tipo_Sensor], [Valor], [Fecha], [Hora], dato) VALUES (" & estacion & ",
" & id_sensor & ", " & id_tipo_sensor & "," & Replace(valor, ",", ".") & ",
'" & fecha & "', '" & FormatDateTime(hora, 4) & "', 0)"
          'MsgBox v_sql
       
          
          
          cnl.Execute (v_sql)
          cnl.Execute (v_sqlTMP)
          filas = filas + 1
          i = i + 1
          cant = cant + 1
        End If
Next j
End Sub
 
 
Alguien tiene idea que puede ser? donde puedo buscar?
Muchas gracias
 
Saludos
 
Carina

  _____  

Más rápido, fácil, seguro y con lo que más te gusta de Windows Live, así es
el nuevo Internet Explorer 8 ¡Descárgatelo!
<http://ie8.msn.com/microsoft/internet-explorer-8/es-es/ie8.aspx>  




-- 
Daniel A. Calvin
Cooperator Team Member
http://www.cooperator.com.ar
Microsoft Certified Professional

 

  _____  

El nuevo Windows Live tiene mucho que ofrecerte. Descúbrelo en estos vídeos
<http://www.windowslive.es%20> 

Responder a