Projeto Cadastro no MySQL, criando o projeto – I


Como havia comentado no post anterior, vamos tentar desenvolver juntos de forma prática um programa que faz acesso ao banco de dados MySQL, de forma simples faremos um programa que fará inclusão, alteração e exclusão de dados em uma tabela, e também a recuperação destes dados e exibição em uma grade.

No final deste post você pode baixar o arquivo com o projeto cadastro que criei aqui na minha máquina, em todos os posts vou disponibilizar um arquivo com o projeto atual, assim poderemos fazer a aula e em caso de dúvida baixar e testar o exemplo.

No meu equipamento está instalada a HMG 3.0.39, você pode instalar a mesma aí ou qualquer outra que seja compatível e estável.

Após criar o projeto e terminar este exemplo, você deverá ter os seguintes arquivos na pasta do seu projeto:

Note que existe um arquivo marcado, este arquivo é libmySQL.dll, notamos que depois de criar nosso projeto este arquivo não vai aparecer na nossa pasta, basta localizá-lo dentro da instalação do HMG e copiá-lo para cá, no arquivo que estou disponibilizando para download já existe o arquivo prontinho para usar.

Este arquivo é que faz toda a mágica do programa, dentro dele estará as funções que nos darão total acesso ao MySQL, é importante que ele sempre esteja na pasta do executável dos nossos programas, então é isso mesmo meus amigos, sempre que distribuirmos uma aplicação HMG com acesso ao MySQL precisamos distribuir esta DLL junta.

Como criar o novo projeto?

Abra a sua HMG-IDE e clique no botão NEW PROJECT, conforme a imagem abaixo:

Após clicar no botão NEW PROJECT,  a tela abaixo irá abrir-se:

Nesta janela  NEW PROJECT, vá até a pasta que você criou, neste exemplo CADASTRO e informe o nome CADASTRO para o projeto, conforme a imagem acima.

O projeto será criado e você terá um formulário novinho para você começar a configurar, observe a imagem abaixo:

