Aula 6- Criando o cadastro usando o B4A e o MySQL

6.1 Criando o layout

1) Iremos criar a tela do layout  do cadastro de professor.  Inicialmente clique na Activity "maincadastroprofessor1"  conforme indicado pela figura 1.

Figura 01. Ativando a activity maincadastroprofessor1

2) Essa activity deverá ficar aberta pois ela que vai receber as codificações. Agora vá até o menu "Designer", em seguida clique em "Abrir Designer" e na janela que se abrir, abra o layout "lprofessor1" conforme indicado pela figura 2.

Figura 02. Selecionando o layout lprofessor1

3) Na tela que aparecer, na região acinzentada mais escura, à direita, vamos adicionar um componente Scrowview de maneira que fique parecida com a figura 3.

Figura 03. Componente Scrowview

4) Esse componente é próprio para funcionar como uma barra de rolagem na vertical pois temos muitos campos no cadastro de professor e não caberiam na tela normalmente. Ele vai funcionar aliado com um panel.

5) Na seção de "script geral" no canto inferior esquerdo, coloque a implementação indicada pela figura 04.

Figura 04.Método SetLeftandRight

6) O método SetLeftAndRight oferecerá ao componente ScrollView uma certa "responsividade", fazendo com que a largura da ScrollView ocupe toda a tela, não importando o tamanho desta no dispositivo. No caso se quisesse que a largura dela ocupasse apenas metade da tela, o código seria "ScrollView1.SetLefAndRight(0x,50%x)". O x é utilizado por ser tratar de largura. Salve agora as alterações indo no menu "Arquivo", em seguida, "Salvar" conforme demonstra a figura5.

Figura 05.Salvando as alterações feias no layout

7) Antes de passarmos para o layout "telacadastroprofessorum", vamos gerar o objeto da ScrollView para podermos utiliza-la mais a frente no código. Para isso vá até o menu "Ferramentas", clique na opção "Gerar Membros". Na janela que aparecer, marque a ScrollView e em seguida clique no botão "Gerar Membros" conforme indica a figura 6.

Figura 06.Gerando o objeto ScroollView1 no código

8) Dessa maneira o objeto ScrollView1 será criado no código e poderemos mais a frente manipula-lo. Agora vá até o menu "arquivo" e selecione o layout "telacadastroprofessorum" conforme indicado pela figura 7.

Figura 07.Selecionando o layout telacadastroprofessorum

9) Na tela que aparecer, na região acinzentada mais escura, à direita, vamos adicionar os componentes de maneira que fique parecida com a figura 8. ( só que antes de inserir atente-se aos cuidados que serão mencionados abaixo)

Figura 08. Objetos inseridos no layout "telacadastroprofessorum"

Montando a tela e Mudando propriedades do layout "telacadastroprofessorum"

10) Antes de começar vale destacar que o componente alaranjado que aparece atrás de todos os outros componentes na figura 08 é um panel. Você deve começar primeiramente inserindo este componente, clicando  com o botão direito na região acinzentada escura, em seguida em "adicionar view" e clicar em "panel" conforme destaca a figura 09.

Figura 09. Inserindo o panel

11) O componente panel é importante pois ele que vai agrupar os outros componentes que serão inseridos na tela, sem mencionar que a scrollview inserida anteriormente fará referência a ele. Aumente a largura e a altura do panel de forma a ficar parecido com o demonstrado pela figura 10.

Figura 10. Ajustando o panel

12) Agora vamos inserir  um label dentro do panel. Para isso clique com o botão direito em cima do panel em seguida, vá até "Adicionar view" e clique em "label" conforme demonstra a figura 11.

Figura 11. Adicionando a label dentro do panel

13) O resultado da ação proposta anteriormente aparece destacado pela figura 12.

Figura 12. Label inserida como filha do panel

