Spanish (SOLUCIONADO)Duda Insert en bucle jrdc

TheFalcon

Active Member
Licensed User
Longtime User
Buenas y disculpad, sigo con el jrdc(y la verdad me va muy bien) , pero estoy intentando añadir los datos de una tabla, a una base de datos, pero solo me añade el 1º registro.
El resto, me recoge valores NULL y no se por que

Añado 3 registros y en le log me devuelve
B4X:
ARTICULO SIN ALCOHOL
Inserted successfully!
ARTICULO null
Inserted successfully!
ARTICULO null
Inserted successfully!


Este sería el código que uso

B4X:
For i = 0 To FlexGrid2.RowCount -1
    
    fila_recorrida = i
    
    Variables_Pedidos  ' aqui es donde tengo TODAS las variables en las que meto los datos al ir recorriendo
        
    
    Log ( "ARTICULO " & Articulo_dgv)
    
        
        Dim cmd As DBCommand = CreateCommand("Insert", Array(Null,Articulo_dgv))
        Dim j As HttpJob = CreateRequest.ExecuteBatch(Array(cmd), Null)
        Wait For(j) JobDone(j As HttpJob)
                
        If j.Success Then
            Log("Inserted successfully!")
        End If
        
        j.Release
    
    
    Next


en variable_pedidos lo que tengo para no saturar el codigo son las variables un ejemplo

B4X:
Articulo_dgv = FlexGrid2.GetCellValue(fila_recorrida,1)
TOTAL_remplace = FlexGrid2.GetCellValue(fila_recorrida,3)
cantidad_dgv= FlexGrid2.GetCellValue(fila_recorrida,8)

El caso es que me añade el 1 registro y el resto con lso campos NULL, he probado añadiendo las variables directamente en el For i = 0 To FlexGrid2.RowCount -1 y nada.

pero si ELIMINO o COMENTO el insert, si me muestra los valores bien, sin ningun NULL. y he estado buscando y no encuentro el por que.

B4X:
        Dim cmd As DBCommand = CreateCommand("Insert", Array(Null,Articulo_dgv))
        Dim j As HttpJob = CreateRequest.ExecuteBatch(Array(cmd), Null)
        Wait For(j) JobDone(j As HttpJob)
        If j.Success Then

            Log("Inserted successfully!")

        End If     

        j.Release
 

josejad

Expert
Licensed User
Longtime User
Hola, te respondo con el móvil y ya le echaré un vistazo más a fondo con el portatil encendido, pero, por lo que me parece ver… en vez de meter en el batch las tres instrucciones, metes una y ejecutas el batch…
En el bucle deberias meter las tres instrucciones, y fuera del bucle ejecutar el batch. Saca del bucle la llamada a jRDC2.
Además, qué hace la linea Variables_Pedidos? Es una lista? No veo que la recorras… anque creo que has resumido el código, pero ponlo completo.

Mira en este ejemplo a partir de la linea 9 como ejecutar un batch

 

TheFalcon

Active Member
Licensed User
Longtime User
Hola, te respondo con el móvil y ya le echaré un vistazo más a fondo con el portatil encendido, pero, por lo que me parece ver… en vez de meter en el batch las tres instrucciones, metes una y ejecutas el batch…
En el bucle deberias meter las tres instrucciones, y fuera del bucle ejecutar el batch. Saca del bucle la llamada a jRDC2.
Además, qué hace la linea Variables_Pedidos? Es una lista? No veo que la recorras… anque creo que has resumido el código, pero ponlo completo.

Mira en este ejemplo a partir de la linea 9 como ejecutar un batch


lo de variable pedido es por tener el sub de la consulta limpio
Es esto , hasta 36 registros por fila

