Gambas2 e MySQL, aprofundando relações

Nesse artigo mostrarei como fazer busca de registro MySQL no Gambas2, além de outros itens interessantes, como botões de movimentação e edição.

[ Hits: 36.614 ]

Por: Jose Ribeiro em 06/08/2009 | Blog: https://serviceup.com.br/


Botões: novo, salvar, editar, excluir



Agora o programação para novo, excluir, modificar, salvar, próximo, anterior, último, primeiro.

Crie a seguinte interface:
Linux: Gambas2 e Mysql aprofundando relações.
Certo, não se esqueça de deixar a opção "readonly = true" da caixa de texto "codigo" para que não seja permitido alterar esse valor, pois ele será gerado via programação.

Botão "Novo"

PUBLIC SUB ToggleButton1_Click()

  DIM registro AS Result
  DIM ultimo AS Integer
  cnx.ConectarBanco()
  
  registro = cnx.conexao.Exec("select * from cadastro")
  IF registro.Count = 0 THEN
  TextBox1.Text = "1"
  TextBox2.Enabled = TRUE
  TextBox1.Enabled = TRUE
  TextBox3.Enabled = TRUE
  ELSE
  registro.MoveLast
  ultimo = registro!codigo
  TextBox1.Text = ultimo + 1
  
  TextBox2.Enabled = TRUE
  TextBox1.Enabled = TRUE
  TextBox3.Enabled = TRUE
  
  ENDIF
  reg = cnx.conexao.Create("cadastro")
  ToggleButton2.Enabled = TRUE
  ToggleButton1.Enabled = FALSE
  ToggleButton5.Enabled = FALSE
  ToggleButton6.Enabled = FALSE
  ToggleButton7.Enabled = FALSE
  ToggleButton8.Enabled = FALSE
  ToggleButton3.Enabled = FALSE

  Textbox2.Text = ""
  Textbox3.Text = ""

END

O que isso faz?

É o seguinte, nesse primeiro botão ele abre a conexão para inserir um novo registro, a parte responsável por isso é:

reg = cnx.conexao.Create("cadastro")

Ele também mostra o primeiro registro.

Primeiro ele gera um novo código via programação como eu havia dito que explicaria, para ser mais específico, essa parte aqui é responsável por isso:

  IF registro.Count = 0 THEN
    TextBox1.Text = "1"
  ELSE
    registro.MoveLast
    ultimo = registro!codigo
    TextBox1.Text = ultimo + 1
   ENDIF

Se "registro" estiver vazio, então o código é 1, senão mova registro para o último, pegue o código, some 1 ao valor e o próximo código será a o último atribuído 1. Simples hein... :p

Bom, o resto da programação desse botão é responsável por mostrar o primeiro item na tela e criar um novo registro:

reg = cnx.conexao.Create("cadastro")

Botão "Salvar"

PUBLIC SUB ToggleButton2_Click()

   reg!codigo = Val(TextBox1.Text)
   reg!nome = TextBox2.Text
   reg!telefone = TextBox3.Text
   reg.Update
   cnx.conexao.Commit
   ToggleButton1.Enabled = TRUE
   TextBox1.Enabled = FALSE
   TextBox2.Enabled = FALSE
   TextBox3.Enabled = FALSE
   ToggleButton2.Enabled = FALSE
   ToggleButton5.Enabled = TRUE
   ToggleButton6.Enabled = TRUE
   ToggleButton7.Enabled = TRUE
   ToggleButton8.Enabled = TRUE
   ToggleButton3.Enabled = TRUE

END

O que isso faz?

A parte que realmente salva é essa:

   reg!codigo = Val(TextBox1.Text)
   reg!nome = TextBox2.Text
   reg!telefone = TextBox3.Text
   reg.Update
   cnx.conexao.Commit

Nessa parte ele atribui o valor para o registro de acordo com a textbox que está o representando.

reg!codigo = Val(TextBox1.Text)

Isso aqui converte o valor texto da textbox1 para o tipo número para que possa ser guardado no banco, porque no banco o campo código é do tipo integer.

O resto dele ativa e desativa botões conforme a necessidade.

Botão "Editar"

