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>
