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.612 ]

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


Busca de registro e vídeo complementar



Depois do código apresentado até aqui, vou apresentar para vocês como trabalhar com uma TableView. A princípio vai parecer meio complicado, mas tentarei deixar da maneira mais simples possível. :D

Para começarmos com a explicação, crie um formulário com esse layout:
Linux: Gambas2 e Mysql aprofundando relações.
Bom, feito isso, vou apresentar a programação desse formulário.

Existem 3 eventos necessários para esse formulário:
  • PUBLIC SUB TextBox1_KeyPress()
  • PUBLIC SUB TableView1_Data(Row AS Integer, Column AS Integer)
  • PUBLIC SUB Form_Open()

Variáveis utilizadas:
  • PUBLIC busca AS Result
  • tabela[3] AS String

O primeiro:

PUBLIC SUB Form_Open()

   cnx.ConectarBanco()
   busca = cnx.conexao.Exec("select  * from cadastro")
   TableView1.columns.count = busca.fields.count
   TableView1.rows.count = busca.count

END

Esse evento é executado quando o formulário é aberto.

O que ele faz?
  1. Conecta ao banco;
  2. Busca todos os registros da tabela cadastro;
  3. Determina a quantidade de colunas da tableview1 igual a quantidade de colunas que a busca dos registros retornou;
  4. Determina a quantidade de linhas da tableview1 igual a quantidade de linhas que a busca retornou.

PUBLIC SUB TableView1_Data(Row AS Integer, Column AS Integer)

   tabela[0] = "codigo"
   tabela[1] = "nome"
   tabela[2] = "telefone"
   busca.MoveTo(Row) 'não tive isso, para não ter uma surpresa desagradável :p  
   tableview1.data.Text = Str(busca[tabela[Column]])

END

Esse evento é responsável por jogar os dados na tableview1.

Como ele faz?

Tabela é uma variável do tipo array de 3, aí no primeiro campo coloca "codigo", esse é o campo da tabela do banco de dados, assim como o "nome" e "telefone".

As linhas abaixo são indispensável:

   tableview1.data.Text = Str(busca[tabela[Column]])
   dados da tableview1 =  texto(registros(tabela[0,1,2]))

0, 1 e 2 são os campos que irão variar.

Essa parte eu acho complicada de explicar, mas está aí.

E agora para finalizar essa parte:

PUBLIC SUB TextBox1_KeyPress()

   busca = cnx.conexao.Exec("select  * from cadastro where nome like '%" & TextBox1.Text & "%'")
   TableView1.columns.count = busca.fields.count
   TableView1.rows.count = busca.count

END

Isso aí faz o seguinte, quando o pessoa digita "j" na textbox1, ele faz uma busca pelos nomes que começam com "j". Os % ali no meio são os caracteres coringas do MySQL.

Vídeo complementar do ambiente em que foi desenvolvido o exemplo.
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

Gambas2: Inserindo dados em tabela SQLite

Criando um banco de dados no Flamerobin (Firebird)

Introdução as Gambas (parte 1)

Imagens e áudio no banco de dados Oracle

Gallery - Álbum de fotos no seu site

Leitura recomendada

A função DATE_FORMAT() do MySQL

MariaDB + phpMyAdmin no Ubuntu 12.04 LTS

Amarok: migrando de SQLite para MySQL

Instalando o phpmyAdmin no Debian Etch

Configurando Apache + MySQL + PHP no Slackware

  
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