Conectando MySql através do Delphi

por Gercil Junio Mateus Nascimento (DelphiOver)

Bom, como todos sabem, o Delphi tem a possibilidade de usar banco de dados Mysql.

Mas muitas pessoas não sabem como fazer isso, para ter uma idéia, o banco de dados SQL, é bem conhecido na programação em Object Pascal, mas servidores SQL são muito caros.

Por isso irei lhes mostrar neste artigo, como usar banco de dados Mysql, que é muito mais em conta que servidores SQL.

Mas afinal, o que é Mysql?
MySQL é um sistema de gerenciamento de banco de dados relacional que utiliza a linguagem padrão SQL e é largamente utilizado em aplicações internet.

Agora vamos, ao que interessa, que é como usar conexão a banco de dados Mysql, e quais componentes usar.
No decorrer deste artigo, irei dar alguns exemplos, comandos e outros.

Na barra de ferramentas do Delphi, crie um novo aplicativo em File >New >Application.

Após feito isto, va até a 7ª aba "dbExpress", após isto coloque os componentes "SQLConnection", "SQLQuery".

Depois de ter colocado estes 2 componentes acima, clique na 5ª aba "Data Access", e coloque o 1º componente, "DataSource" no form também.

Bom, agora os componentes já foram colocados em seu formulário, vamos à configuração dos componentes:

No componente "SQLConnection" de 2 cliques sobre ele, irá aparecer a janela abaixo:

Em "Driver Name", esolha a opção "MYSQL" como na figura abaixo:

Em "Connection Name", escolha a opção "MSConnection" como na figura abaixo:

Agora em "Connection Settings", configure da seguinte forma:

BlobSize = -1
Database = Nome do Banco de Dados Mysql
DriverName = MYSQL
ErrorResourceFile = Deixe em branco
HostName = Nome ou ip do host
LocaleCode = 0000
Password = Senha do host
User_Name = Usuário do Host

Após feita a configuração, clique no botão acima em "Test Connection", para testar a conexão, em seguida clique em OK.

Agora no componente "SQLQuery", na propriedade "SQLConnection" coloque o valor "SQLConnection1".

No componente "DataSource", na propriedade "DataSet", atribua o valor "SQLQuery1".

Pronto sua conexão ao Mysql foi feita, agora vou mostrar um pequeno exemplo, de como iserir dados.
No form, coloque os componentes: "TEdit", "TButton", todos dois estão localizados na 1ª aba "Standard".

De 2 cliques sobre o componente "TButton", ai, aparecerá uma tela, para editar, ai, escreva o seguinte:

SQLQuery1.Active := False;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('insert into nome_tabela (campo1) values ('+''''+edit1.Text+''''+') ');
SQLQuery1.ExecSQL;

Pronto ai está um pequeno sistema que nos mostra passo-a-passo como acessar base de dados mysql e também como iserir dados usando sintaxe sql, não vou me aprofundar mais sobre as sintaxes sql, para isso visite http://www.mysql.org/

Para executar um sistema que utiliza o banco de dados MySql é necessário a existência do arquivo libmysql.dll em C:\Windows\System


delphiover@bol.com.br
Icq: 82152256

COMENTÁRIOS
Marcelo - 29/01/2003 - 08:46:03
O artigo esta ótimo.....parabéns pela iniciativa !
................................................
Marcelo C. Lopes (ma - 29/01/2003 - 08:57:26
Pq no meu delphi ele da esse erro :

Unable to Load LibMysql.dll
................................................
Adauto Filho - 29/01/2003 - 19:43:03
Tambem Tive este problema, acontece que esta dll que vem junto so funciona para algumas versões do BD Mysql. Uma boa solução que encotrei é utilizar a conexão via ODBC, para isto baixe no site da MYSQL o MyOdbc, ai vc utiliza alguma dataset para fazer a conexão.
OBS: Tenho observado que o MyOdbc no WinXP da pau na hora de gravar dados.

T+
................................................
DelphiBoy - Ernesto - 01/02/2003 - 13:36:48
Muito bom, excelente artigo nacional sobre MySQL, o autor esta de parabens pela qualidade do artigo.
................................................
antonio correia - 05/02/2003 - 13:37:08
Uso o mysql com delphi 6/dbexpress já ha um bom tempo e nuca tive problema algum. A aplicação ganha muito em performance e solidez.
Quanto ao problema da LIbMysqll.dll é só instalar os pack 1 e 2 do dephi 6.

Antonio Correia
antoniocorreia@fsonline.com.br
icq: 162211254
................................................
Marcelo Alexandre - 05/02/2003 - 19:32:23
Realmente esta foi uma ótima idéia exemplar.
Esclarecendo o MySql.

Parabéns

Marcelo Alexandre
marceloset@ig.com.br
................................................
Carlos Eduardo - 08/02/2003 - 12:03:43
Fazia um bom tempo que não via um Artigo tão completo assim na NET olha que conheço muitos sites de Delphi.


Também deixo meus parabéns para o amigo que publicou esse artigo e espero que outros tenham uma iniciativa assim.


Carlos Eduardo
eduforumdelphi@ieg.com.br
................................................
Henrique S. Pereira - 11/02/2003 - 10:02:52
Já havia trabalhado com delphi e mysql, mas nao dessa forma, eu simplesmente instalava o drive myodbc e criava um alias no Odbc do painel de controle. Ainda nao conhecia essa forma de fazer. Muito legal.
................................................
Uadrian B Andrade - 14/02/2003 - 09:15:08
Parabéns pelo artigo. ótimo, rápido e passo a passo.
................................................
Carlos José do Nasci - 21/02/2003 - 11:15:42
Usar recursos nativos do delphi é sempre bom, mas para trabalhar com o Mysql, prefiro usar os componentes do Zeos, que são free e podem ser baixados no site zeoslib.org
................................................
BIZUZÃO GALERA - 21/02/2003 - 17:40:51
Caso não queira perder tempo pege na tabela DataAcess e insira um componente DataSetProvider, conf a propriedade DataSet para a SQLQuery1.
Coloque um comp ClientDataset config a propriedade providername para DataSetProvider1 (o que vc incluiu) mude o DataSource para o ClientDataset1 e pronto, agora vc pode editalo como se fosse uma tabela normal.
So não esqueca que mesmo dando o Post vc precisa depois dar o comando ClientDataset.ApplyUpdates(0), para que seja realmente gravado no servidor.

Eguinaldo Marques
eguinaldo@terra.com.br
................................................
Bruno Fernandes - 03/03/2003 - 20:54:03
Olá...É possível fazer isso no Delphi 5?
brunofvieira@terra.com.br
................................................
Alamar Régis Carvalh - 11/03/2003 - 21:18:07
Prezado Gercil:

Antes de mais nada, parabéns amigo, pelo seu artigo e pela sua disposição em ensinar o que você sabe.
Todavia, há de se considerar que o grande problema do uso do DBEXPRESS com o MYSQL é aquela questão de andar apenas UNIDIRECIONAL, o que representa um grande problema.
Eu particularmente, fiz todos os testes, inclusive utilizando o MIDAS associado. Todavia, apesar de funcionar, começou a dar alguns problemas EVENTUAIS, sem a menor explicação lógica e, o pior de tudo, não consegui ninguém que pudesse explicar como solucionar, inclusive no Clube Delphi, já que percebi que pouquíssimas pessoas possuem esta experiência. Tive que voltar a utilizar os componentes ZEOS com o MYSQL, porque, com eles, apesar de componentes extra-Delphi, não tenho problemas.
abraços.

Alamar
alamar@redevisao.net
................................................
klebinho@terra.com.b - 20/03/2003 - 18:27:37
O método é legal só que na hora que vou ativar a tabela me retorna a mensagem que o nome ou a senha está inválido, sendo que testei outros componentes e funcionou. O que pode ser ?
................................................
Wanderlei Silva do C - 29/03/2003 - 16:05:49
Excelente. Vá em frente grande guru!
................................................
Fernando - 07/04/2003 - 11:10:10
Caro,

Seu artigo está excelente.

Gostaria de saber se você tem um passo-a-passo para utilização do Interbase.

Grato,

Fernando
fgvasconcellos@hotmail.com
................................................
Thiago Fernandes Oli - 11/04/2003 - 17:22:05
Na pasta do MySQL há três arquivos com o nome libmySQL.dll nas seguintes pastas:
c:\mysql\bin -- 245,760 bytes
c:\mysql\lib\debug -- 442,428 bytes
c:\mysql\lib\opt -- 245,760 bytes

Qual desses arquivos eu copio para a pasta System do Windows?
................................................
EBER - 16/04/2003 - 01:51:55
no Meu Delphi não tem ah dbExpress como faço pra colocar
................................................
Romulo Bahiense - 17/04/2003 - 11:16:25
Thiago Oli: use o libmysql.dll da pasta bin.


Eu utilizo Delphi com MySQL, porém eu optei por criar uma classe simples para interfacear com ele (de um FrameWork q estou desenvolvendo).

Ele é rápido e faz bem o serviço.

A nova versão do Zeos (ZDBC - 6.0.5, se não me engano) não ficou boa.. muito pesada (acho que a velocidade se compara à da BDE... ehheheheh)

Com relação à sugestão do colega "Bizuzão Galera", é uma forma bastante eficiente também de fazer o serviço.. o único problema é que são 3 componentes para cada tabela (10 tabelas, 30 componentes).
................................................
Fabiano(RS) - 29/04/2003 - 23:02:28
Foi muito útil, direto e de fácil compreenção
Parabéns
................................................
Anderson - 02/05/2003 - 01:19:32
qual versão do delphi se encontra a paleta
dbExpress
................................................
Henry Damasceno Arau - 05/05/2003 - 18:59:10
Usando MySql e acessando através de Driver ODBC é mais lento ou mais rápido do que usando DbExpress? Envie a resposta para damasceno01@yahoo.com.br se possível obrigado.
................................................
Marcos Antônio de Fa - 06/05/2003 - 20:50:18
Isto que é "Um Artigo".
Parabéns pela atitude!
Gostei demais...

Gostaria de um esclarecimento desse porte no INTERBASE.

Abraços!
marcos_mafr@hotmail.com
................................................
Jader T. Andrade - 13/05/2003 - 21:57:56
Eu estou parabenizo ao Delphibr por estes artigos tão importantes a todos os programadores da comunidade delphi, pois são de grande valia.
................................................
Helton L. Casa - 20/05/2003 - 08:48:45
Parabens pelo artigo, contudo peço se possivel maiores informações sobre a utilização de MySQL, e réplica dele.

Grato
heltoncasa@bol.com.br
................................................
Alex Carvalho da Sil - 03/06/2003 - 10:27:59
Estou usando Delphi 5 com MySQL, sempre que tento alterar um registro exibe a mensagem "COULDN'T NOT PERFORM THE EDIT BECAUSE ANOTHER USER CHANGED THE RECORD", vi em alguns artigoque isto é causado pelo BDE onde devo setar nocount de uma determinada forma. Como devo proceder para corrigir este proble? já que o erro ocore apenas em uma tabela e existe nos sistema outras tabelas com os mesmos tipos de campos.
................................................
Marcelo Viana - 10/06/2003 - 12:56:06
Acredito que esta pratica seja muito boa, apesar da lentidao e isntabilidade do ODBC do windows, mas existe um componente chamado ZeosDBO que faz acesso direto ao banco de dados sem necessidade do componente nativo do Delphi
................................................
Clovis - 17/06/2003 - 09:59:01
Consigo Fazer a conexao com do SQLConnection, porem quando vou abrir o dataset me dá um erro "Access violado at address 082E9254 in module 'dbexpmysql.dll'. Read of address 000000000." Estou utilizando delphi7, mysql3.23 e windows 2000. Qual será o problema?
................................................
Sergio Falco Daniel - 18/06/2003 - 21:14:40
O meu problema e seguinte e que eu nao consigo me conectar o MySql ele eu instalei o programa mais ele me pede para criar um TCP/IP
se nao ele nao conecta

o que eu devo fazer

assim a onde eu encontro as dll do mysql


sem mais obrigado


A sim eu me lembrei agora eu gostaria que vc fala-se num artigo futuro como e que eu crio macro de substituicao no delphi como no clipper e se possivel
................................................
HUgo Conde Jr - 26/06/2003 - 12:43:56
parabens pelo artigo!
mas eu utilizo o delphi 5 c/ mysql via obdc e tudo funciona as mil maravilhas, so que quando executo o comando close para encerra o programa gera um erro stack overflow! alguem pode me ajudar a resolver isto? hugoconde@bol.com.br desde ja agradeço

Quanto a ultima pergunta do Sergio Falco Daniel, se o que ele quer é criar menus diferentes em run time para cada usuário eu tenho uma rotina que faz isto e posso mandar ok!
................................................
elicarlos - 30/06/2003 - 21:34:13
queria saber aonde se pega o mysql gratis e queria saber sobre as vantagens e desvantagns
................................................
Rafael - 06/07/2003 - 16:16:02
Parabéns pelo artigo
................................................
Dirso - 11/07/2003 - 22:24:43
Basta eu colocar um componente TSQLConnection e tentar compilar q dah erro - nem completa a compilacao - "Fatal Error Unit1.pas(7): Unit SqlExpr was compiled with a different version of SqlConst.SDRIVERREG_SETTING".
Alguem sabe pq?

Grato,
Dirso
dirso@jrsoftwares.com.br
................................................
heitor@grupolions.co - 09/08/2003 - 18:10:15
A idéia do artigo seria boa se funcionasse, mas não está completo, por isso não farei elogio algum. Acho que o autor deve corrigir o artigo colocando ele mais completo, ou seja funcional sem erros. Até porque o problema com a Dll era para ter sido visto pelo autor.
................................................
Claudioney - 12/08/2003 - 19:45:06
Pra mim está de prabéns, dei a volta por toda a net e não encontrei tutorial melhor que esse. a única coisa que queria saber eh se o banco de dados não existir, ele pode criar?
................................................
Gustavo - 15/08/2003 - 12:20:38
Artigo muito bom mesmo, e encoraja muitos a usar o MySQL com Delphi. Parabens
................................................
Luiz Carlos Ruiz Ces - 22/08/2003 - 21:40:33
Parabens pelo Artigo.

Eu utilizo o MySql desde 2000 com a lib Zeos.

Mas fiz os teste, e funcionou sem problemas.

Parabens!!!

Luiz
................................................
Eduardo Luis Gomes - 12/09/2003 - 10:53:11
Só funcionou com o myodbc instalado, caso contrario dá um monte de erro de endereço de memória.

eduardoquebrado@yahoo.com.br
................................................
Anderson Caparroz - 26/09/2003 - 17:13:28
O artigo esta ótimo.....parabéns pela iniciativa !
................................................
Ronni Von - 04/11/2003 - 11:22:21
Sou aprendiz em Delphi e Mysql. mais esse material está relamente para iniciantes, soh queria saber o pq do erro com User/Password pois acesso pelo mysql-front com o mesmo user/password. aki naum funciona

grato


ronnivon@hotmail.com
................................................
Leonardo - 16/12/2003 - 23:08:52
Muito bom esse site, gostaria de saber se vocês tem algum site que possa dar também maiores dicas de utilização do Zeos, pois instalei e não estou conseguindo me conectar no mysql (Talvez eu deva estar fazendo alguma orelhada)

Continuem com o trabalha sem duvida esta excelente.

Obrigado

Leonardo
e-mail drakconf@hotamail.com
................................................
Joao Carlos Xavier d - 21/01/2004 - 08:11:54
Por Favor, estou com o Windows XP Professional, segui todos os passos conforme manda as recomendações acima, mas mesmo assim emite o erro
"Unable to Load LibMysql.dll "
O que tenho que fazer pra corrigir isso?
................................................
Danilo - 01/02/2004 - 14:41:43
Alguem pode me dizer, por favor, aonde eu posso encontrar essa DLL?
meu e-mail é crazy_vampire@ig.com.br
................................................
Andre Furquim - 11/03/2004 - 03:54:29
Excelente... Depois deste artigo espero que todos adotem esta maneira de publicação, simples e muito objetiva... Parabens
................................................
Fabinho - 18/03/2004 - 16:50:50
Preciso encontrar o DBExpress... Dá para colocar no Delphi5 ?
................................................
Miguel - 06/04/2004 - 21:42:23
O que fazer quando da invalid username/password se com o zeos eu consigo conectar tranquilamente?
Meu e-mail é mvianei@hotmail.com
Grato.
................................................
Rodrigo - 09/04/2004 - 23:29:14
Basta eu colocar um componente TSQLConnection e tentar compilar q dah erro - nem completa a compilacao - "Fatal Error Unit1.pas(7): Unit SqlExpr was compiled with a different version of SqlConst.SDRIVERREG_SETTING".
Alguem sabe pq?

Grato,

Rodrigo

brautomacao@netsulminas.com.br
................................................
Dimas Arantes - 22/04/2004 - 15:17:13
Parabens Gercil pelo artigo ficou otimo .
Mais nao entendo tenho O myobdc , instalado na maquina e ainda da erro .
Estou usando o Windows XP e o Delphi 7.
Sabe me dizer pq do erro
................................................
Marcelo da Cunha Rod - 03/05/2004 - 14:24:29
Consegui fazer a conecção atravéz do mysqldac, mas não esou conseguindo fazer consultas, que nada mais é a busca de informações no mysql. Se algém puder me ajudar obrigado.
................................................
José Augusto - 10/05/2004 - 12:18:12
Consigo Fazer a conexao com do SQLConnection, porem quando vou abrir o dataset me dá um erro "Access violado at address 082E9254 in module 'dbexpmysql.dll'. Read of address 000000000." Estou utilizando delphi6, mysql3.23 e windows XP. Qual será o problema?
................................................
Claudio Alcasar - 10/06/2004 - 19:09:46
Estou com o seguinte problema,

uso delphi 6, dbexpress, My sql 4

tudo funciona perfeitamente, em uma determinada tabela passou a dar o seguinte erro apos o post no metodo ApplyUpdates(0); Commands out of Sinc; You Can't run this command.
Alguem tem uma ideia do que possa estar causando este erro.
................................................
Claudio Alcasar - 11/06/2004 - 15:32:46
Problema Commands out of Sinc resolvido

o problema e causado quando voce abre uma Qry para consulta e a mantem aberta por todo o processo de inclusao decorrido o tempo quando voce tentar usar uma outra tabela para insert e usar um campo da Qry
para atualizar um campo da tabela
ocorre uma diferenca de tempo entre as duas o que e entendido pelo banco de dados como fora de sincronismo durante o applyupdates;

para resolver a situacao, feche e abra a Qry
junto com a tabela no momento da inclusao
e tudo se resolve.

Como procurei muito na internet, encontrei outras pessoas com o mesmo problema e nao encontrei resposta. resolvi postar esta.

sucesso

claudioalcazar@tomada2.com.br
................................................
FaiSCa - 13/06/2004 - 14:36:52
ae mano queria saber como ensiro mais de 1 campo na linha de comando SQLQuery1.SQL.Add('insert into nome_tabela
pq tipo quando to inserindo ele so aceita com q fiquei na mesma linha quando eu mudo pra linha debaixo da erro c vc souber como me ajudar fico grato faiscask8@msn.com
................................................

Antes de comentar...
- Preserve a qualidade destes comentários;
- Este espaço deve ser usado para comentários sobre a notícia. Se você tem dúvidas ou precisa de ajuda, use nossa lista lista-delphi;
- Mantenha o foco nos argumentos e no assunto ;
- Não faça ataques pessoais;
- Pense 5 vezes antes de entrar em discussões inúteis, como "qual é a melhor, essa ou aquela linguagem", mesmo se alguém já tiver provocado - um erro não justifica o outro;
- Não seja um "mala" :)

Envie seu comentário
Nome
Comentários