Spanish Descargar tabla completa de web service y remplazarla

ferpahud

Active Member
Licensed User
Hola buenos dias,

Estoy desarrollando una app para una table, que tiene una base de datos interna en SQLite. Para el modelo de negocio existe otra base de datos online, donde se actualizan los clientes, productos etc.

Lo que quiere es que en un momento determinado, y cuando la tablet tenga acceso a internet, se puede copiar la tabla Cliente de la base de datos online y reemplazarla por la interna.

Alguien sabe como podria hacerlo? Desde ya muchas gracias!
 

rscheel

Well-Known Member
Licensed User
Longtime User
Puedes mirar este hilo

https://www.b4x.com/android/forum/threads/deprecated-conectando-con-mysql.66886/

Lo único que tienes que agregar es el Case GetResultado

B4X:
s.BeginTransaction
          s.ExecNonQuery("DELETE FROM TablaSQLITE")
          For i = 0 To ListGruas.Size - 1
               Dim Datos As Map
               Datos = ListaDatos.Get(i)
               s.ExecNonQuery2("INSERT INTO TablaSQLITE VALUES(?,?,?,?,?)", Array As String(Datos.Get("id"), Datos.Get("nombre"), Datos.Get("tipo"), Datos.Get("estado"), Datos.Get("fecha")))
          Next
             'ToastMessageShow("TablaSQLITE sincronizadas", False)
              s.TransactionSuccessful
              s.EndTransaction
 

ferpahud

Active Member
Licensed User
Puedes mirar este hilo

https://www.b4x.com/android/forum/threads/deprecated-conectando-con-mysql.66886/

Lo único que tienes que agregar es el Case GetResultado

B4X:
s.BeginTransaction
          s.ExecNonQuery("DELETE FROM TablaSQLITE")
          For i = 0 To ListGruas.Size - 1
               Dim Datos As Map
               Datos = ListaDatos.Get(i)
               s.ExecNonQuery2("INSERT INTO TablaSQLITE VALUES(?,?,?,?,?)", Array As String(Datos.Get("id"), Datos.Get("nombre"), Datos.Get("tipo"), Datos.Get("estado"), Datos.Get("fecha")))
          Next
             'ToastMessageShow("TablaSQLITE sincronizadas", False)
              s.TransactionSuccessful
              s.EndTransaction
Que seria Listgruas y ListDatos?
 

ferpahud