Pero aunque meta los registros directamente en el SUB de la consulta, me hace lo mismo 1 registro OK el resto NULL
B4X:
Sub Variables_Pedidos
  
    precio_dgv = 0
    Precio2_DGV = 0
      
    '----  variables recogidas del FLEXIPEDIDOS
    cantidad_dgv = FlexGrid2.GetCellValue(fila_recorrida,0)
    Articulo_dgv = FlexGrid2.GetCellValue(fila_recorrida,1)
  
    TOTAL_remplace = FlexGrid2.GetCellValue(fila_recorrida,3)
    cantidad_dgv= FlexGrid2.GetCellValue(fila_recorrida,8)
    precio_dgv= FlexGrid2.GetCellValue(fila_recorrida,9)
    Precio2_DGV = FlexGrid2.GetCellValue(fila_recorrida,10)
    Total = FlexGrid2.GetCellValue(fila_recorrida,11)
    CodigoArt_DGV= FlexGrid2.GetCellValue(fila_recorrida,12)
    Articulo_dgv= FlexGrid2.GetCellValue(fila_recorrida,13)
  
end sub

meto todo los datos de una fila que tiene 36 columnas

Miro lo que me pusiste y te digo, gracias como siempre José, un saludo
 
Last edited:

TheFalcon

Active Member
Licensed User
Longtime User
LISTO! , gracias Jose, el ejemplo no lo entendi bien, aunque me he de parar mas adelante por que quiero ver la posibilidad de ver si en JRDC , puedo hacer consulta pero a 2 BASES DE DATOS distintas, ya que veo que solo de declara 1. (Pero eso para cuando llegue el momento de preguntar)

Me enfoque en lo que me comentaste de que lleno el batch y lo mando y era hay el problema, problema que no conseguía ver (en estas consultas algo ando perdido soy más de consultas SQL)

Así quedo y así funciono

B4X:
Sub insertar_Cuentas_ENVIAR
    Dim dia As String =DateTime.Date(DateTime.Now)
    Dim hora As String = DateTime.Time(DateTime.Now)

    For i = 0 To FlexGrid2.RowCount -1
    
        fila_recorrida = i
        
    Variables_Pedidos  ' aqui es donde tengo TODAS las variables en las que meto los datos al ir recorriendo

    
    
        '************************    CONSULTA PARA INSERT   **************************************
        
        Dim cmd As DBCommand = CreateCommand("Insert_Tcuentas", Array(Null,Articulo_dgv))
        Dim j As HttpJob = CreateRequest.ExecuteBatch(Array(cmd), Null)

        '************************   FIN   CONSULTA PARA INSERT   **************************************
    Next

    Wait For(j) JobDone(j As HttpJob)
    If j.Success Then
        Log("Inserted successfully!")
    End If
    j.Release


End Sub

Como siempre muchísimas gracias por tu tiempo, ami me acabas de quitar el irme a dormir sin darle vueltas al coco que llevo casi toda la tarde con esto :p
 

josejad

Expert
Licensed User
Longtime User
Me alegro de que lo hayas solucionado.

puedo hacer consulta pero a 2 BASES DE DATOS distintas, ya que veo que solo de declara 1. (Pero eso para cuando llegue el momento de preguntar)
Como adelanto, te diré, que hay un servidor que se puede conectar a más de una bd aquí, aunque nunca lo he probado.

Pero la solución más sencilla, a mi entender, es esta:

En config.properties, en vez de declarar el nombre de la base de datos (por ejemplo, para una bd llamada "test" sería así "JdbcUrl=jdbc:mysql://127.0.0.1/test?characterEncoding=utf8"), no escribirías el nombre "test" de la base de datos, y lo pondrías así
In config.properties, instead of declaring the name of the database (ie database test: JdbcUrl=jdbc:mysql://127.0.0.1/test?characterEncoding=utf8), don't write any name:

B4X:
B4X:
JdbcUrl=jdbc:mysql://127.0.0.1?characterEncoding=utf8 'Borras la parte "/test"

Y ahora, en las consultas sql de config.properties, sí tendrías que darle el nombre de la base de datos y la tabla, en lugar de indicar sólo la tabla, por ejemplo:

B4X:
sql.selectTest = select * from test.table1
sql.selectDB2 = select * from BaseDatosPeronsal.table1

Obviamente esto implica que las bases de datos están alojadas en el mismo servidor, y tienen un mismo usuario y contraseña para acceder a ellas. En caso contrario, tendrías que poner el servidor multi base de datos de Erel.

saludos,
 
Top