PUBLIC SUB ToggleButton3_Click()

   IF ToggleButton3.Text = "Editar" THEN

      TextBox2.Enabled = TRUE
      TextBox3.Enabled = TRUE
      ToggleButton5.Enabled = FALSE
      ToggleButton6.Enabled = FALSE
      ToggleButton7.Enabled = FALSE
      ToggleButton8.Enabled = FALSE
      ToggleButton1.Enabled = FALSE
      ToggleButton4.Enabled = FALSE
      ToggleButton3.Text = "Atualizar"
    
   ELSE
    
      reg = cnx.conexao.Exec("update cadastro set nome ='" & Textbox2.Text & "', telefone='" & TextBox3.Text & "' where codigo =" & Val(TextBox1.text) & "")
      ToggleButton3.Text = "Editar"
      TextBox2.Enabled = FALSE
      TextBox3.Enabled = FALSE
      ToggleButton5.Enabled = TRUE
      ToggleButton6.Enabled = TRUE
      ToggleButton7.Enabled = TRUE
      ToggleButton8.Enabled = TRUE
      ToggleButton1.Enabled = TRUE
      ToggleButton4.Enabled = TRUE

   ENDIF

END

O que isso faz?

Nesse a única parte que importa mesmo é essa:

reg = cnx.conexao.Exec("update cadastro set nome ='" & Textbox2.Text & "', telefone='" & TextBox3.Text & "' where codigo =" & Val(TextBox1.text) & "")

Esse é um SQL utilizando o update do próprio MySQL para alterar. O resto disso só ativa e desativa os botões.

Botão "Excluir"

PUBLIC SUB ToggleButton4_Click()

   cnx.conexao.Exec("delete from cadastro where codigo=" & Val(TextBox1.Text))
   Form_Open()

END

Esse eu acredito que seja o mais simples de se entender, é um SQL que vai excluir o registro que está na tela, simples não!?

O Form_Open() é como se estivesse iniciando novamento o sistema, fiz isso para que ele jogue o primeiro registro para a tela.

Página anterior     Próxima página

Páginas do artigo
   1. Preparando o ambiente
   2. Botões: novo, salvar, editar, excluir
   3. Botões: Primeiro, Anterior, Próximo e Último
   4. Busca de registro e vídeo complementar
   5. Exemplos de programas escritos em Gambas2
Outros artigos deste autor

Instalação e Configuração do Puppet

Mensageiro instantâneo

Criando um banco de dados no Flamerobin (Firebird)

Introdução as Gambas (parte 1)

Introdução ao Gambas2 (parte 2)

Leitura recomendada

Gerenciando banco de dados com MySQL (parte 2)

Blindando o MySQL: Configurações de segurança

Cluster MySQL - Instalação e configuração

OcoMon 2.0RC6 no OpenSUSE 11.2 com PHP5 + MySQL5 + Apache2 com correção de acentuação

Amarok: migrando de SQLite para MySQL

  
Comentários
[1] Comentário enviado por usrlinux em 06/08/2009 - 08:45h

Discordo do seu ponto de vista de ferramentas para uso comercial são ferramentas que fazem coisas de maneira automatizada, o que leva uma ferramenta ser mais utilizada comercialmente é o suporte que ela oferece aos desenvolvedores que a utilizam para desenvolver suas aplicações.
Embora o Gambas 2 tenha uma documentação razoável qual é o suporte que a equipe de poucos colaboradores dessa ferramenta podem dar ao desenvolvedor que irá utilizá-la, ainda que seja uma IDE versátil.

[2] Comentário enviado por joserribeirojuni em 06/08/2009 - 09:39h

usrlinux, Justificando meu ponto de vista é o seguinte, quando se fala em software livre, sempre são poucos colaboradores, que oferecem o máximo de suporte possível de acordo com suas possibilidades, e discordo quando questiona o suporte dessa ferramenta, segue dois links que uso nessa afirmação.

http://gambasdoc.org/help/doc/forum?en&view

http://gambasdoc.org/help/doc/report?en&view

Além disso toda comunidade é aberta a ajudar.

Além do mais é pelo motivo de automatizar o sucesso de ferramentas como: GenuXus.
Não que isso seja ruim é claro.
Completanto, hoje automatizar faz sim, toda a diferença, juntamente com o suporte é claro.
Abraço.

[3] Comentário enviado por usrlinux em 06/08/2009 - 10:29h

Quando eu falei sobre suporte não estava somente falando de um meio de comunicação para reportar os erros ou problemas de codificação, mas sendo isso uma coisa básica que deve existir num projeto livre e sério para atrair pessoas da comunidade a utilizar a ferramenta e ajudar no seu aperfeiçoamento.
Quero salientar que isso demanda tempo, e seu cliente não vai ficar esperando um bug ser concertado ou suporte a certa tecnologia ser adicionado na sua ferramenta de desenvovimento, são estes os fatores que tornam uma ferramenta de desenvolvimento mais comercial.

