Dúvida - Como "Pegar" os Dados de uma Consulta com HttpJob

Janed Martins

New Member
Olá, Boa tarde!

Estou atualizando um aplicativo que já usava a conexão com SQL local, no smatphone.
Mas agora, preciso que seja mostrado, os dados do banco de dados na web, em uma scrollview, mas não estou conseguindo.
Antes, o código estava como abaixo:

B4X:
Sub CarregaTabelaPedidos_SemCliente()

    SVPedidos.Panel.Color = Colors.RGB(139,69,19)

    Table2 = SVPedidos.Panel
    Table2.Color = Colors.RGB(139,69,19) 'LineColor   
    
    SVPedidos.Top = 65: SVPedidos.Left = 15
    SVPedidos.Width = 610: SVPedidos.Height = 350

    LinhaAnterior = -18
    
    NumberOfColumns1 = 4
    
    MsgPesquisa = "SELECT Numero, Emissao, CodigoAndroid, DataEnvio FROM PEDIDOS ORDER BY PEDIDOS.NUMERO DESC"
    
    For i = Table2.NumberOfViews -1 To 0 Step -1
        Table2.RemoveViewAt(i)
    Next
    Table2.Height = 0
    SelectedRow1 = -1
    
    Dim List1 As List
    Dim h(4) As String
    Dim headers As List
    h(0) = "Pedido"
    h(1) = "Data"
    h(2) = "Cliente"
    h(3) = "Envio"

    NumberOfColumns1  = h.Length
    ColumnWidth1 = SVItens.Width / NumberOfColumns1 'update the columns widths
    ColumnWidth1_1 = ColumnWidth1-ColLineWidth
    SetHeader2(h)

    SQLReadTablePedidos
End Sub

Sub SQLReadTablePedidos
' Reads the SQL data base
    Dim i As Int
    Dim Cursor1 As Cursor
    Dim campoZ As String     
    
    Cursor1 = SQL.ExecQuery(MsgPesquisa)

    Dim row(4) As String
    row(0)="": row(1)="": row(2)="": row(3)=""
    If Cursor1.RowCount - 1 >= 0 Then
        For i = 0 To Cursor1.RowCount - 1
            Cursor1.Position = i
            row(0)=Cursor1.GetString("Numero")
            row(1)=Cursor1.GetString("Emissao")
            row(1) = Mid(row(1),1,6)  & Mid(row(1),9,2)
            row(2)=Cursor1.GetString("CodigoAndroid")
            row(3)=Cursor1.GetString("DataEnvio")
            campoZ = Cursor1.GetString("DataEnvio")
            row(3) = Mid(row(3),1,6)  & Mid(row(3),9,2)
            AddRow2(row)
        Next
    Else
        Cursor1.Position = i
        row(0)=" ": row(1)=" ": row(2)=" ": row(3)=" "
        AddRow2(row)
    End If
    Cursor1.Close
End Sub

Estava tentando colocar da seguinte forma, mas não deu muito certo.


B4X:
Sub CarregaTabelaPedidos_SemCliente()

    SV_Pedidos.Panel.Color = Colors.RGB(139,69,19)

    Table2 = SV_Pedidos.Panel
    Table2.Color = Colors.RGB(139,69,19) 'LineColor
    
    'SV_Pedidos.Top = 65: SV_Pedidos.Left = 15
    'SV_Pedidos.Width = 610: SV_Pedidos.Height = 350
    
    LinhaAnterior = -18
    
    NumberOfColumns1 = 4
    
    MsgPesquisa = ""
    
    Try
        
        MsgPesquisa = "SELECT Numero, Emissao FROM PEDIDOS ORDER BY PEDIDOS.NUMERO DESC"

        Label2.Text = "Lendo dados, aguarde... ..."
    
        Dim job0 As HttpJob
        job0.Initialize("Select", Me)
        
        Dim XCampo As String
        
        XCampo = "http://vtscristal.ddns.net:3498/ws_androidcristal.aspx"
        job0.PostString(XCampo, MsgPesquisa)
        
        ''        Wait For (job0) JobDone(job As HttpJob)
        ''        If job0.Success Then
        ''            Log(job0.GetString)
        ''            '
        ''        Else
        ''            ToastMessageShow(job0.ErrorMessage,True)
        ''        End If
        ''        job0.Release
        ''        StartActivity("main")
    Catch
        MsgboxAsync(LastException, "Dados de clientes")
    End Try
    
    
    'MsgPesquisa = "SELECT Numero, Emissao, CodigoAndroid, DataEnvio FROM PEDIDOS ORDER BY PEDIDOS.NUMERO DESC"
    
    For i = Table2.NumberOfViews -1 To 0 Step -1
        Table2.RemoveViewAt(i)
    Next
    Table2.Height = 0
    SelectedRow1 = -1
    
    Dim List1 As List
    Dim h(4) As String
    Dim headers As List
    h(0) = "Pedido"
    h(1) = "Data"
    h(2) = "Teste"
    h(3) = "Teste"

    NumberOfColumns1  = h.Length
    ColumnWidth1 = SV_Pedidos.Width / NumberOfColumns1 'update the columns widths
    ColumnWidth1_1 = ColumnWidth1-ColLineWidth
    SetHeader2(h)

    SQLReadTablePedidos
End Sub

Sub SQLReadTablePedidos
    ' Reads the SQL data base
    Dim i As Int
    Dim Cursor1 As Cursor
    Dim campoZ As String
    Dim row(4) As String
    
    Cursor1 = 1000
    
    Dim job0 As HttpJob
    job0.Initialize("Select", Me)
        
    Dim XCampo As String
    
        
    XCampo = conexao 'string de conexão com os dados web
    job0.PostString(XCampo, MsgPesquisa)
    
    Wait For (job0) JobDone(job As HttpJob)
    If job0.Success Then
        Log(job0.GetString)
        Label2.Text = job0.GetString
    Else
        ToastMessageShow(job0.ErrorMessage,True)
    End If
    job0.Release
    
    Try
        If job.JobName  = "Select" Then
            If job.Success Then
                Dim parser As JSONParser
                Dim response As String = job.GetString
                parser.Initialize(response)
                Label2.Text = response
                
            End If
            'StartActivity("main")
        End If
    Catch
        Log(LastException)
        MsgboxAsync("Dados não enviados. Reenvie mais tarde","Falha de envio")
    End Try
    
'    'Cursor1 = SQL.ExecQuery(MsgPesquisa)
'
'    Dim row(4) As String
'    row(0)="": row(1)="": row(2)="": row(3)=""
'    If Cursor1.RowCount - 1 >= 0 Then
'        For i = 0 To Cursor1.RowCount - 1
'            Cursor1.Position = i
'            row(0)=Cursor1.GetString("Numero")
'            row(1)=Cursor1.GetString("Emissao")
'            row(1) = Mid(row(1),1,6)  & Mid(row(1),9,2)
'            'row(2)=Cursor1.GetString("Teste")
'            'row(3)=Cursor1.GetString("Teste")
'            'campoZ = Cursor1.GetString("Teste")
'            'row(3) = Mid(row(3),1,6)  & Mid(row(3),9,2)
'            AddRow2(row)
'        Next
'    Else
'        Cursor1.Position = i
'        row(0)=" ": row(1)=" ": row(2)=" ": row(3)=" "
'        AddRow2(row)
'    End If
'    Cursor1.Close
End Sub

Preciso saber como "pegar" os dados da consulta e colocar nesse array!
 

asales

Expert
Licensed User
Longtime User
Você não conseguirá conectar desta forma.
O acesso a um banco de dados na web é diferente do acesso a um banco SQLite local.

Tem algumas libs no fórum que permitem o acesso direto ao banco de dados remoto (principalmente para MySQL).

Uma opção mais viável é a descrita neste post:
ou então você terá que fazer a consulta SELECT na página ASPX e retornar o resultado via JSON para você ler via Job no app e listar o resultado (vai ser algo similar ao descrito no link acima usando o B4J).
 
Boa Noite

No forum tem alguns exemplos, mas caso não consiga eu posso te ajudar.
Eu tenho em banco de dados mysql na web, onde tenho uma pagina php, que irá receber a solicitação do app e retornará a consulta via JSON.

segue exemplo:

Caso tenha duvidas posso ajudar.
 

Janed Martins

New Member
Boa Noite

No forum tem alguns exemplos, mas caso não consiga eu posso te ajudar.
Eu tenho em banco de dados mysql na web, onde tenho uma pagina php, que irá receber a solicitação do app e retornará a consulta via JSON.

segue exemplo:

Caso tenha duvidas posso ajudar.
Boa tarde Adriano.

Obrigada pela dica.

Tenho algumas dúvidas sim.
Fiz alguns exemplos utilizando a conexão jRDC2 e B4XTable para mostrar os dados do banco de dados na tela.
Preciso selecionar uma "linha" dessa tabela, para abrir uma outra tela com dados. Sabe como posso fazer essa operação, usando B4XTable ou alguma outra forma.
 

Janed Martins

New Member
Você não conseguirá conectar desta forma.
O acesso a um banco de dados na web é diferente do acesso a um banco SQLite local.

Tem algumas libs no fórum que permitem o acesso direto ao banco de dados remoto (principalmente para MySQL).

Uma opção mais viável é a descrita neste post:
ou então você terá que fazer a consulta SELECT na página ASPX e retornar o resultado via JSON para você ler via Job no app e listar o resultado (vai ser algo similar ao descrito no link acima usando o B4J).
Asales,

Obrigada!
Essa dica foi muito boa.
 
Boa tarde Adriano.

Obrigada pela dica.

Tenho algumas dúvidas sim.
Fiz alguns exemplos utilizando a conexão jRDC2 e B4XTable para mostrar os dados do banco de dados na tela.
Preciso selecionar uma "linha" dessa tabela, para abrir uma outra tela com dados. Sabe como posso fazer essa operação, usando B4XTable ou alguma outra forma.
Bom dia Janed

Pelo que entendi será aplicar um valor no b4xtable com base a esse valor ao você clicar nesse fará essa consulta correto!

Utilizando o exemplo: https://www.b4x.com/android/forum/t...searchable-customizable-table.102322/#content

O b4xtable tem o Evento CellClick , ou seja, quando o usuário clicar no resultado do b4xtable, ele executa esse evento pegando o valor do grid, onde você pode executar outra consulta sql com base em algum ID aplicado no grid e reexibir o valor.

Espero ter ajudado
 
A Forma mais segura e simples que encontrei foi via API, você consegue montar uma ?.
Se conseguir te posto um exemplo, é muito simples. Mas precisa de uma API.
 
Top