14) Clicando em "Árvore de views" no canto esquerdo( conforme a figura 13), você verá que realmente a label inserida está contida como elemento filho do panel.

Figura 13. Label inserida como filha do panel

15) Ajuste o comprimento da label e altere sua propriedade text para "Cadastro Professor "( sem aspas).

16) Agora da mesma maneira que a label foi inserida, você irá inserir os outros objetos, conforme demonstrado anteriormente pela figura 08.

Montando a tela e Mudando propriedades do layout "telacadastroprofessorum"

Insira os seguintes componentes:

17) Após inserir todos os componentes, certifique-se que todos eles foram inseridos de maneira a serem filhos do componente panel. Para isso clique em "Árvore de views". O resultado da ação deverá ficar semelhante ao demonstrado pela figura 14.

Figura 14. Árvore de views do layout "Telacadastroprofessorum"

18) Agora vá até o menu "Ferramentas" e em seguida clique em "Gerar Membros". Em seguida gere os objetos e os eventos relacionados aos objetos mais importantes presentes na tela, conforme demonstrado por aulas anteriores.

19) Feche a janela do Visual Designer, confirmando as alterações realizadas, e, em seguida, retornaremos aos códigos da Activity "maincadastroprofessor1".

6.1 Criando as codificações

20) Com a  Activity "maincadastroprofessor1" aberta, suba até o ínicio dos códigos e programe os seguintes procedimentos:

'método que joga os estados para o componente spinner
Sub carregarestados
    spnestado.Add("SP")
    spnestado.Add("MG")
    spnestado.Add("ES")
    spnestado.Add("RJ")
End Sub

'método que quando necessário será utilizado para mostrar os dados do registro selecionado
Sub mostrardados
    'os códigos abaixo fazem uso da variável resultset
    'dentro dos parenteses deverão ser colocados os campos da tabela como estão no banco de dados do mysql
    edtcodigo.Text = Starter.rs1.GetString2("prof_codigo")
    edtnome.Text = Starter.rs1.GetString2("prof_nome")
    edtend.Text =Starter.rs1.GetString2("prof_end")
    edtbairro.Text =Starter.rs1.GetString2("prof_bairro")
    edtcidade.Text =Starter.rs1.GetString2("prof_cidade")
    spnestado.SelectedIndex=spnestado.IndexOf(Starter.rs1.GetString2("prof_estado"))
    edtfone.Text =Starter.rs1.GetString2("prof_fone")
    edtmail.Text =Starter.rs1.GetString2("prof_mail")
End Sub

21) Segue abaixo a implementação da sub "Activity_Create(FirstTime As Boolean)" ( anteriormente nessa sub a gente apenas vinculava o layout através do loadlayout, mas nesse caso em específico deveremos implementar mais coisas a serem executadas no momento da criação da Activity)

Sub Activity_Create(FirstTime As Boolean)
    Dim vsql As String
    'Do not forget to load the layout file created with the visual designer. For example:
    'será inicializado o layout da ScrollView
    Activity.LoadLayout("lprofessor1")
    'A ScrollView por sua vez será vinculada ao layout que contém o panel com os componentes de cadastro
    ScrollView1.Panel.LoadLayout("telacadastroprofessorum")
    'código "responsivo" que checa o que é a maior 100%y(sua tela) ou a altura do panel1
    'se o panel for maior que a scroll vai ultrapassar a altura da tela e vai rodar dentro da scroll
    ScrollView1.Panel.Height=Max(100%y,Panel1.Height)
    'chamando o método global conectar
    ConexaoGeral.conectar
    'chamando o método que carrega os estados no componente spinner
    carregarestados
    'atribui uma instrução para selecionar todos os registros
    vsql = "SELECT * FROM professor"
    'executa a instrução e faz com que o resultado da consulta fique armazenado em rs1
    Starter.rs1 = Starter.mh1.Query(vsql)
    'posiciona a consulta o primeiro registro
    Starter.rs1.Position=0
    'chamada do método para mostrar os dados desse registro
    mostrardados