Sobre Genexus embora agilize o processo de desenvolvimento existem desvatagens a primeira delas é que existem poucos profissionais aptos a desenvolver com a ferramenta, desta forma, existe também profissionais com pouco conhecimento que não utilizam as melhores práticas de desenvolvimento por falta de domínio, o que causa problemas sérios em longo prazo e comentários de que a ferramenta é ruim. Outra desvantagem ainda está no preço das licenças que são vendidas por gerador, porém em médio prazo elas “se pagam” devido os benefícios de produtividade.


[4] Comentário enviado por joserribeirojuni em 06/08/2009 - 10:44h

Meu caro, o fato é que na pratica ferramentas livre, tem seus Bugs corrigidos mais rapidamente, e suporte a novas tecnologias são sempre implementados mais rapidos, como por exemplo, o Kernel Linux, que ja suportar USB 3.0.

Abraço.


[5] Comentário enviado por usrlinux em 06/08/2009 - 12:47h

Leia este artigo você pode se encaixar aqui:

http://www.vivaolinux.com.br/artigo/Se-o-Linux-e-tao-melhor-que-o-Windows-e-e-de-graca-por-que-a-mai...


[6] Comentário enviado por joserribeirojuni em 12/08/2009 - 09:55h

Não, não se encaixa nesse contexto não.

[7] Comentário enviado por HER GNU/LINUX em 17/05/2010 - 16:32h

Salve, José Ribeiro!
Parabéns pela contribuição. O Importante é a colocabração, pois sempre vai ajudar alguém. Veja bem! Talvez você possa me ajudar, sem compromisso.
No decorrer de minha vida profissional sempre usei o Microsoft Access para facilitar as tarefas rotineiras nos diversos setores que passei pela empresa que trabalho.
Para você ter uma ideia hoje gerencio uma área de traporte de fretamento com um pequeno banco de dados que criei. Ele é eficiente até agora, mas entendo que seu limite
tá para ser esgotado. Claro! que o Microsoft accesse é prático e a exigência para o seu desempenho está na modalagem de dados. Bem! Gostaria de aprender um banco de
dados que eu pudesse usá-lo no ambiente Linux - Ubuntu. Na verdade não sei nem por onde começar. Você poderia dar uma dica.
De preferência que fosse prático como o Access. O banco de dados que acompanha o BrOffice ao meu é pobre em recursos práticos que estou acostumado.
Abraços e continue assim garoto.

[8] Comentário enviado por hudyfx em 29/04/2011 - 11:25h



ola cara belza, eu estava dando uma olhada no seu tutorial, ache bem legal...

porem eu queria questionar algumas coisas, percebi que o programa faz a conexão quando o banco de dado quando o mesmo é executado:
PUBLIC SUB Form_Open()

cnx.ConectarBanco()

END

só que Mysql expira a conexão depois de um certo tempo, se o programa fica muito tempo aberto e a conexao expira, é notório o fato de que o usuario deve fechar e abrir o programa para restabelecer a conexão.
alem disso, se vc ( por exemplo ) tem uma variavel publica do tipo "result" o valor estático da variavel só é preservada quando aconexao esta ativa.

com base nisso nao seria interessante e "evento" se conectar no banco de dados, fazer o que ele tiver que fazer, e depois desconectar? Assim ele nao pararia nunca e a conexão com o banco nao ficaria preza na inicialização do programa?
exemplo:

PUBLIC SUB ToggleButton6_Click()

cnx.ConectarBanco <--------"Abre conexao
reg = cnx.conexao.Exec("select * from cadastro") <----------" Faz o que tem que fazer
reg.MoveFirst()
WHILE reg!codigo <> Val(TextBox1.Text)
reg.MoveNext
WEND
reg.MovePrevious()
TextBox1.Text = reg!codigo
TextBox2.Text = reg!nome
TextBox3.Text = reg!telefone
CATCH
Message.Info("Impossível mover registro")
cnx.conexao.Close <----------------" Fecha a conexao
END

com isso nao é necessário abrir a conexao no Form_Open, e o banco não fica preso
acredito que assim seja bem melhor...

[9] Comentário enviado por joserribeirojuni em 29/04/2011 - 11:41h

Sim cara, seria interessante, quando escrevi esse arquivo eu tinha começado a faculdade tinha pouca noção. Se fosse fazer hoje eu mudaria pelo menos uns 8 detalhes nesse artigo.

Abraço.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts