Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2012 Edição 7 Listando e Gravando Listando itens em ComboBox e gravando os dados no Banco de Dados Mysql Ano: 04/2012
Nesta Edição Introdução... 1 A tabela que iremos utilizar... 1 Criando o programa... 3 Codificando nosso projeto... 4 Criação do Procedimento... 4 Criação do vetor e variáveis necessárias... 4 Criação do procedimento de pesquisa de cidades... 5 Programação da Procedure Atualiza_cidades()... 6 Programação do Button Cadastrar... 7 Programação do Form... 8 Arquivos Anexos... 8
Introdução Nesta edição vamos aprender a trabalhar com tabelas estrangeiras, ou seja, em alguns momentos temos uma tabela principal que esta ligada a outra, estrangeira, por meio de um código e nosso sistema para funcionar corretamente precisa listar os itens desta tabela estrangeira para armazenar o código corretamente na nossa tabela principal, para isso iremos cuidadosamente aprender a pesquisar os dados desta tabela estrangeira e listar os itens em um combobox para seleção. Após a listagem vamos ver como realizar a inclusão dos dados na tabela principal para a gravação no banco de dados. A tabela que iremos utilizar Para realizar a construção deste exemplo vamos utilizar um banco de dados de clientes. Para poder utilizar o banco de dados correto, no HeidSQL conecte no seu servidor e logo após clique na aba query. Coloque o código abaixo para a construção do banco e das tabelas clientes, cidades e seus respectivos campos: CREATE DATABASE IF NOT EXISTS `3a`; USE `3a`; CREATE TABLE IF NOT EXISTS `clientes` ( `cod` int(10) unsigned NOT NULL auto_increment, `nome` varchar(150) default NULL, `cod_cidade` int(10) default NULL, PRIMARY KEY (`cod`), KEY `cod_cidade` (`cod_cidade`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `cidades` ( `cod_cidade` int(10) NOT NULL auto_increment, `cidade` varchar(100) default '0', PRIMARY KEY (`cod_cidade`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; 1
Neste banco teremos duas tabelas interligadas por um código. Nossa tabela Clientes possui um campo chamado cod_cidade que está ligado diretamente a tabela cidades. Nosso sistema irá fazer a seleção das cidades em um combobox e após a seleção do usuário irá gravar na tabela clientes o código da cidade selecionada. Para o funcionamento do sistema nossa tabela de cidades também deverá ter uma tela de cadastro simples como já aprendemos para que possamos cadastrar cidades para usar com o cadastro dos clientes. Porem como a parte de cadastro já foi abordada em outras edições, esta edição irá acrescentar dentro da nossa tabela cidades alguns registros já para uso com este exemplo. Para isso copie o código abaixo e cole na aba query do HeidSQL e execute para cadastrar algumas cidades na nossa tabela. INSERT INTO `cidades` (`cod_cidade`, `cidade`) VALUES (1, 'Taubaté'), (2, 'São José dos Campos'), (3, 'Tremembé'), (4, 'Ubatuba'), (5, 'São Sebastião'), (6, 'Caçapava'), (7, 'Aparecida'); 2
Criando o programa Nosso formulário conterá os componentes representados na imagem abaixo: 8 1 2 7 4 5 6 3 Agora altere as propriedades referentes a cada objeto, para tudo seguir corretamente altere primeiro as propriedades Name de cada objeto e depois siga alterando as outras propriedades: 1. Labels ( 2 labels ) a. Caption Nome do Cliente: b. Caption Cidade do Cliente: 2. Edit ( 3 edits) a. Text deixar em branco b. Name edt_nome (para a caixa de nome do cliente) 3. Button a. Caption Cadastrar 4. SQL Connection a. Name con b. DatabaseName 3a c. HostName 127.0.0.1 para uso na escola use 192.168.10.250 d. UserName root para uso na escola use 3a ou 3b e. Password A senha que você definiu na instalação do Appserv para uso na escola use 3a ou 3b f. Connected True 5. SQL Query a. Name query b. Database con c. Transaction trans 6. SQL Transaction a. Name trans b. Database con 7. ComboBox a. Name cmb_cidade b. ReadOnly True 8. Form a. Caption Selecionando Itens 3
Codificando nosso projeto ATENÇÃO: PARA EVITAR PROBLEMAS EM NOSSO PROJETO, DIGITE O CÓDIGO QUE VOCÊ VERÁ EM NOSSO MATERIAL, POIS CASO OS COMANDOS SEJAM COPIADOS E COLADOS NO LAZARUS, ELES PODEM CONTER FORMATAÇÕES QUE SERÃO VISTAS COMO ERRO NO PROGRAMA NA HORA DA DEPURAÇÃO. Para que o sistema funcione então precisamos agora incluir alguns comandos de programação no nosso projeto. Primeiro vamos criar um procedimento que irá fazer a pesquisa dos dados da tabela cidades e irá exibi-los dentro do nosso combobox. Não se esqueça de salvar o projeto antes de mandar executar. Criação do Procedimento Este procedimento irá fazer uma associação entre um vetor que vai guardar os códigos da tabela de cidades. Este vetor, que possui um nome e vai funcionar como uma tabela de uma única coluna, em que no nosso caso essa coluna possuirá os códigos de cada item da tabela de cidades, e onde cada linha possui um índice que inicia em 0 para podermos capturar ou guardar determinada informação dentro do vetor. Para visualizar melhor acompanhe o exemplo abaixo: vetor_cidades Índice Código 0 1 1 2 2 3 3 4 4 5 Para capturarmos o dado Código 3 deste vetor precisamos definir o nome do vetor e o índice da linha que queremos dentro de colchetes. Então para isso definimos o código 3 da seguinte maneira: vetor_cidades[2] pois o índice referente ao código 3 é o índice 2. Vamos agora então criar inicialmente nosso vetor em nosso sistema. Criação do vetor e variáveis necessárias Abra a janela de codificação e na parte onde você irá encontrar o comando var você irá adicionar os seguintes comandos: O vetor é criado com a definição do comando vetor_cidades: array[0..10000] of integer; isso significa que criamos um vetor que possui de 0 a 10000 linhas e que irá armazenar informações do tipo inteiro e para podermos trabalhar futuramente com os índices em nossa programação declaramos a variável x do tipo inteiro. 4
Criação do procedimento de pesquisa de cidades Nós vamos criar um procedimento responsável por pesquisar e fazer a associação dos códigos de cidades no vetor para facilitar nosso trabalho num momento em que for necessário atualizar a lista. Para criarmos o procedimento, pouco acima do setor var em que foi digitado o código anterior você irá declarar nossa procedure, conforme vê destacado na imagem abaixo. Agora pouco abaixo do setor Implementation você irá iniciar nosso procedimento conforme parte em destaque na imagem abaixo: 5
Programação da Procedure Atualiza_cidades() Inicialmente nesta procedure vamos inicializar em 0 a nossa variável x para controlarmos o índice do nosso vetor. Em seguida vamos limpar o combobox cmb_cidades para podermos inserir os resultados da nossa pesquisa dos itens que temos armazenado no banco de dados da tabela cidades. Logo depois fazemos a declaração da sentença SQL de pesquisa dos itens guardados na tabela cidade ordenando por código e logo em seguida executamos a pesquisa. Agora que fizemos a pesquisa de todos os itens da tabela cidades precisamos armazenar os nomes das cidades dentro do combobox e os códigos iremos armazenar dentro do nosso vetor. Para isso vamos criar um laço while que irá ser executado passando linha a linha de registro até que a ultima linha de resultado da pesquisa seja analisada. Esta analise é feita utilizando como condição do nosso laço o parâmetro EOF ( End of File/ Final do Arquivo) do componente query. Dentro deste laço iremos inicialmente armazenar no nosso vetor o valor da coluna código que vem do banco de dados através do índice 0 no parâmetro Fields do componente query. Logo em seguida iremos adicionar o nome da cidade no combobox através da propriedade Items.Add do combo usando o índice 1 no parâmetro Fields do componente query. Após ele fazer essa atribuição para o primeiro item iremos através do comando query.next para o próximo item do resultado, e iremos somar 1 ao valor da variável x que está sendo usado como índice do nosso vetor vetor_cidades. Para finalizar o procedimento vamos logo após o laço fechar a conexão do nosso componente query através do parâmetro close. 6
Você irá visualizar estes acontecimentos na programação completa da procedure exemplificada na imagem abaixo: Programação do Button Cadastrar Para fazer a parte do cadastro vamos clicar duas vezes no botão Cadastrar para irmos para a tela de codificação, nela você irá digitar o seguinte código: Neste código iniciamos finalizando qualquer ação do nosso componente query através do parâmetro close. Em seguida adicionamos no nosso componente query a sentença de inserção de dados no banco de dados. Para pegarmos o valor do código corretamente dentro do vetor fazemos uma associação ao numero do índice do combobox com o índice do vetor através do comando ItemIndex do combobox. Este comando itemindex irá capturar o índice do item do combobox que foi selecionado, sendo assim como o índice do combobox se comporta de 0 até o numero de itens existentes o numero do índice do combobox será exatamente o mesmo numero do índice do vetor que possui o código da cidade selecionada. Veja uma demonstração na imagem abaixo: 7
Programação do Form Para finalizarmos nosso projeto, vamos programar o evento FormCreate, para isso dê dois cliques no Form para irmos para a tela de codificação. Neste evento quando o formulário for criado iremos chamar o procedimento de atualização das cidades que irá pesquisar as cidades do banco e adicionar no combobox cada uma delas. Para executar o procedimento usaremos a programação abaixo: Tendo feito esta programação nosso projeto está finalizado. Nosso sistema esta capturando as cidades da tabela CIDADES e cadastrando o código da cidade na tabela de CLIENTES. Arquivos Anexos Os arquivos exemplos deste projeto podem ser obtidos pelo link a seguir: http://www.idesa.com.br/vitor/vitor_2010_2semestre/arquivos/edicoes/projetos/ped7.rar O arquivo está compactado no formato RAR, é preciso um descompactador deste tipo de arquivo para extrair os arquivos. Em caso de não conseguir baixar o arquivo RAR no endereço acima, me contate pelo email: trabalhos.vitor@gmail.com. 8