B4J Question Save B4XTable data to a remote database?Thank you for your help

guandjy

Member
Dim cmd1 As DBCommand = CreateCommand("select_insertnianduyusuan", params) 错误: 不兼容的类型: List<Object>无法转换为Object[]






B4X:
Private Sub ShowDialog(Item As Map, RowId As Long)
    Wait For (PrefDialog.ShowDialog(Item, "yes", "cancel")) Complete (Result As Int)
    If Result = xui.DialogResponse_Positive Then
        Dim params As List
        params.Initialize
        params.AddAll(Array(Item.Get("year"),Main.bumena,"",Item.Get("xiangmu"))) 'keys based on the template json file
        If RowId = 0 Then 'new row
            B4XTable1.sql1.ExecNonQuery2($"INSERT INTO data VALUES("", ?, ?, ?)"$, params)
            B4XTable1.ClearDataView
            
            Dim req1 As DBRequestManager = CreateRequest
            Dim cmd1 As DBCommand = CreateCommand("select_insertnianduyusuan", params)
            Dim j As HttpJob = CreateRequest.ExecuteBatch(Array(cmd1), Null)
            Wait For (req1.ExecuteCommand(cmd1,Null)) JobDone(j As HttpJob)
            If j.Success Then
                xui.MsgboxAsync("success!","")
            Else
                Log("ERROR (7): " & j.ErrorMessage)
        
            End If
            j.Release
            
        Else
            params.Add(RowId)
            'first column is c0. We skip it as this is the "edit" column
            B4XTable1.sql1.ExecNonQuery2("UPDATE data SET c1 = ?, c2 = ?, c3 = ? WHERE rowid = ?", params)
            B4XTable1.Refresh
            
        End If
        
        
    End If
End Sub
 

teddybear

Well-Known Member
Licensed User
Dim cmd1 As DBCommand = CreateCommand("select_insertnianduyusuan", params) 错误: 不兼容的类型: List<Object>无法转换为Object[]
This params type is wrong , its type should be array() instead of a list.
 
Last edited:
Upvote 0

guandjy

Member
Just change it to the code, but I still don't understand why B4XTable1. sql1. ExecNonQuery2 ($"Insert INTO data Values (" ",?,?)" $, params) works, but remote databases don't work
B4X:
params.AddAll(Array(Item.Get("year"),Main.bumena,"",Item.Get("xiangmu"), Item.Get("feiyong"))
 
Upvote 0

Daestrum

Expert
Licensed User
Longtime User
try (uses JavaObject)
B4X:
 Dim cmd1 As DBCommand = CreateCommand("select_insertnianduyusuan", params.As(JavaObject).RunMethod("toArray",null))
 
Upvote 0

guandjy

Member
try (uses JavaObject)
B4X:
 Dim cmd1 As DBCommand = CreateCommand("select_insertnianduyusuan", params.As(JavaObject).RunMethod("toArray",null))
Thank you, that's it. Can you help me check another question? TABLE data is saved to a remote database, and the code below always prompts an error
B4X:
Private Sub Button2_Click
    Dim data As List
    data.Initialize
    Dim rs As ResultSet = B4XTable1.sql1.ExecQuery("SELECT * FROM data")
    Do While rs.NextRow
        Dim row(B4XTable1.Columns.Size) As String
        For i = 1 To B4XTable1.Columns.Size - 1
            Dim c As B4XTableColumn = B4XTable1.Columns.Get(i)
            row(i) = rs.GetString(c.SQLID)
        Next
        data.Add(row)
    '''''''''''Where is the problem with the following code, prompt: ResponseError Reason: org.hsqldb HsqlException: incompatible data type in conversion, Response:<HTML>
   
    Dim req1 As DBRequestManager = CreateRequest
        Dim cmd1 As DBCommand = CreateCommand("select_insertnianduyusuan",data.As(JavaObject).RunMethod("toArray",Null))
        'Dim j As HttpJob = CreateRequest.ExecuteBatch(Array(cmd1), Null)
        Wait For (req1.ExecuteCommand(cmd1,Null)) JobDone(j As HttpJob)
        If j.Success Then
            xui.MsgboxAsync("更新成功!","")
        Else
            Log("ERROR (7): " & j.ErrorMessage)
            xui.MsgboxAsync("保存失败!","")
        End If
        j.Release
    Loop
    rs.Close
 
Upvote 0
Top