End Sub

22) Note que nessa implementação fizemos referência a dois layouts( o layout da ScrollView(lprofessor1) e o layout do panel(telacadastroprofessorum)) e que também definimos a altura( height) do componente ScrollView através da linha ScrollView1.Panel.Height=Max(100%y,Panel1.Height), sendo que Max é uma função interna que retorna o maior número entre dois valores. Dessa maneira a ScrollView sempre vai se adaptar melhor ao conteúdo do Panel, não importando o tamanho da tela do dispositivo. A figura 15 ajuda você a compreender melhor essa codificação:

Figura 15.Altura da ScrollView


23) Vá até a seção Sub Globals e acrescente mais duas variáveis(i e protocolo) do tipo inteiro e inicialize ambas com o valor 0 conforme demonstrado pela figura 16.

Figura 16.Declaração das variáveis auxiliares i e protocolo

24) Agora vá até o menu "Designer" e abra novamente o layout "telacadastroprofessorum" conforme feito em passos anteriores. Clique com o botão direito no componente "spnestado", navegue até a opção "gerar", em seguida, clique em "itemclick...." conforme demonstrado pela figura 17.

Figura 17. Gerando o método itemclick

24) O método ItemClick está relacionado com o click do usuário no componente spinner. O parâmetro position retorna o index do valor selecionado e o parâmetro Value retorna o valor propriamente dito. Exemplo: Se você selecionou o estado de sp e sp está na posição 3, position irá receber o valor 3 e o parâmetro value vai receber "sp".

25) Feche a janela do Visual Designer e volte para a codificação da Activitie.

26) A figura 18 demonstra a implementação do método spnestado_ItemClick.

Figura 18. Implementação do  método itemclick

27) A variável global i irá receber a posição selecionada a cada clique do usuário no componente spinner.

28) Segue abaixo a implementação de todos os botões do layout "telacadastroprofessorum"

'Posiciona e mostra o último registro
Sub btnultimo_Click
    Try
        Starter.rs1.Position= Starter.rs1.RowCount - 1
        mostrardados
    Catch
        Msgbox("nao foi possivel navegar até o ultimo registro!","")
    End Try
End Sub

'Salva ou altera os valores
Sub btnsalvar_Click
    Dim r As Boolean
    Dim vsql As String
    'protocolo valendo significa que o usuário clicou no botão "novo" e que deseja inserir valores
    If (protocolo=1) Then
        vsql = "Insert into PROFESSOR(prof_codigo,prof_nome,prof_end,prof_bairro,prof_cidade,prof_estado," & _
                "prof_fone,prof_senha,prof_mail) values (" & _
                edtcodigo.Text &",'" &edtnome.Text & "','" & edtend.Text & "','" &edtbairro.Text & "','" &edtcidade.Text & _
                "','" &spnestado.GetItem(i) &"','" &edtfone.Text &"','" &edtsenha.Text&"','" &edtmail.Text & "')"
    'senão significa que o usuário deseja fazer um update
    Else
        vsql = "update professor set prof_nome ='"&edtnome.Text&"'," & _
                    "prof_end='"&edtend.Text&"'," & _
                    "prof_bairro='"&edtbairro.Text&"'," & _
                    "prof_cidade='"&edtcidade.Text&"'," & _
                    "prof_estado='"&spnestado.GetItem(i)&"'," & _
                    "prof_fone='"&edtfone.Text&"'," & _
                    "prof_senha='"&edtsenha.Text&"'," & _
                    "prof_mail='"&edtmail.Text&"' where prof_codigo="&edtcodigo.Text
    End If
    'r éuma variável booleana que vai receber apenas verdadeiro quando a instrução for executada
    'ou falso quando a instrução retornar algum erro
    'Note que agora estamos usando o método Exec por ser tratar de um insert ou update
    'Se fosse apenas para retornar uma consulta select aí se usaria o método query
 
  r= Starter.mh1.Exec(vsql)
    'se a instrução pode ser executada sem erro
    If (r) Then
        protocolo=0
        Msgbox("Registro salvo com sucesso!","")
        vsql = "SELECT * FROM professor"
        'nessa situação que é uma instrução select novamente foi utilizado o método query
        Starter.rs1 = Starter.mh1.Query(vsql)
        Starter.rs1.Position=0
        mostrardados
        'se a instrução retornou erro
    Else
        Msgbox("Não foi possível gravar o respectivo registro!","")
    End If