Vamos configurar nosso formulário igual à imagem acima, em “Form” configure a propriedade “Title” com o texto “Cadastro de Notas”, inclua 3 (três) componentes LABEL e configure a propriedade “Value” com os valores “Nome”, “Nota” e “Busca Nome” respectivamente, inclua 3 (três) componentes TEXT e configure-os a propriedade “name” com os seguintes valores “Text_nome”, “Text_nota” e “Text_busca”, ainda no componente “Text_nota” configure a propriedade “DataType” para o valor “NUMERIC”, inclua 4 (quatro) botões e configure a propriedade “caption” para os valores “Salvar”, “Ignorar”, “Apagar” e “Alterar” e respectivamente a propriedade “name” como “Button_Salvar”, “Button_Ignorar”, “Button_Apagar” e “Button_Alterar”, inclua um componente GRID e configure a propriedade “name” para “Grid_data”, a propriedade “HEADERS” para o valor “{‘Nome’,'Nota’}”, a propriedade “items” para o valor “{ {”,”} }” e por fim a propriedade “Widths” com o valor “{ 170,50 }”.

Tenha muita atenção ao configurar as propriedades do componente GRID, qualquer erro e poderemos ter um erro “array size mismatch. Program Terminated“, ou outro mais difícil de resolver, já vi muitas pessoas desistindo ao deparar com um erro desses e não saber onde está a falha. Se você prestar atenção o componente GRID é um visualizador de vetores, então ela precisa ser configurada para mostrar tal vetor (array).

Notamos que falta um botão “Buscar”, a ausência dele é proposital, pois veremos como fazer a busca sem ele, e depois com ele, particularmente gosto de ter um botão “Busca” em meu projeto, assim fica mais claro para o usuário.
Clique aqui para baixar o CADASTRO.1.rar

Até a próxima.

Publicado em Programação | 2 Comentários

Respondendo Questoes

Nao eh de hoje que vejo perguntas rondando forums, blogs, sites e emails ligados ao HMG, perguntas essas sempre relacionadas a continuidade da linguagem HMG, enfim, eu mesmo ja publiquei sobre a falta de desenvolvimento para a HMG, mas agora posso dizer que isso nao eh verdade.

A versão HMG 3.0.39 ja esta em pleno funcionamento, baixei, instalei e testei meus projetos, o resultado foi 100% de compatibilidade, velocidade no uso, e também correção de pequenos erros, a versão da HMG-IDE também esta ai, um pouco mais melhorada, o que relato eh que nestes últimos meses estamos acompanhando um nova pessoa encabeçando o projeto, diferente daquilo que muitos temiam, “no caso do Roberto Lopez não poder alterar quem o faria?”, esta ai, ja temos suporte de alguém ”ajudando” o Roberto diretamente.

Enfim, hoje estou aqui para voltar a escrever para vocês, não esta fácil, pois tenho muito trabalho ultimamente.

Atualmente estou desenvolvendo um projeto grande em PHP no qual o HMG tem dado apoio ao fazer a transição e comunicação de dados entre uma base local e uma base SQL, assim como toda a comunicação do WebServices, o projeto ainda vai alem com o desenvolvimento em Java + SDK Android, para celulares e tablets Android, entao como voces podem perceber trabalho nao esta faltando. Vou tentar relatar parte da experiencia que  estou tendo para o ambiente HMG.


Das minhas experiencias, pretendo explicar como acessar corretamente o SGDB MySQL, criar WebServices com HMG + PHP e tudo o mais que puder dividir com voces, mas ainda tenho duvida sobre:

  • “existem pessoas que ainda nao conseguiram instalar o HMG e gerar algum aplicativo? Ola Mundo! que seja.”;
  • “existem pessoas que nao entenderam como funciona realmente a dupla Harbour MiniGUI?”.

Pronunciem-se abaixo, pois neste caso vou tentar criar um passo a passo, mais bem explicado para fazermos essas tarefas, que para mim pode ser simples, mas que compreendo que podem existir pessoas que ainda nao conseguiram, isso nao eh vergonha, pois sem informacao realmente fica dificil. Aguardo.

Bom…. soh para finalizar, o HMG Oficial continua em pleno desenvolvimento na versao 3 e tambem na versao 4 e aqui na HMG vamos voltar a publicar.

Publicado em Programação | 3 Comentários

Procuro Colaboradores

Na tentativa de melhorar o nível do site, estou abrindo vaga para colaboradores, precisamos de gente séria e comprometida com o projeto Harbour, os textos poderão ser em português ou em inglês, não serve “copiar e colar” aqui tem que ser texto elaborado com seriedade e que sirva para toda a comunidade, colabore é tudo muito bem vindo.

Publicado em Editor-Ombudsman | 5 Comentários

Harbour IDE (HBIDE)

É isso mesmo meus amigos, parece que por enquanto estamos mesmo sem uma interface gráfica, diferente da HMG-IDE que apesar de todos os seus problemas e defeitos nos oferecia uma experiência de colar e configurar componentes, na HBIDE não temos essa facilidade.

A explicação é bem fácil, o Harbour em si não trata nenhuma biblioteca gráfica em particular, ou seja, o Harbour não é compatível com a biblioteca e sim a biblioteca é compatível com o Harbour, então ele não poderia suprir a programação com um ambiente de “colar/configurar” componentes, mas estou verificando a possibilidade de fazer isso com o editor da Nokia Qt, assim que tiver posição público aqui.

Publicado em Programação | 6 Comentários

Retomada

A palavra retomada pode soar estranha em um espaço onde de costume sempre tratamos de uma linguagem que de certa forma já trata-se de uma “retomada”, porém em meus últimos posts feitos em dezembro de 2010 eu havia começado a falar e mostrar o funcionamento do HMG com o MySQL, porém com quantidade de trabalho que tive neste período acabei não dando sequência as postagens, fato esse que mostrou-se interessante e muito útil.

Vou explicar isso, conforme grande quantidade de emails que recebi, ficou claro que o uso do DBF ainda é muito intenso pela comunidade, e mesmo por aqueles que de certa forma estão vindo até aqui buscar uma forma alternativa de programar e armazenar seus dados, então fica claro para mim que não adianta falar apenas de MySQL quando o interesse é outro, me admirou também o fato que muitos, veja bem, muitos mesmo procuram pelo “DBF Server Lights”, meu pequeno programa servidor de arquivos DBF que foi escrito utilizando a tecnologia NETIO, enfim me resta então fazer o seguinte reestruturá-lo e distribuí-lo novamente.

Também notei nestes emails que recebi que este local agora mais do que nunca é ponto de referência para Harbour e MiniGUI em toda a Internet, visto que o Google já posicionou este local como terceiro, segundo e em alguns casos como o número um de suas buscas, e veja que o algorítimo de busca do Google merece toda credibilidade, principalmente agora que separa o verdadeiro do falso, o ideal da frustração, que coisa, aumentou a responsabilidade aqui. (chega de demagogia para mim mesmo).

Um camarada fez alguns comentários interessantes aqui no site, seu nome é Sr. Sven Bleckwedel, seu nome está ligado à ADMMAN Informática, enfim seus comentários mostram o interesse profissional de pessoas que não brincam na área de tecnologia, foi de grande valia para mim ler os comentários dele.

Porém tenho algo profundamente difícil em dizer, o HMG realmente mudou de estágio e está na sua versão 4 e parece ter perdido um pouco da sua característica fantástica até a versão 3.0.35, mas isso pode ser apenas agora no início. Tenho visto bastantes esforços em mudar isso, a parte difícil é realmente essa, terei que estudar um pouco sobre ele antes de poder citar artigos que demonstrem verdadeiramente seu funcionamento.

Mas para não ficarmos sem nada aqui, vamos ao que interessa, vou continuar publicando textos aqui, e agora vamos por vários lados, vamos voltar ao Harbour e mostrar quem é esse porto seguro do Clipper, vamos ao NETIO com o DBF Server Lights e mostrar como se conecta e faz-se o uso do DBF via TCP/IP, vou manter o MySQL com alguns posts, pois agora estou mais envolvido do que nunca com o trabalho em SQL, vamos continuar aprendendo um pouco de HMG 3.0.35 e aos poucos incorporando o uso da HMG 4.

Agradeço as milhares de visitas que tive nestes meses, e saber que tivemos milhares de visitantes diferentes (isso mesmo foram mais de 5 mil visitantes diferentes em 3 meses) mesmo sem novos posts incentiva muito a continuação do trabalho. Obrigado ao carinho e dedicação de cada um.

Quem tiver algo que queira publicar aqui, queira enviar para mim no email hmglights@hotmail.com ou para danielcrocciari@hotmail.com, ficarei feliz em ler e se for o caso postar aqui com os devidos créditos, quando enviar favor enviar no formato texto puro (TXT), por favor.

Até o próximo post.

Publicado em Programação | 2 Comentários

Onde conseguir o MySQL

Olá para todos os seguidores do site.

Como havia prometido, vou trazer apartir deste post uma sequencia de publicacoes que tem a finalidade de mostrar a todos nós a dar os primeiros passos em MySQL com HMG, então o primeiro passo será, termos este SGBD (Sistema de Gerenciamento de Banco de Dados) rodando em nossa máquina de desenvolvimento.

Para isso precisamos conseguir o instalador do SGBD, lembro que o MySQL é gratuíto e muito robusto, muito mais do que você pensa, destaco que uma recente pesquisa a nível mundial mostrou que MySQL é a base de dados mais utilizada em ambientes da WEB e agora começa a ganhar muito espaço nas redes internas (corporativas), MySQL é uma solução cujo custo benefício realmente é muito bom.

Onde conseguimos o instaldor do MySQL?

Isso é bastante simples, temos diversos sites que disponibilizam alguma versão deste SGBD, porém no site oficial do MySQL (www.mysql.com) é onde aconselho para que você não tenha pacotes modificiados onde foram adicionados softwares que não tem nada haver com o MySQL, ou não são necessários. O download pode ser feito na página  www.mysql.com/downloads/mysql/

Agora eu realmente tenho motivos de sobra para dizer-lhe que na sua máquina de desenvolvimento seria bem interessante você ter instalado um pacote de distribuição que venha com um servidor WEB junto, pelo simples motivo de poder acessar sua base direto do seu navegador e dar manutenção com um aplicativo bem completo, diretamente de seu navegador, após testar inúmeras distribuições eu constatei (pelo menos para mim) que o pacote WampServer é o melhor deles, ele trás o MySQL, o PHP e o Servidor WEB Apache, para conseguir este aplicativo é bem simples, vou colocar abaixo alguns locais de download, você escolhe:

WampServer (Foto: reprodução)

Eu aconselho baixar diretamente do Baixaki, pelo simples fato de ser mais simples e ter alguma instrução em português.

Após conseguir a distribuição basta instalar, quem quiser esperar vou escrever um passo a passo de como fazê-lo, mas quem quiser fazer agora mesmo, apenas não modifique as opções padrões da instalação, pois minhas explicações serão oferecidas justamente conforme o padrão.

Do mais, boa sorte a todos e até a próxima.

dica: quem for baixar apenas o MySQL eu aconselho esta versão do site oficial

Windows (x86, 32-bit), MSI Installer 5.5.8 120.6M
(mysql-5.5.8-win32.msi)

 

Publicado em Harbour MiniGUI, MySQL, Programação | Deixe um comentário

Conectando e destruindo a conexão

Não é preciso ficar explicando tudo sobre MySQL, pois acredito que quem é programador já deve ter ouvido falar desse banco de dados, quem não souber nada ou quiser atualizar-se sobre esse SGBD pode ler uma matéria bem completa no Winkipedia: MySQL, enfim vamos começar nossos estudos utilizando o HMG com MySQL.

Em primeiro momento vou levar em teoria que você já tem o MySQL instalado em seu equipamento, senão tiver, uma maneira bem simples de tê-lo configurado e funcionando para você trabalhar é através da distribuição do WebServer Wamp Server, que vai instalar para você o Apache Server, PHP e também o MySQL, você não precisa ter tudo isto instalado apenas o MySQL é necessário, mas se conselho for bom, aconselho que deixe tudo ai. Você vai notar que poderá usufruir de muitos recursos em seu sistema através de um Server Web dentro da rede do seu cliente, enfim, depois veremos isso. A mais junto com o Server Web teremos a aplicação MyPHPAdmin,

MyPHPAdmin (Web reprodução)

excelente e completa ferramenta para administrar um Banco de Dados MySQL.

O MySQL diferente das tabelas DBF é uma aplicação Server que abastece uma aplicação Client, no caso sua aplicação HMG será o cliente desse banco de dados. Sempre que falamos de um banco de dados Client/Server é quase que normal precisarmos fazer conexão neste banco através de endereço, usuário e senha. No MySQL não é diferente, provavelmente se você não modificou em nada sua instalação do MySQL o seu usuário será “root” e sua senha será em branco, o endereço será “localhost”.

Diferente do DBF que abriamos as tabelas e trabalhavamos o tempo todo com elas e quando encerrávamos à aplicação fechávamos a tabela (o que não era prudente, mas bem mais fácil de fazer), no MySQL não é o ideal, devemos ter em mente que iremos trabalhar com um BD que estará distante, podendo estar na WEB e que o acesso à ele deve ser feito por sessões, e assim que terminarmos a operação daquela sessão o ideal seria fechar a conexão, para liberar o SGBD e também não corrermos o risco de ficar com uma “conexão quebrada” quando o SGBD não estiver mais disponível.

Digo isso baseado que um dia sua aplicação não estará nos domínios físicos de sua empresa, atualmente com o conceito de nuvem que estamos adotando em nossas empresas é comum termos nosso SGBD rodando em algum lugar virtual da WEB, então se falhar a “ponte” como fica nossa aplicação? Existem formas para tratar isso, não veremos agora, porém vamos ter o bom hábito de fechar a conexão sempre que terminarmos uma operação.

Então segue abaixo o código inicial do “main.prg” com função “main”, onde definimos as variáveis públicas, atribuímos valores de acesso ao banco de dados, nesse ínicio fazemos uma conexão com o SGBD se ela for possível destruímos a conexão e damos sequência ao programa, se não for possível fechamos nossa aplicação, pois sem o SGBD não dá para trabalhar.


#include
Function Main
   PUBLIC pcHostname, pcUser, pcPassword, pcDatabase, plLogin
   PUBLIC oServer := nil

   pcHostname := "localhost"
   pcUser := "root"
   pcPassword := ""
   pcDatabase := "BDdoSeuCliente"
   plLogin := .f.

   MySQL_Connect()

   if  !plLogin
      return nil
   endif

   MySQL_Destroy()

   .
   .
   .

Vou explicar abaixo a função MySQL_Connect, que aqui no nosso exemplo tem a função de criar uma conexão com o SGBD, ela é bem simples, pegamos a variável objeto “oServer” e atentamos criar uma nova conexão utilizando as variáveis que definimos como públicas lá em “Main”, após fazermos isso testamos se existe erro no objeto, se deu erro informo o erro e fecho a aplicação, se não existir erro significa que a conexão foi perfeita, então atualizo a variável booleana de controle e retorno ao módulo que chamou a função, neste caso o “Main”.


FUNCTION MySQL_Connect()

   oServer := TMySQLServer():New(pcHostname, pcUser, pcPassword )

   IF oServer:NETERR()

      MSGSTOP("Error connecting to SQL server: " +;
             oServer:ERROR()+chr(13)+chr(10)+;
             "Host: "+pcHostname+"",pcSistema)

      plLogin := .f.

   ELSE

      plLogin := .T.

   ENDIF

RETURN nil

Como havia dito acima é muito importante e um costume excelente “quebrar” ou destruir a conexão com o SGBD para que ele fique livre para fazer outras tarefas, lembre-se que ele é um Gerenciador não é exclusivo seu, ele precisa atender todos os clientes que precisarem dele, não vamos criar aplicações egoístas, isso será ruim para nós mesmos. Explicando a função abaixo, verificamos se a variável objeto já não está livre, se não estiver destruímos a conexão e limpamos o objeto.


FUNCTION MySQL_Destroy()

   IF oServer != nil

      oServer:DESTROY()
      oServer := nil

   ENDIF

RETURN nil

Vale lembrar que estamos falando de um verdadeiro SGBD então diferente das tabelas DBF que precisamos administrar cada operação, aqui não será assim, uma base bem estruturada e deixando todo o controle para o SGBD você terá uma aplicação rápida, simples, leve e sem dores de cabeça para você.

Sei que esse ínicio não é grande coisa, porém é algo que acredito ser muito importante, precisamos entender a importância de abrirmos uma conexão para cada sessão de operação que formos fazer e destruí-las logo em seguida, procure mais informações sobre isso na WEB será muito importante. Lembro também que aprender um pouco de SQL é também tão quanto importante, se não até mais. Facilitará nossas vidas.

Por enquanto é só meus amigos.

Até.

Publicado em Harbour MiniGUI, MySQL, Programação | 2 Comentários

Nova Direção

Não vamos trocar de direção do tipo “controle”, “administração”, não é isso meus amigos, a direção que digo aqui é exatamente o caminho a seguir daqui para frente. E já está muito mais evidente do que nunca que nós programadores Clipper que conseguimos aprender os novos conceitos do HMG devemos seguir por um novo caminho para BD, não dá mais para ficarmos apenas nas tabelas DBF, por mais que possamos tentar melhorar o antigo padrão, ele não será suficiente para as próximas demandas de software que teremos. Não digo para esquecer DBFs, não façam isso, pois precisaremos dele ainda, talvez por mais tempo que vocês possam pensar, mas daqui para frente não mais como nossas tabelas principais, pensemos nele como nosso apoio para tarefas menores.

Daqui para frente irei para um Norte neste site, as publicações serão excessivamente escrita para criarmos aplicações com o Banco de Dados MySQL, e vou começar do inicio, inclusive com as sintaxes de dados SQL.

Boa sorte para todos nós e até o próximo post, nosso novo caminho, conto com vocês.

Publicado em Editor-Ombudsman, Harbour MiniGUI | 3 Comentários

Comando de um array (matriz)

Segue abaixo uma lista de comandos para manipular variáveis do tipo array, as famosas matrizes dimensionais, elas são excelentes para transportarmos nossos dados de um lado para outro, podendo utilizar diversos tipos internos, o conceito de matriz é muito simples, em uma nomeclatura inserimos, localizamos e acessamos informações através de um ponteiro, pode ser utilizada em conjunto com um componente GRID, mas ela não se limita a isso, cada profissional usa e abusa do uso dessas matrizes conforme sua afinidade e necessidade do conceito.

Array

AADD() –> Adiciona dinamicamente um elemento para uma variável do tipo array.
ACHOICE() –> Permite a seleção de um elemento de uma matriz.
ACLONE() –> Duplicar uma matriz multidimensional.
ACOPY() –> Copiar elementos de uma matriz para outro.
ADEL() –> Eliminar um elemento de uma matriz.
ADIR() –> Preencha matrizes pré-definidas com o arquivo de informações do diretório.
AEVAL() –> Avalia o elemento de índice de uma matriz.
AFILL() –> Preenche uma matriz com um valor especificado.
AINS() –> Insere um valor nulo em uma posição de índice da matriz.
ARRAY() –> Cria um array não inicializado com o comprimento especificado.
ASCAN() –> Localiza elementos da matriz com uma condição especificada.
ASIZE() –> Ajusta o tamanho de uma matriz.
ASORT() –> Ordena um array.
ATAIL() –> Retorna o elemento mais à direita de uma matriz.

Abraços e até+

Publicado em Harbour MiniGUI, Programação | 1 Comentário

HMG no OSx

Estava eu passeando pelo forum hmg olhando as modificações e as correções de erros que estão sendo feitas, as experiências realizadas, então vi que um de nossos colegas, executou os exemplos da HMG4 em ambiente OSx da Apple, e vejam a baixo o resultado.

Esse é apenas um post demonstrativo, como eu disse, na próxima semana voltamos com força total.

Abraços e até+

Publicado em Editor-Ombudsman, Harbour MiniGUI | 2 Comentários