Active Member
Licensed User
Es el mismo nombre, solo se me fue cambiarlo, Listgruas dejalo como ListDatos
No entiendo muy bien como funciona, este es el codigo que hice:
B4X:
Sub btnActualizarCliente_Click
    Dim actaulizarClienteJob As HttpJob
    Dim Consulta As String
    actaulizarClienteJob.Initialize("actaulizarClienteJob",Me)
    s.ExecNonQuery("DELETE FROM Cliente")
    Consulta="SELECT * FROM CLIENTE"
    actaulizarClienteJob.PostString("http://111.111.1.11/sincronizar.php, Consulta)
   
End Sub

Sub JobDone(Job As HttpJob)
    If Job.Success Then
            Dim res As String
            res = Job.GetString
    If res.StartsWith("{") Or res.StartsWith("[") Then
        
            Log("Back from Job:" & Job.JobName )
            Log("Job Text: " & res)
            Dim parser As JSONParser
            parser.Initialize(res)

        Select Job.JobName
        
            Case "GetResultado"
               Dim ListaDatos As List
                 ListaDatos = parser.NextArray 'returns a list with maps
                If ListaDatos.Size == 0 Then
                   'Algun mensaje.
                Else
                  s.BeginTransaction
                  s.ExecNonQuery("DELETE FROM Cliente")
                  For i = 0 To ListaDatos.Size - 1
                       Dim Datos As Map
                       Datos = ListaDatos.Get(i)
                       s.ExecNonQuery2("INSERT INTO Cliente VALUES(?,?,?,?,?)", Array As String(Datos.Get("id"), Datos.Get("nombre"), Datos.Get("tipo"), Datos.Get("estado"), Datos.Get("fecha")))
                  Next
                         'ToastMessageShow("TablaSQLITE sincronizadas", False)
                          s.TransactionSuccessful
                          s.EndTransaction
                End If
        End Select
    Else
    'alguna condicion
    End If
    Else
        'ToastMessageShow("Error: " & Job.ErrorMessage, True)
    End If
    Job.Release

End Sub

Como recorro el parser y voy agregando los datos a la tabla SQLite?

Gracias
 

rscheel

Well-Known Member
Licensed User
Longtime User
La verdad estas muy mal, al parecer no te manejas mucho que digamos.

Esto no lo toques déjalo igual

B4X:
Sub GetData(SQL_Cadena As String, sJob As String)
    Dim GetSQL As HttpJob
    GetSQL.Initialize(sJob, Me)
    GetSQL.download2("http://tuurlservidor/tu.php", Array As String ("SQL", SQL_Cadena))
End Sub

Tu boton quedaria de la siguente manera

B4X:
Sub btnActualizarCliente_Click           
                 GetData("SELECT * FROM CLIENTE" ,"GetResultado")
End Sub

El otro código se ve bien.
 

ferpahud

Active Member
Licensed User
La verdad estas muy mal, al parecer no te manejas mucho que digamos.

Esto no lo toques déjalo igual

B4X:
Sub GetData(SQL_Cadena As String, sJob As String)
    Dim GetSQL As HttpJob
    GetSQL.Initialize(sJob, Me)
    GetSQL.download2("http://tuurlservidor/tu.php", Array As String ("SQL", SQL_Cadena))
End Sub

Tu boton quedaria de la siguente manera

B4X:
Sub btnActualizarCliente_Click          
                 GetData("SELECT * FROM CLIENTE" ,"GetResultado")
End Sub

El otro código se ve bien.
Perfecto! ahora si funciono, muchas gracias. La verdad que si, ando un poco mareado y perdido con esto.... pido disculpas por mis consultas que deben ser bastantes basicas....

En el caso que quisiera añadir una barra de progreso por ejemplo, hasta que se carguen todos los registros en la base de datos, que libreria o funcion debo utilizar?
 

rscheel

Well-Known Member
Licensed User
Longtime User
Es tan rápido el proceso si son pocos registros que una barra de progreso o de sincronizan no se alcanza ni a ver, yo te recomendaría de que inicies la carga de los datos al inicio de la aplicación, sin tener que apretar botones.
 

ferpahud

Active Member
Licensed User
Es tan rápido el proceso si son pocos registros que una barra de progreso o de sincronizan no se alcanza ni a ver, yo te recomendaría de que inicies la carga de los datos al inicio de la aplicación, sin tener que apretar botones.
Cuanto serian pocos registros? En realidad no lo hago al inicio porque esta pensada para ser usada en una tablet, y no siempre tiene conexión a internet, ademas no siempre necesita actualizar sus datos, solo cuando tengan algun cambio.

Es para una distribuidora de alimentos y bebidas, a lo mejor la tabla cliente no tenga muchos registros, pero creo que si los tendrá la tabla producto, y sera la que mas deberán actualizar....
 

rscheel

Well-Known Member
Licensed User
Longtime User
Lo haces al inicio primero compruebas que tenga conexión y luego sincronizas y si no tiene conexión trabajas con los datas que ya tengas cargados.
 

ferpahud

Active Member
Licensed User
Lo haces al inicio primero compruebas que tenga conexión y luego sincronizas y si no tiene conexión trabajas con los datas que ya tengas cargados.
Como dije, no siempre va a ser necesario actualizar, solo cuando se haya realizado algun cambio, si lo hago al iniciar la aplicación seria un gasto de recursos inesesarios. Aparte las tablas posibles a actualizar serian, cliente, empleado, productos. Siendo la que mas puede variar la de productos, y estaria actualizando las otras dos sin necesidad.... Se debe poder elegir cual se quiere actualizar y no hacerlo de forma automatica. Por eso mi pregunta original, de como colocar una barra de progreso.

Gracias!
 

rscheel

Well-Known Member
Licensed User
Longtime User
Bueno mi ultimo consejo podrías tener una tabla de versiones y solo actualizar la que tenga una nueva versión, recuerda que no la vas a usar tu si no un usuario común y no siempre estos tienen la agilidad de apretar un botón para actualizar las tablas.
 

ferpahud

Active Member
Licensed User
Bueno mi ultimo consejo podrías tener una tabla de versiones y solo actualizar la que tenga una nueva versión, recuerda que no la vas a usar tu si no un usuario común y no siempre estos tienen la agilidad de apretar un botón para actualizar las tablas.
Gracias por tu consejo y respuestas, voy a analizarlo con tiempo para ver que decisión tomar. Muchas gracias!
 

desof

Well-Known Member
Licensed User
Longtime User
Hola, estoy precisamente necesitar algo como esto creo.
Quisiera que mi app al abrir se conecte y verifique un valor de una WEB que haya establecido de antemano como un numero de version y si este es mayor que la actualice.
Esto es para evitar actualizar muy seguido la app y sólo reemplazar la Base.

Me serviría para reemplazar la Base de datos completa por ejemplo?
No hay un ejemplo con los scripts del php tambien ?
 
Top