End Sub

'posiciona no próximo registro
Sub btnproximo_Click
    Try
        Starter.rs1.Position= Starter.rs1.Position+1
        mostrardados
    Catch
        Msgbox("não foi possivel ir para o proximo registro","")
    End Try
End Sub

'posiciona no primeiro registro
Sub btnprimeiro_Click
    protocolo=0
    Try
        Starter.rs1.Position=0
        mostrardados
    Catch
        Msgbox("não foi possivel navegar até o primeiro registro!","")
    End Try
End Sub

'prepara para receber registro
'caso deseje cadastrar um novo valor sempre clique primeiramente no botão novo
Sub btnNovo_Click
    protocolo=1
    edtcodigo.Text =""
    edtnome.Text =""
    edtend.Text =""
    edtbairro.Text =""
    edtcidade.Text =""
    spnestado.SelectedIndex=0
    edtsenha.Text =""
    edtfone.Text =""
    edtmail.Text =""
    edtcodigo.RequestFocus
End Sub

'posiciona no registro anterior
Sub btnanterior_Click
    Try
        Starter.rs1.Position= Starter.rs1.Position-1
        mostrardados
    Catch
        Msgbox("não foi possivel ir para o registro anterior","")
    End Try
End Sub

'exclui o registro selecionado
Sub bntexcluir_Click
    Dim result As Int
    Dim vsql As String
    Dim r As Boolean
    'Msgbox2 é uma caixa de diálogo especial que retorna valores dependendo da opção escolhida pelo usuário
    result = Msgbox2("Deseja excluir este registro?","Sistema","Sim","","Não",Null)
    'se a opção escolhida for sim
   
If (result= DialogResponse.POSITIVE) Then
        vsql="delete from professor where prof_codigo="&edtcodigo.Text
        'aqui novamente temos o uso do método exec por não se tratar de uma instrução de seleção
       
r= Starter.mh1.Exec(vsql)
        'se a variável r receber verdadeiro significa que a exclusão foi feita com sucesso
       
If (r) Then
            Msgbox("Registro excluido com sucesso!","")
            vsql = "SELECT * FROM professor"
            Starter.rs1 = Starter.mh1.Query(vsql)
            Starter.rs1.Position=0
            mostrardados
        'senão puder ser excluído
        Else
            Msgbox("Não foi possível excluir o registro selecionado!","")
        End If
    End If
End Sub

'cancela uma ação do usuário caso tenha clicado em novo ou alterar e não deseja mais realizar a ação
Sub btncancelar_Click
    Try
        If (protocolo=0) Then
            btnNovo_Click
        Else
            btnprimeiro_Click
        End If
    Catch
        Msgbox("Não foi possível completar a ação","")
    End Try
End Sub
 

'caso o usuário deseje sair

Sub btnsair_Click
    Activity.Finish
End Sub
 

29) Teste as funcionalidades da tela de cadastro de professor  no seu dispositivo ou no emulador, lembrando que caso deseje cadastrar um novo valor, primeiramente você deverá clicar no botão "Novo", digitar as informações nos campos e, em seguida, clicar no botão "Salvar". A figura 19 demonstra a tela de cadastro de professor já em funcionamento no emulador Genymotion.

Figura 19. Tela de cadastro de professor