Visual Basic - EXTRAER DATOS DE ACCESS

Life is soft - evento anual de software empresarial
 
Vista:

EXTRAER DATOS DE ACCESS

Publicado por IVAN (6 intervenciones) el 23/10/2016 17:00:18
Tengo una aplicación V.B. conectada a una base de datos Access. Lo que hago es hacer una consulta a una de las tablas (que contiene un campo "FECHA" y un campo "SALDO"). En esa tabla almaceno un registro por cada mes que tiene el año (ej. enero16, febrero16, marzo16.... hasta diciembre2100) y en su respectivo campo "Saldo" almaceno un importe. Lo que hace mi aplicación es que cuando actualizo el "Saldo" de uno de esos meses, me actualiza todos los registros posteriores hasta llegar a "diciembre2100". El problema que tengo es que como cada actualización de registro implica actualizar a la vez más de 800 registros, pues tarda como 20 o 30 segundos en actualizarlo todo, y me gustaría que se actualizara al momento de dar la orden de actualizar. Entonces me gustaría saber de qué manera puedo hacer una consulta a la base de datos para obtener todos los registros de la tabla, trabajar con esos datos fuera de la base de datos, y hacer una sola operacion de UPDATE, en vez de 800 UPDATE's). El código que uso es el siguiente.

Utilizo un "While" para que me ejecute un código para actualizar registro por registro hasta llegar al año 2100... y el código que uso para actualizar los registros es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Dim consulta13 As String
Dim comando13 As New OleDbCommand
Dim adaptador13 As New OleDbDataAdapter
Dim lector13 As OleDbDataReader
Dim saldomes As Double
Dim saldototal As Double
consulta13 = "SELECT * FROM saldos WHERE CodUsuario=" & usuarios.id & " AND CodPlan=" & planes.id & " AND CodCuenta=" & ComboBoxCuenta.SelectedValue & " AND Fecha=@Fecha"
comando13 = New OleDbCommand(consulta13, bbdd.conexion)
comando13.Parameters.AddWithValue("@Fecha", "01/" & Month(variables.fechasfuturas) & "/" & Year(variables.fechasfuturas))
adaptador13.SelectCommand = comando13
lector13 = comando13.ExecuteReader
If lector13.HasRows = True Then
    If lector13.Read Then
        saldomes = lector13("Saldo")
        If operaciones.gastoingreso = 1 Then
            saldototal = saldomes - variables.resultado
        Else
            saldototal = saldomes + variables.resultado
        End If
        Dim consulta4 As String
        Dim comando4 As New OleDbCommand
        Dim adaptador4 As New OleDbDataAdapter
        consulta4 = "UPDATE saldos SET Saldo=@Saldo WHERE CodUsuario=" & usuarios.id & " AND CodPlan=" & planes.id & " AND CodCuenta=" & ComboBoxCuenta.SelectedValue & " AND Fecha=@Fecha"
        comando4 = New OleDbCommand(consulta4, bbdd.conexion)
        comando4.Parameters.AddWithValue("@Saldo", saldototal)
        comando4.Parameters.AddWithValue("@Fecha", "01/" & Month(variables.fechasfuturas) & "/" & Year(variables.fechasfuturas))
        comando4.ExecuteNonQuery()

Este código lo realiza más de 800 veces cuando pulso un botón "Actualizar", hasta llegar al año 2100, por eso se ralentiza.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder