Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: jrhomer en 15 Noviembre 2006, 10:31 am



Título: Cuando sabemos que ha insertado el registro?
Publicado por: jrhomer en 15 Noviembre 2006, 10:31 am
 Hola foro... tengo un bucle que me trae algo despistado :P

For N = 0 To N_EJEMPLARES
   
        For I = 1 To 13
            If DATOS(N, I) = "" Then
                DATOS(N, I) = "0"
            End If
        Next I
   
        P = Str(posi("VALORACION")) ' aquí nos dice cual es el ID de la tabla, nos devuelve el registro que tiene que insertar.
   
        SQL = "INSERT INTO VALORACION VALUES ("
        SQL = SQL + P + ", "   ' ID_VALORACION
        SQL = SQL + DATOS(N, 0) + ", "             
        SQL = SQL + id_concurso + ", "             
        SQL = SQL + COD_JUEZ + ", "               
        SQL = SQL + DATOS(N, 12) + ", "           
        SQL = SQL + DATOS(N, 13) + ", "           
        SQL = SQL + DATOS(N, 1) + ", "     
        SQL = SQL + DATOS(N, 2) + ", "     
        SQL = SQL + DATOS(N, 3) + ", "     
        SQL = SQL + DATOS(N, 4) + ", "     
        SQL = SQL + DATOS(N, 5) + ", "     
        SQL = SQL + DATOS(N, 6) + ", "     
        SQL = SQL + DATOS(N, 7) + ", "     
        SQL = SQL + DATOS(N, 8) + ", "     
        SQL = SQL + DATOS(N, 9) + ", "     
        SQL = SQL + DATOS(N, 10) + ", "     
        SQL = SQL + DATOS(N, 11) + ", "     
        SQL = SQL + "'" + DATOS(N, 14) + "'"   
        SQL = SQL + ")"
       
        COM.CommandText = SQL
        Set Rec = COM.Execute
    Next N

El caso es que mi problema viene cuando se repite el contenido del bucle (por eso es un bucle :D) y es que según he estado comprobando no da tiempo desde que se ejecuta la sentencia Set Rec = COM.Execute hasta que se vuelve a llamar a P = Str(posi("VALORACION")) y por lo tanto P es la misma que en la vuelta anterior ene l bucle y al repetirse el ID no podemos insertar el nuevo regitro en la tabla.

Si hago la ejecución paso a paso.... (como lógicamente soy mas lento que la máquina) no tengo problema pq mientras voy pasando de sentencia en sentencia da tiempo a que se inserte el registro de Set Rec = COM.Execute y cuando vuelve a pasar por P = Str(posi("VALORACION")) no tengo problema.

¿Cómo puedo solucionar esto para que no me de ese error?

he probado con Doevents... pero ne he conseguido que se solucione el problema.

También he probado añadiendo un pequeño bucle dentro del FOR en donde mientras la P sea la misma que acabamos de insertar no avancemos en la ejecución del programa.

Pero tampoco he conseguido solucionar el problema. :P

¿De que modo lo puedo solucionar?

Un  saludo y gracias como siempre.


Título: Re: Cuando sabemos que ha insertado el registro?
Publicado por: Hans el Topo en 15 Noviembre 2006, 22:27 pm
tienes que refrescar el rs antes de volver a tomar la posicion, lo que yo hago es hacerla directamente sobre el cn



Código:
'supongo que ya lo tendras declarado y tal
'Dim cn As New adodb.Connection    'conector datos base de datos
'grabo directamente en la base de datos mediante una sentencia SQL
cn.Execute sql