Вы находитесь на странице: 1из 79

www.ramosdainformatica.com.

br

MySql O Banco de Dados do Momento


Ao longo da era da informtica, os programadores vem batalhando com diversos bancos de dados, muitos foram criados, muitos apresentaram problema de alguma forma, uns muito lentos, outros instveis, outros sem recursos. Com todos os problemas, as empresas que desenvolvem, tiveram de corrigir alguns BUGS e at lanar outros para atender nossas necessidades, depois de famosos bancos de dados como: Oracle, SQL Server, Access, Interbase, etc. chegou o MySql, um tipo desenvolvido para LINUX que agora pode funcionar em Windows.

As vantagens deste banco de dados:


- Funciona em Windows e LINUX - Funciona em rede - Funciona atravs de um IP - Conecta via Internet - Fcil de usar - Super seguro - Usa cdigo SQL Ou seja, temos aqui um banco de dados dos sonhos, alm de tudo, poder adquiri-lo neste site: www.mysql.com. Esta verso que estou enviando, no tem todas as ferramentas, tem apenas tudo que vamos usar, ao instalar no seu micro, completo, so quase 20 MB, por isso no enviamos tudo. O MySqlFront um programa que funciona para criarmos banco de dados, tabelas, consultas, etc. no MySql. Agora que j temos uma leve explicao, vamos comear a trabalhar. D um clique duplo em Instalar para instalar o MySql no seu micro. Terminou? Ento j temos o MySql em seu computador, vamos colocar este programa para rodar.

Arquivo do MySql:
Entre em C:\MySql

www.ramosdainformatica.com.br
Veja, 3 pastas foram criadas (bin, data, share), os outros arquivos: O MySqlFront o programa que vamos usar para criar nossas tabelas, no vem no MySql, est a porque preparei o disco de instalao com ele; Os outros so criados automaticamente pela instalao, tambm no fazem parte do MySql.

O que tem nestas 3 pastas ?


Vamos analisar A pasta bin tem 4 arquivos:

Mysqlcheck Utilizado para manuteno de tabelas, o MySql foi desenvolvido para


funcionar em rede, no pode ser desligado incorretamente, como toda rede, neste caso alguma tabela poder corromper, quando isso acontece, corrigimos com este arquivo.

MySqld-nt Faz o MySql rodar no Windows NT e XP MySqld-opt Faz o MySql rodar em Windows 95, 98 e 2000 WinMySqlAdmin O MySql inicia guiado por um arquivo chamado My.ini que
criado quando o MySql roda pela primeira vez, neste arquivo contm informaes do caminho onde o banco de dados (MySql) est instalado, e do sistema operacional, o WinMySqlAdmin cria este arquivo e verifica nele as configuraes toda vez que o executamos, sendo assim podemos concluir que o WinMySqlAdmin funciona para rodar, ou parar o MySql.

www.ramosdainformatica.com.br

A pasta Data
Nesta pasta fica todas as tabelas, toda vez que criarmos um banco de dados, uma pasta com o nome do banco de dados vai aparecer a, dentro desta pasta as tabelas, j existe uma pasta chamada mysql, esta pasta o mysql usa. Veja abaixo:

A pasta Share

Esta pasta utilizada pelo MySql para controlar mensagens de erros, logs. Alem destes, 2 DLLs vo para o system do Windows: dbexpmysql.dll e LibMySql.dll

www.ramosdainformatica.com.br

Rodando o MySql
Para realizar qualquer operao, necessrio que o MySql esteja rodando, depois que rodarmos a primeira vez, ele vai ficar no iniciar do Windows, isso significa que sempre que iniciar o micro, o MySql vai rodar. Entre em: C:\MySql\bin Veja abaixo:

D um clique duplo em winmysqladmin Voc vai ter esta tela, preencha User e Password = Supervisor. O nome e a senha pode ser qualquer um, menos root.

www.ramosdainformatica.com.br

Este nome e senha somente para criar o arquivo de configurao que fica em c:\Windows, ou C:\WinNT, chamado My.ini

Veja o que tem o arquivo:

www.ramosdainformatica.com.br
Parece um bicho de 7 cabeas, mas no , todas estas linhas com # so comentrios, no conta, somente estas abaixo esto fornecendo informao ao MySql, veja: basedir=C:/MySql Onde est o mysql, caso mude a pasta ter que mudar aqui datadir=C:/MySql/data O caminho da base de dados (tabelas) [WinMySQLadmin] - Programa que est iniciando o MySql Server=C:/MySql/bin/mysqld-nt.exe - Sistema Operecional user=Supervisor - Nome password=Supervisor - Senha tudo simples, caso mude uma pasta do MySql, ter que vir aqui e alterar. Depois que digitou aquela senha, um farol verde apareceu do lado esquerdo do relgio do Windows, este farol verde indica que o MySql est rodando, Vermelho indica que est parado, cliquei no farol, veja:

Aqui posso parar o MySql simplesmente escolhendo a opo Stop the Service, o farol vai ficar vermelho, ento clico novamente e escolho Start the Service para voltar a rodar.

O MySqlFront
Neste curso vamos aprender a usar u MySql no Delphi, mas antes disso vamos ver como funciona, afinal, tudo criado nele, no Delphi apenas conectamos para inserir ou apagar dados. No seu menu Iniciar Programas MySql MySqlFront, d um clique. Veja a tela abaixo:

www.ramosdainformatica.com.br

Como foi citado acima, o MySql pode conectar em rede comum e Internet, esta tela est esperando ser preenchida para conectar: Itens desta caixa de dilogo: Host - Local de conexo User - Usurio Password - Senha Port Porta que o MySql usa Para conectar, dever fazer o seguinte: Simplesmente clique no boto New que o MySql ser conectado no seu tipo padro (localhost): Veja abaixo

www.ramosdainformatica.com.br

Se fossemos conectar a Net, teramos que alterar estes dados acima, como no vamos fazer isso agora, simplesmente clique em Connect. Veja o MySql

www.ramosdainformatica.com.br

Criando Database
Se voc entrar em C:\MySql\Data e criar uma nova pasta, esta pasta passa a ser um banco de dado, afinal isso que acontece quando se digita um cdigo aqui neste Front. Clique na guia Query e digite: Create database dbcliente; Tecle F9 Clique em MySql com o boto direito do mouse e escolha Refresh. Veja:

www.ramosdainformatica.com.br

Este dbcliente somente uma pasta criada em c:\mysql\data:

www.ramosdainformatica.com.br

Neste local poder criar quantos Database quiser.

Criando uma Tabela


Clique em Query e digite: use dbcliente; DROP TABLE IF EXISTS tbcliente; CREATE TABLE tbcliente ( data date, hora time, codigo integer(13), nome varchar(60), email varchar(40), salario float, obs text ); Veja

www.ramosdainformatica.com.br

Tecle F9 Clique em dbcliente e tecle F5 (para atualizar, sempre), veja:

www.ramosdainformatica.com.br

Todo isso pode ser criado sem ter que digitar cdigo. Vamos ver mais adiante. O que significa tudo aquilo que digitamos: - Use este banco de dados use dbcliente; -Apague esta tabela se existir, para criar novmente DROP TABLE IF EXISTS tbcliente; -Crie a tabela tbcliente, comece aqui, acabe quando fechar o parntese e colocar ; CREATE TABLE tbcliente ( -Campo Data, tipo de dados que este campo aceita: data data date, -Campo hora, dado hora hora time,

www.ramosdainformatica.com.br
-Campo cdigo, dado nmero inteiro codigo integer(13), -Campo nome, dado caracteres nome varchar(60), -Campo Email, dado = caracteres at 60 dgitos (o mximo 255) email varchar(40), -Campo salario, dado = nmero salario float, -Campo obs, dado = texto longo obs text ); - Acabe a tabela aqui

Criando outra tabela:


Clique na aba Query e digite: use dbcliente; DROP TABLE IF EXISTS tbvendedor; CREATE TABLE tbvendedor ( data date, hora time, codigo integer(13), nome varchar(60), email varchar(40), comissao float, obs text ); Tecle F9 Clique em dbcliente e tecle F5 para atualizar.

Vamos criar uma tabela sem ter que digitar cdigo Voc j sabe que para criar um ALIAS (database) simplesmente podemos criar uma pasta em c:\MySql\Data que j alcana o objetivo, outro mtodo clicar na aba query e digitar

www.ramosdainformatica.com.br
Create database NomeDoDatabase Outrro mtodo clicar no menu Extra e escolher Create Database, digitar o nome do Database e clicar Create (desta forma no fizemos, pode testar). Para criar uma tabela assim, deve fazer o seguinte: -Clique em dbcliente A tabela vai para o database selecionado -No menu Extra escolha Create Table. Veja abaixo:

Vamos preencher estes campos para a criao da tabela: Database = dbcliente Table-Name = Estado Field Name = UF Clique no boto Add Veja que direita (FIELD PROPETIES) tem vrias opes de configuraes, devemos definir, a, as propriedades do campo: (nome do database que a tabela vai ficar) (o nome da tabela) (nome do campo)

www.ramosdainformatica.com.br
Type = VarChar (o campo vai aceitar dados tipo caracteres) Length/Set = 2 (o campo UF s aceita 2 caracteres. Ex: SP) Default Value = deixar esta opo em branco (nesta opo podemos colocar algo para aparecer toda vez que criarmos um registro novo) Vamos Criar mais um campo para esta tabela, para isso faa o seguinte: Mude Field Name = Nome Clique no boto Add Type = VarChar (o campo vai aceitar dados tipo caracteres) Length/Set = 15 (o campo UF s aceita 15 caracteres. Ex: SP) Default Value = deixar esta opo em branco. Veja (nome do campo)

Clique no boto Create.

Alterando uma tabela:

www.ramosdainformatica.com.br
-No dbcliente, selecione a tabela Estado -Clique na aba Table -Clique com o boto direito em UF:

Nas prximas lies vamos ver para que serve tudo, porm agora clique em Edit Field Olha a tela que ter!

www.ramosdainformatica.com.br

Altera UF para Sigla e clique em Change. Inserindo mais um campo Clique com o boto direito em Sigla (campo da tabela estado), escolha Add Field. Veja:

www.ramosdainformatica.com.br

Preencher as propriedades de um campo no mais novidades,no ? Preencha: Name = ICMS Type = Float Length/set = 13 Demais deve ficar vazio.

www.ramosdainformatica.com.br

Clique em ADD. A pesar de ser fcil, sinceramente no gosto de criar assim, por cdigo SQL mais fcil, isso porque podemos editar em um editor de texto e rodar a.

Gravando um Script SQL


Este cdigo apaga as tabelas que criamos e criar novamente, o que quero mostrar uma maneira mais prtica de trabalhar, cdigos que podem ser editado facilmente. Clique na aba Query e digite: use dbcliente; DROP TABLE IF EXISTS tbcliente; CREATE TABLE tbcliente ( data date, hora time, codigo integer(13), nome varchar(60),

www.ramosdainformatica.com.br
email varchar(40), salario float, obs text ); DROP TABLE IF EXISTS tbvendedor; CREATE TABLE tbvendedor ( data date, hora time, codigo integer(13), nome varchar(60), email varchar(40), comissao float, obs text ); DROP TABLE IF EXISTS tbestado; CREATE TABLE tbestado ( Sigla varchar(2), Nome Varchar(15), ICMS double ); Tecle F9 para executar Clique em um Boto chamado SaveSql -Salvar Em Escolha Meus Documentos. -Nome do Arquivo Digite ScriptCliente e clique em salvar. Esta a forma mais fcil e prtica de criar tabelas, toda vez que precisar alterar, simplesmente abrimos o script, alteramos e rodamos para criar novamente, j alterado.

ndices de tabelas
Existem alguns tipos de ndice e restries que podemos aplicar em uma tabela:

www.ramosdainformatica.com.br

Not Null O Campo tem que ser preenchido.


Imagine que em uma ficha de cliente o nome est nulo, como vamos saber de quem a ficha, isso se chama BUG, campo desse tipo no pode ser nulo.

Unique Aplicamos esta restrio para campo que no deve ter outro igual
CGC, CIC, RG, so exemplos de campos nicos.

Prymary Key Cria uma chave primria em uma tabela.


A chave primria serve para que em uma tabela no tenha 2 registros iguais. No MySqlFront, clique na aba query, clique no boto Load SQL Examinar Escolha Meus Documentos d um clique duplo em ScriptCliente. Acabamos de abrir nosso script SQL, podemos modificar e recriar as tabelas. Vamos alterar para que fique assim: use dbcliente; DROP TABLE IF EXISTS tbcliente; CREATE TABLE tbcliente ( data date, hora time, codigo integer(13) not null primary key, nome varchar(60) not null, email varchar(40), salario float, obs text ); DROP TABLE IF EXISTS tbvendedor; CREATE TABLE tbvendedor ( data date, hora time, codigo integer(13) not null primary key, nome varchar(60) not null, email varchar(40), comissao float,

www.ramosdainformatica.com.br
fone varchar(15), obs text ); DROP TABLE IF EXISTS tbestado; CREATE TABLE tbestado ( Sigla varchar(2) unique, Nome Varchar(15) unique, ICMS double ); Entendendo: Na tabela cliente e vendedor vamos ver alterados: codigo integer(13) not null primary key, Este campo passa a ser a chave primria da tabela e no deve nunca ficar nulo. Na tabela Estado: Sigla varchar(2) unique, Este campo no aceita duplicar, afinal no h 2 estados com a mesma sigla. Tecle F9 Salve este ScriptSql novamente.

Inserindo valores na tabela:


Clique em dbcliente, escolha a tabela clicando, clique na aba Data, e preencha os dados, ao terminar, clique em Insert Now (cone verde, abaixo do campo data da tabela). Assim poder digitar dados e inserir, mas a idia usar este banco de dados (MySql) para receber dados de um outro programa, como Delphi, por exemplo, neste caso seria melhor inserir dados atravs de cdigos: Clique na guia Query e digite: use dbcliente; insert into tbcliente (data, hora, codigo, nome, email, salario, obs)

www.ramosdainformatica.com.br
values ('2003/01/01, '10:10:00', '1', 'Raul Seixas', 'raul@raul.com.br','2000', 'cliente especial'); Tecle F9 Clique na aba Data, tecle F5 para atualizar:

Para inserir mais registros digite: use dbcliente; insert into tbcliente (data, hora, codigo, nome, email, salario, obs) values ('2003/01/01', '10:15:00', '2', 'Renato Russo', 'rrusso@rrusso.com.br','2000', 'cliente especial'); E assim vai.

www.ramosdainformatica.com.br
Voc deve estar preocupado, calma, este tipo de insero somente para entender, no Delphi podemos inserir dados com facilidades.

Alterando valores gravados


Na aba Query digite: use dbcliente; update tbcliente set salario = '3000' where salario = '2000';

Selecionando dados em uma tabela Digite sempre na aba Query Select * from tbcliente Tecle sempre F9 para executar e F5 para atualizar Este cdigo seleciona toda a tabela. Digite este cdigo para exibir o nome e o salrio: Select Nome, (Salario) as Salrio from tbcliente; Veja

www.ramosdainformatica.com.br

Seleo sem duplicao:


Digite: Select distinct nome from tbcliente. Para esta tabela no vai fazer efeito, far em outra situao, imagine que seu cliente fez vrias compra em uma tabela de vendas, voc precisa saber apenas o nome de cada cliente que compra na sua empresa, neste caso vai fazer efeito, o cdigo exibir apenas um nome de cada um, mesmos tendo vrios na tabela.

Selecionando um perodo
use dbcliente;

www.ramosdainformatica.com.br
Select * from tbcliente where salario between 1000 and 2000; Neste caso vamos pegar todos que ganha de 1000 a 2000.

A Clausura Where
Digite: use dbcliente; Select nome, (Salario) as Salrio from tbcliente where salario = '2000' or salario = '3000'; Seleciona todos que tem o salrio de 2000 ou 3000. Um caminho mais curto: use dbcliente; Select nome, (Salario) as Salrio from tbcliente where salario in (2000,3000);

Seleo com critrio


use dbcliente; select nome from tbcliente where nome like 'Ra%'; Seleciona todos que o nome comea com Ra Outro use dbcliente; select nome from tbcliente where nome like '%a%'; Seleciona todos que tem a letra a no nome

Contar Registros:
Digite:

www.ramosdainformatica.com.br
use dbcliente; select count(nome) as Qtd from tbcliente;

Somando a coluna salrio


use dbcliente; select sum(salario) as Total from tbcliente;

Ordenando dados (crescente)


use dbcliente; select nome from tbcliente order by nome;

Ordenando dados (decrescente)


use dbcliente; select nome from tbcliente order by nome desc;

Agrupando dados
use dbcliente; select nome, sum(salario)as total from tbcliente group by nome; Neste caso, se um dos clientes tivesse mais de um registro, o programa mostraria apenas seu nome com a soma da coluna salrio.

Juno de tabelas
use dbcliente; select tbcliente.nome from tbcliente, tbvendedor where tbcliente.codigo = tbvendedor.codigo;

www.ramosdainformatica.com.br
Obs: Copie a DLL dbexpmysql.dll do system do Windows para C:\Arquivos de programas\Borland\Delphi6\Bin (para atualizar o Delphi 6)

CONECTANDO NO DELPHI:
EM UM FORM NOVO COLOQUE: -UM SQLConnection (ABA DBEXPRESS): -D UM CLIQUE DUPLO NESTE, UMA CAIXA DE CONECO APARECER. -CLIQUE NO SINAL DE + -ESCOLHA DRIVE NAME = MYSQL -DIGITE cliente PARA CONNECTION NAME, OK -EM DATABASE DIGITE dbcliente -EM HOSTNAME DIGITE localhost -EM PASSWORD DEIXE SEM NENHUM CARACTERE -EM USER_NAME DIGITE root Veja:

www.ramosdainformatica.com.br
CLIQUE OK. SELECIONE O SQLCONNECTION E CONFIGURES A PROPRIEDADE: -LIBRARYNAME = dbexpmysql.dll -LOGINPROMPT = FALSE -CONNECTED = TRUE. PRONTO, CONECTOU. Confira:

COMO DESTRIBUIR DADOS:


COLOQUE UM SQLDATASET (ABA DBEXPRESS) E ALTERE AS PROPRIEDADES:

www.ramosdainformatica.com.br
SQLCONNECTION = SQLConnection1 COMMANDTYPE = ctTable COMMANDTEXT = tbcliente COLOQUE UM DATASETPROVIDER (ABA DATAACCESS) E ALTERE A PROPRIEDADE: DATASET = SQLDataSet1 COLOQUE UM CLIENTEDATASET E ALTERE AS PROPRIEDADES: PROVIDERNAME =DataSetProvider1 ACTIVE = TRUE COLOQUE UM DATASOURCE (ABA DATAACESS) E ALTERE: DATASET = ClientDataSet1 COLOQUE UM DBNAVIGATOR (ABA DATACONTROL) E ALTERE: DATASOURCE = DataSource1 COLOQUE UM DBEDIT E ALTERE: DATASOUECE = DataSource1 DATAFIELD = NOME OBS: OS COMPONENTES SQLCONNECTION, SQLDATASET E DATASETPROVIDER SO PARA CONECO, ENTO TRABALHE COM O CLIENTEDATESET COMO SE FOSSE UM COMPONENTE TABLE, PORM USE ESTE COMANDO ABAIXO PARA GRAVAR. AQUI VOC NO PRECISA CRIAR NDICES PARA AS TABELAS, O CLIENTE DATASET POSSUI ESTE RECURSO, PARA INDEXAR USE ESTE CDIGO: CLIENTEDATASET1.INDEXFIELDNAMES := NomeDoCampo; Viu como simples

www.ramosdainformatica.com.br
procedure TForm1.BitBtn1Click(Sender: TObject); begin ClientDataSet1.ApplyUpdates(-1); end; ABRA O FONTE PARTE 1 E CONFIRA . /////////////////////////////////////////////////////// PARTE 2

UMA CONSULTA SQL NO DELPHI


EM UM FORM NOVO COLOQUE: -UM SQLConnection (ABA DBEXPRESS): -D UM CLIQUE DUPLO NESTE, UMA CAIXA DE CONECO APARECER. CLIQUE EM CLINTE (APROVEITA A MESMA CONEXO) Veja:

www.ramosdainformatica.com.br

CLIQUE OK. SELECIONE O SQLCONNECTION E CONFIGURES A PROPRIEDADE: -LIBRARYNAME = dbexpmysql.dll -LOGINPROMPT = FALSE -CONNECTED = TRUE. PRONTO, CONECTOU. Confira:

www.ramosdainformatica.com.br

COMO DESTRIBUIR DADOS: ESTA CONEXO PARECE A ANTERIOR, MAS VAI SER COM QUERY, AO INVS DE TABLE. COLOQUE UM SQLDATASET (ABA DBEXPRESS) E ALTERE AS PROPRIEDADES: SQLCONNECTION = SQLConnection1 COMMANDTYPE = ctQuery COMMANDTEXT = Clique no botozinho e digite em SQL: select * from tbcliente Veja:

www.ramosdainformatica.com.br

COLOQUE UM DATASETPROVIDER (ABA DATAACCESS) E ALTERE A PROPRIEDADE: DATASET = SQLDataSet1 COLOQUE UM CLIENTEDATASET E ALTERE AS PROPRIEDADES: PROVIDERNAME =DataSetProvider1 ACTIVE = TRUE COLOQUE UM DATASOURCE (ABA DATAACESS) E ALTERE: DATASET = ClientDataSet1 COLOQUE UM DBNAVIGATOR (ABA DATACONTROL) E ALTERE: DATASOURCE = DataSource1 COLOQUE UM DBGRID E ALTERE:

www.ramosdainformatica.com.br
DATASOUECE = DataSource1 DESTE MODO J TEMOS UMA CONEXO FEITA A PARTIR DE UMA CONSULTA SQL, FANTSTICO. COLOQUE UM BOTO, AO LADO DO DBNAVIGATOR E DIGITE: ClientDataSet1.Close; SQLDataSet1.Commandtext := 'Select Nome, Fone from tbcliente'; ClientDataSet1.open; ClientDataSet1.refresh;

Obs: Teste os comandos SQL que vimos anteriormente, repetindo estes passos: SQLDataSet1.Commandtext := Comando Sql';

www.ramosdainformatica.com.br

Abra o fonte (PARTE 2) e confira Este tipo de conexo usa camadas a mais, porm dispes de vrios recursos que o componente table (conexo com o paradox) no dispes, por exemplo, o comando POST (CLIENTEDATASET1.POST) do table funciona aqui, mas no grava no banco de dados, fica em uma rea de transferncia, para que os dados sejam armazenados temos que usar o comando applyupdates (CLIENTEDATASET1.APPLYUPDATES(-1)), outras questes so os recursos de uma query e um table funcionando juntos, aqui voc pode fazer uma consulta SQL, usar um clientedataset para distribuir os dados e em cima disso fazer filtros e consultas.

PARTE 3

COMO INSTALAR NA REDE:


O MySql foi desenvolvido especialmente para rede, funciona pelo TCP/IP, caso voc deseja conectar, ser necessrio configurar, primeiramente a sua rede. Veja: O MySql deve estar rodando no servidor. Configure a sua rede assim: Obs: Se a sua rede foi configurada por outra pessoa, dever contat-la, pois alterando as configuraes, algum programa ou recurso poder parar. IP SERVIDOR = 192.168.0.1 MSCARA = 255.255.255.0 IP CLIENTE1 = 192.168.0.2 MSCARA = 255.255.255.0 IP CLIENTE2 = 192.168.0.3 MSCARA = 255.255.255.0

www.ramosdainformatica.com.br
Em um dos clientes digite, no prompt do DOS (prompt de comando): Ping 192.168.0.1 Quando obtiver resposta, poder conectar o MySql Primeiramente o mysqlfront deve estar instalado no cliente, para fazer a conexo. Abra o mysqlfront (no cliente), clique no boto New e altere para que fique assim, veja abaixo:

Clique em Connect Usando esta tela mais do que simples, vamos ao programa. VAMOS FAZER OUTRA CONEXO:

www.ramosdainformatica.com.br
EM UM FORM NOVO COLOQUE: -UM SQLConnection (ABA DBEXPRESS): -D UM CLIQUE DUPLO NESTE, UMA CAIXA DE CONECO APARECER. -CLIQUE NO SINAL DE + -ESCOLHA DRIVE NAME = MYSQL -DIGITE rede PARA CONNECTION NAME, OK -EM DATABASE DIGITE dbcliente -EM HOSTNAME DIGITE localhost -EM PASSWORD DEIXE SEM NENHUM CARACTERE -EM USER_NAME DIGITE root Veja:

CLIQUE OK. SELECIONE O SQLCONNECTION E CONFIGURES A PROPRIEDADE: -LIBRARYNAME = dbexpmysql.dll -LOGINPROMPT = FALSE

www.ramosdainformatica.com.br
-CONNECTED = TRUE. Clique na propriedade PARAMS e observe:

As configuraes aparecem aqui, sendo assim vamos us-las para conectar em rede. Selecione o SQLConnection, clique em Events, e digite estas linhas: procedure TForm1.SQLConnection1BeforeConnect(Sender: TObject); var Ini: TInifile; begin Ini := TInifile.Create('cliente.ini'); SQLConnection1.Params[0] := 'DriverName=MYSQL'; SQLConnection1.Params[1] := 'BlobSize=-1'; SQLConnection1.Params[2] := 'Database=dbcliente'; SQLConnection1.Params[3] := 'ErrorResourceFile='; SQLConnection1.Params[4] := 'HostName=' + Ini.Readstring('Rede', 'Host', 'localhost'); //Host SQLConnection1.Params[5] := 'LocaleCode=0000'; SQLConnection1.Params[6] := 'Password=' + Ini.ReadString('Rede', 'Password', ''); //Senha

www.ramosdainformatica.com.br
SQLConnection1.Params[7] := 'User_Name=' + Ini.ReadString('Rede', 'User_Name', 'root'); //usuario Ini.Free; end; No form, v at Implementation e acrescente: uses inifiles; Veja toda a janela de cdigo: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DBXpress, DB, SqlExpr, FMTBcd, StdCtrls, Buttons, Mask, DBCtrls, ExtCtrls, DBClient, Provider; type TForm1 = class(TForm) SQLConnection1: TSQLConnection; SQLDataSet1: TSQLDataSet; DataSetProvider1: TDataSetProvider; ClientDataSet1: TClientDataSet; DataSource1: TDataSource; DBNavigator1: TDBNavigator; DBEdit1: TDBEdit; DBEdit2: TDBEdit; DBEdit3: TDBEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; procedure SQLConnection1BeforeConnect(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1;

www.ramosdainformatica.com.br
implementation uses inifiles; {$R *.dfm} procedure TForm1.SQLConnection1BeforeConnect(Sender: TObject); var Ini: TInifile; begin Ini := TInifile.Create('cliente.ini'); SQLConnection1.Params[0] := 'DriverName=MYSQL'; SQLConnection1.Params[1] := 'BlobSize=-1'; SQLConnection1.Params[2] := 'Database=dbcliente'; SQLConnection1.Params[3] := 'ErrorResourceFile='; SQLConnection1.Params[4] := 'HostName=' + Ini.Readstring('Rede', 'Host', 'localhost'); //Host SQLConnection1.Params[5] := 'LocaleCode=0000'; SQLConnection1.Params[6] := 'Password=' + Ini.ReadString('Rede', 'Password', ''); //Senha SQLConnection1.Params[7] := 'User_Name=' + Ini.ReadString('Rede', 'User_Name', 'root'); //usuario Ini.Free; end; end. COMO DESTRIBUIR DADOS: COLOQUE UM SQLDATASET (ABA DBEXPRESS) E ALTERE AS PROPRIEDADES: SQLCONNECTION = SQLConnection1 COMMANDTYPE = ctTable COMMANDTEXT = tbcliente COLOQUE UM DATASETPROVIDER (ABA DATAACCESS) E ALTERE A PROPRIEDADE: DATASET = SQLDataSet1

www.ramosdainformatica.com.br
COLOQUE UM CLIENTEDATASET E ALTERE AS PROPRIEDADES: PROVIDERNAME =DataSetProvider1 ACTIVE = TRUE COLOQUE UM DATASOURCE (ABA DATAACESS) E ALTERE: DATASET = ClientDataSet1 COLOQUE UM DBNAVIGATOR (ABA DATACONTROL) E ALTERE: DATASOURCE = DataSource1 COLOQUE UM DBEDIT E ALTERE: DATASOUECE = DataSource1 DATAFIELD = NOME Em um dos clientes, pegue um atalho e faa o seguinte: Se observarmos este cdigo: SQLConnection1BeforeConnect
procedure TForm1.SQLConnection1BeforeConnect(Sender: TObject); var Ini: TInifile; begin Ini := TInifile.Create('cliente.ini'); SQLConnection1.Params[0] := 'DriverName=MYSQL'; SQLConnection1.Params[1] := 'BlobSize=-1'; SQLConnection1.Params[2] := 'Database=dbcliente'; SQLConnection1.Params[3] := 'ErrorResourceFile='; SQLConnection1.Params[4] := 'HostName=' + Ini.Readstring('Rede', 'Host', 'localhost'); //Host SQLConnection1.Params[5] := 'LocaleCode=0000'; SQLConnection1.Params[6] := 'Password=' + Ini.ReadString('Rede', 'Password', ''); //Senha SQLConnection1.Params[7] := 'User_Name=' + Ini.ReadString('Rede', 'User_Name', 'root'); //usuario Ini.Free; end;

Podemos observer que o SqlConnection est pegando o mysql a partir do um arquivo chamado cliente.ini, tudo que temos que fazer informar neste arquivo onde o MySql est:

www.ramosdainformatica.com.br
Crie na pasta Windows ou WinNt (no cliente, conforme seu Windows) um arquivo chamado cliente.ini. Dentro deste arquivo deve conter: [Rede] Host=192.168.0.1 User_Name=root Password= muito simples no ? Este arquivo estando no cliente, o programa vai verificar o caminho em Host, podemos colocar a o IP ou o nome do micro SERVIDOR.

Continuao
Funes do DBNavigator

Figura 27 Este navegador controla entradas de dados na tabela: Navega, Adiciona, Exclui, Edita, Cancela, atualiza. Como usar cada boto:

Primeiro registro Volta 1 registro

Avana 1 registro

www.ramosdainformatica.com.br

Vai para o ltimo

Novo registro

Apagar registro Alterar registro

Gravar Cancelar alteraes Atualizar a tabela

O DBNavigator possui uma propriedade onde possamos configurar para mostrar legenda dos botes. Selecione o DBNavigator, clique na (...) da propriedade Hints e digite: Primeiro Voltar Avanar ltimo Novo Deletar Editar Gravar Cancelar Atualizar

www.ramosdainformatica.com.br
Clique na propriedade ShowHint e escolha True Ao rodar o programa, o DBNavigator exibira a legenda ao posicionar o mouse sobre o mesmo. Este componente possui 10 botes, mas nem sempre precisamos usar todos, as vezes utilizamos, mas s para usar alguns botes. Selecione o DBNavigator e verifique os botes na sua propriedade VisibleButtons. Todos esto configurados para True (verdadeiro), caso se configura algum deles para False, este no aparecer na tela, alm disso, cada boto mostra a seu cdigo para navegao. No entendeu? Pois bem. Observe que o 1 boto nbFirst. Eu poderia colocar um boto comum e escrever este cdigo: ClientDataSet1.First; Isto faria a tabela posicionar no 1 registro, toda vez que eu clicar neste boto. Vamos substituir o DBNavigator por 10 SpeedButtons (pegue-os na guia Addtional) Estes botes podero exibir legenda e figura. Selecione cada um deles e faa o seguinte: Mude a propriedade ShowHint para True Mude a propriedade Hint para: Primeiro Voltar Avanar ltimo Novo Deletar Editar Gravar Cancelar

www.ramosdainformatica.com.br
Atualizar Obs: 1 para cada . Para inserir figura, ento faa: Na propriedade Glyph, clique na (...) e escolha um glyph para cada um boto (imagem bmp). Vamos aos cdigos: Boto Primeiro Para acessa a procedure, d um clique duplo no boto e digite esta linha: procedure TFormFornecedor.btnprimeiroClick(Sender: TObject); begin ClientDataSet1.First; end;

Boto Voltar Para acessa a procedure, d um clique duplo no boto e digite: procedure TFormFornecedor.btnVoltarClick(Sender: TObject); begin ClientDataSet1.Prior; end;

Boto Avanar D um clique duplo no boto e digite: procedure TFormFornecedor.btnAvancarClick(Sender: TObject); begin

www.ramosdainformatica.com.br
ClientDataSet1.Next; end;

Boto Ultimo D um clique duplo no boto e digite: procedure TFormFornecedor.btnUltimoClick(Sender: TObject); begin ClientDataSet1.Last; end;

Boto Novo D um clique duplo no boto e digite: procedure TFormFornecedor.btnNovoClick(Sender: TObject); begin ClientDataSet1.Insert; end;

Boto Editar D um clique duplo no boto e digite: procedure TFormFornecedor.btnEditarClick(Sender: TObject); begin ClientDataSet1.Edit; end;

www.ramosdainformatica.com.br
Boto Gravar D um clique duplo no boto e digite: procedure TFormFornecedor.btnGravarClick(Sender: TObject); begin ClientDataSet1.applyupdates(-1); end;

Boto Deletar D um clique duplo no boto e digite: procedure TFormFornecedor.btndeleteClick(Sender: TObject); begin ClientDataSet1.Delete; end; Boto Cancelar D um clique duplo no boto e digite: procedure TFormFornecedor.btnCancelClick(Sender: TObject); begin ClientDataSet1.Cancel; end; Boto atualizar D um clique duplo no boto e digite: procedure TFormFornecedor.btnRefrestClick(Sender: TObject); begin

www.ramosdainformatica.com.br
ClientDataSet1.Refrest; end; Este comando para atualizar, se torna muito importante, quando se est trabalhando em rede, quando um usurio altere, insere ou deleta um registro, este comando deve ser executado para que a tabela seja atualizada para outros usurios.

Mscara de Entrada Ficaria muito trabalhosa, toda vez que formos digitar uma data, uma hora, ect. ter que digitar assim 01/01/2003 , colocando cada trao ou barra, para que isso no acontea, precisamos colocar mscara nos campos necessrios. A mscara facilita o trabalho do usurio, dando velocidade na digitao, e muitas vezes definindo entrada de dados, numricos, alfanumricos e at Data / Hora. Como fazer: D um clique duplo no ClientDataSet1, para abrir o editor de Campo. Estando com o Editor de Campo aberto, selecione o campo fone, na propriedade EditMask digite :=(99)9999-9999 Ento quando for digitar o fone, no precisara digitar a mscara, ela aparecera automaticamente. Tecle F9 e confira!

www.ramosdainformatica.com.br

Voc acabou de criar uma mscara de entrada para fone. A mscara de entrada define o tipo de caractere que o campo deve aceitar, neste caso, se quiser preencher o campo fone com texto, ele no aceitar, pois sua mscara para entrada de nmeros. Existem muitas opes de mscaras, vamos analisar a mscara que criamos: Para criar uma mscara que envolve nmeros, posso usar os caracteres 9 ou 0. O 0 (zero) requerido. O 9 no requerido. 99/99 - Estes 4 primeiros dgitos que representam dia / ms (99/99), significa que quando eu for preencher este campo, eu posso preencher por completo (ex: 01/10) ou assim (ex: 1/10). /0000 Esta parte que representa o ano, serei obrigado a preencher assim: 2000, com os quatros dgitos. Se a mscara for caractere, poderia usar as letras A ou L O L requerido (no pode deixar vazio). O A no requerido.

www.ramosdainformatica.com.br
ACESSANDO CAMPOS D um clique duplo no ClientDataSet1, para abrir o editor de campo, clique com o boto direito (no editor de campo) e escolha Add All Field (para adicionar os campos). Ao criar os campos no ClientDataSet1, definimos ali, suas caractersticas, definimos qual o tipo de dados que eles deviam aceitar, para trabalhar com estes campos, principalmente escrever algum cdigo, temos que levar em considerao estas propriedades. Sempre temos necessidade de acessar ao um campo, atravs de um cdigo que dever fazer alguma alterao necessria. Muitas vezes uma tabela usada por vrias telas, e em determinados telas, no se usa todos os campos. Este um dos motivos, outro motivo que quando precisamos fazer alteraes nos campos (colocar mscara, escrever cdigos exclusivos, editar formato, transforma tipo, alinhar, etc). Temos que entrar nesta tela, onde teremos acesso s propriedades de todos os campos. Como fazer? muito simples, d um clique duplo no componente ClientDataSet1 que o Editor de Campo (Field Editor) aparecer. Observe que selecionando um campo, poderei ter acesso s suas propriedades. Em tempo de execuo, sempre precisa-se atribuir cdigo a um campo especfico, existem vria maneiras de nos referir a um campo. Coloque um Button (guia Standard), no formulrio , altere sua propriedade Caption para Acesso, d um clique duplo no mesmo e digite: procedure TFormCadastro.SpeedButton1Click(Sender: TObject); begin ClientDataSet1.Edit; ClientDataSet1.Fields [3].AsString :='RAUL SEIXAS'; end;

www.ramosdainformatica.com.br

Aqui estamos instruindo o seguinte: Toda vez que eu clicar neste boto, o campo 3 (Nome) receber este texto ('RAUL SEIXAS'). Assim chamamos e campo pela sua posio (ndice) no Editor de Campos. O campo 3 o campo nOME, pois a tabela comea a contar a partir do 0 (zero). Obs: Usa-se AsString porque este campo caractere, podemos usar outros, veja: AsInteger = Para campo numrico. AsFloat = Para campo que envolve clculo (Float). AsDateTime = Para campo data e hora. AsCurrency = Moeda. Outro exemplo de acesso a campo Coloque um Button (guia Standard), no formulrio, altere sua propriedade Caption para Acesso1, d um clique duplo no mesmo e digite: procedure TFormCadastro.SpeedButton2Click(Sender: TObject); begin ClientDataSet1.edit; ClientDataSet1.FieldByName ('Nome').AsString := 'PROFISSIONAIS'; end; Neste exemplo n 2, chamamos o campo pelo nome, ao invs do nmero, este mtodo mais seguro, pois voc poder mudar o campo de posio, e o cdigo continuar valendo, pois chamamos o campo pelo nome e no por sua posio (ndice) no editor de campos, como no campo anterior. No exemplo anterior, se mudssemos o campo de posio, o cdigo tambm continuaria valendo, mas para o campo que ficasse na posio (ndice) 16 .

www.ramosdainformatica.com.br
Exemplo 3 de acesso a campo Coloque um Button (guia Standard), no formulrio (pgina, altere sua propriedade Caption para Acesso2, d um clique duplo no mesmo e digite: procedure TFormCadastro.SpeedButton3Click(Sender: TObject); begin ClientDataSet1.edit; ClientDataSet1.FieldByName ('Codigo').AsInteger := 20; end; Neste caso, s poderia atribuir um valor numrico, afinal o campo numrico (AsInteger), o mtodo igual a do anterior, porm muda o tipo de dado. Muito erro de cdigo acontece devido o tipo de dado que as vezes so incompatveis. Exemplo 4 de Acesso a Campo Coloque um Button (guia Standard), no formulrio, altere sua propriedade Caption para Acesso3, d um clique duplo no mesmo e digite: procedure TFormCadastro.SpeedButton4Click(Sender: TObject); begin ClientDataSet1.edit; ClientDataSet1 ['fone'] := '(21)9999-9999'; end; Este exemplo o que se usa mais, tem um cdigo menor e no necessrio que os campos sejam adicionados no editor de campo para funcionar.

Exemplo 5 de acesso a campo

www.ramosdainformatica.com.br
Assim como conectamos no form os campos cdigo, nome e fone, vamos conectar salrio tambm, para fazer esta lio. Coloque um label e altera a propriedade caption para Salrio. Coloque um DBEdit e altere: DataSource = DataSource1 DataField = salario Coloque um Button (guia Standard), no formulrio, altere sua propriedade Caption para Acesso4, d um clique duplo no mesmo e digite: procedure TFormCadastro.SpeedButton19Click(Sender: TObject); begin ClientDataSet1.Edit; ClientDataSet1salario.AsCurrency := 500; end;

Este procedimento tambm tem o cdigo pequeno, porm se os campos no estiverem adicionados no editor de campos, dar mensagens de erro. Usa-se este tipo principalmente para campo calculado (clculos em campos de tabela) Ento vimos diversas maneiras para acessar um campo de uma tabela, quando houver necessidade, deve usar o que achar melhor. muito importante saber lidar com os campos e seus tipos de dados. Todo projeto possui diversos critrios, principalmente de filtros e selees aplicados aos campos, treine bastante, porque cada projeto que montar ir exigir. Formato de Campo Se voc teclar F9 e digitar no campo Cdigo um nmero, ele aparecer como digitar, porm existe uma maneira de format-lo, para que ele possa aparece com uma quantidade de casas decimais, siga as instrues:

www.ramosdainformatica.com.br
D um clique duplo no componente ClientDataSet1 (o editor de campos aparecer) - selecione o campo Codigo - clique no Object Inspector - clique em Properties, clique na propriedade Display Format (exibir formato) e digite 000000. Estes seis zeros indicam que os nmeros digitados neste campo exibiro seis dgitos. Ex: Se eu preencher o primeiro cdigo de 1, ele exibir assim: 000001. Tambm se usa, alm do 0, outros caracteres como: # (cerca) , (vrgula) e . (ponto). Observe o que acontecer se eu formatar este campo Codigo assim: Display Format #.## #.00 00.## Valor digitado 12,241 2,5 0,0006 Resultado 12,24 2,50 00,01

Os campos podero ser formatados, atravs de suas propriedades, ou atravs de cdigo, quando o campo criado em tempo de execuo, ter que ser por cdigo, afinal no podemos acessar propriedades, a no ser por cdigos, quando o projeto est em tempo de execuo. Coloque um boto novo (guia standard), mude o caption para Nmero, d um clique duplo e digite: procedure TFormCadastro.SpeedButton5Click(Sender: TObject); begin ShowMessage (Format('%n',[ClientDataSet1salario.Value])); end; Neste caso, foi formatado o campo salrio, que era tipo nmero, para exibir no formato de nmero, se fosse moeda, teria formatado do mesmo jeito. Isso necessrio? Sim, inmeras vezes um campo moeda, no pode ser impresso no seu formato original, simplesmente porque a coluna do papel pequena, e ento o formatamos e imprimimos no formato numrico.

www.ramosdainformatica.com.br
Formato Moeda Este demonstrativo, mostra como possvel formatar um campo em moeda, para ser exibido em um ShowMessage. Para isso vamos colocar um componente Buttom (guia Standard). D um clique duplo neste boto e digite: procedure TFormCadastro.SpeedButton20Click(Sender: TObject); begin ShowMessage (Format('%m',[ClientDataSet1salario.Value])); end; Neste exemplo, mesmo se o campo no for tipo de dados moeda, aparecer no formato moeda. Portanto, dever saber que contanto que seja nmero, o programa o formatar em moeda para ser exibido.

Formatando Campo de Tabela tipo Data Data um dos mais complexos, afinal no h s um formato de data, os pases, muitas vezes usam formato diferentes, isso confunde. Para comear, conecte o campo data, assim como conectou o campo salrio. Coloque um boto, d um clique duplo e digite estes cdigos: procedure TFormCadastro.SpeedButton21Click(Sender: TObject); begin ShowMessage (FormatDateTime('dddd',(ClientDataSet1['Data']))); end;

www.ramosdainformatica.com.br

Este exemplo, transforma a data que eu digitar em dia da semana. Muitas vezes o programa solicita uma consulta por dia da semana, por ms ou ano, e aprendendo este tipo de formatao, ficar fcil resolver este tipo de problema. J vimos algo parecido, em Pascal, agora est sendo aplicado em banco de dados, que aonde o programador briga mais.

Alm desse tipo de formatao, existem outros, vocs poderia formatar de outras maneiras, se possvel faa cada uma, para aperfeioar: 1. FormatDateTime(c,(ClientDataSet1[data])) = no exibe o tempo se for 0. 2. FormatDateTime('d',(ClientDataSet1[data])) = Exibe o dia de 1 a 31. 3. FormatDateTime('dd',(ClientDataSet1[data])) = Exibe o dia de 01 a 31. 4. FormatDateTime('ddd',(ClientDataSet1[data])) = Exibe o dia abreviado. 5. FormatDateTime('dddd',(ClientDataSet1[data])) = Exibe o dia por extenso. 6. FormatDateTime(ddddd,(ClientDataSet1[data])) = Exibe o data completa. 7. FormatDateTime(ddddd,(ClientDataSet1[data]))=Exibe o data, ms e ano. por extenso. 8. FormatDateTime(m,(ClientDataSet1[data])) = Exibe o ms de 1 a12.

www.ramosdainformatica.com.br

9. FormatDateTime(mm,(ClientDataSet1[data])) = Exibe o ms de 01 a12. 10. FormatDateTime(mmm,(ClientDataSet1[data])) = Ms abreviado (Jan). 11. FormatDateTime(mmmm,(ClientDataSet1[data])) = Ms por extenso. 12. FormatDateTime(yy,(ClientDataSet1[data])) = Exibe o ano com 2 dgitos. 13. FormatDateTime(yyyy,(ClientDataSet1[data])) = Exibe o ano com 4 dgitos. 14. FormatDateTime(h,Date) = Exibe a hora de 0 a 23. 15. FormatDateTime(hh,Date) = Exibe a hora de 00 a 23. 16. FormatDateTime(n,Date) = Exibe minutos de 0 a 59. 17. FormatDateTime(nn,Date) = Exibe minutos de 00 a 59. 18. FormatDateTime(s,Date) = Exibe segundos de 0 a 59. 19. FormatDateTime(ss,Date) = Exibe segundos de 00 a 59. 20. FormatDateTime(t,Date) = Exibe o tempo. 21. FormatDateTime(tt,Date) = Exibe o tempo completo. 22. ShowMessage(FormatDateTime('tt, am/pm',Now) ) = Exibe o tempo acompanhado de am/pm. 23. ShowMessage(FormatDateTime('tt, a/p',Now) ) = Exibe o tempo acompanhado de a ou p.

www.ramosdainformatica.com.br
ALINHANDO CAMPO A tabela j possui um alinhamento padro, este alinhamento e feito de acordo com o tipo de dados de um campo. Ex: Se o campo for numrico, ele ser alinhado direita, se caractere, ser alinhado esquerda, mas isso pode ser mudado, ao acessar aos campos de uma tabela, poderemos alterar isso e colocar de acordo com as necessidades. Para fazer este exemplo, vamos colocar um novo boto e digitar estes cdigos depois de ter dado um clique duplo no mesmo. procedure TFormCadastro.SpeedButton6Click(Sender: TObject); Var I : Integer; begin for I := 0 to ClientDataSet1.FieldCount - 1 do ClientDataSet1.Fields [I].Alignment := taCenter; end; Criamos uma varivel ( I ), atribumos a ela os campo da tabela, portanto, toda vez que clicar neste boto, os campos alinham-se no centro. Este procedimento, alinhou os campos em geral, caso eu queira alinhar um campo especfico, como farei? ALINHAR CAMPO ESPECFICO Vamos ento colocar um novo boto, e digitar estes cdigos depois de um clique duplo no mesmo. procedure TFormCadastro.SpeedButton7Click(Sender: TObject); begin ClientDataSet1.Fields [0].Alignment := taCenter; end;

www.ramosdainformatica.com.br

Temos a, o campo Cdigo (field 0) sofrendo a alterao deste evento, sempre que clicarmos neste boto, dever alinhar-se no centro.

LOCALIZANDO DADOS Depois que o projeto est montado, um dos pontos principais, so a localizao de dados, necessrio que possamos localizar dados, e de preferncia com a maior facilidade possvel, para facilitar a vida do usurio. Por incrvel que parea, a grande maioria de usurio ainda tem dificuldade em trabalhar em computador. Existem vrias maneiras de localizar dados em uma tabela. Vamos trabalhar com diversos mtodos, podemos precisar us-los ao montar um projeto, principalmente em banco de dados. Apesar de existir vrios mtodos, geralmente usa-se uns mais que outro, tudo deponde do programador e da necessidade, que varia de acordo com cada situao. MOVENDO PARA REGISTROS Este mtodo posiciona no registro especfico, informado pelo programador, ou pelo usurio, quando o programador coloca a opo de escolha, um mtodo que sempre se est usando. Para executar este mtodo, coloque um boto (guia Standard) e altere seu caption para Mover+2 D um clique duplo no boto (Mover+2), para abrir a procedure e digite este cdigo: procedure TFormCadastro.Button8Click(Sender: TObject); begin ClientDataSet1.MoveBy (2); end;

www.ramosdainformatica.com.br

Ao clicar neste boto, o cdigo instrui a tabela para avanar mais 2 registros. Sendo assim, o programador define que a tabela dever avanar de 2 em 2 registros, foi o que citei antes, isso deixa o usurio meio que limitado, para facilitar a pessoa que est na frente do computador, teria que ter mais opo, para que isso seja possvel, vamos fazer diferente. Podemos usar uma varivel para termos um controle melhor, para que possamos digitar qual n de registro devemos ir, e no ter que avanar s 2, como neste exemplo. Para isso, troque o Caption do boto Mover + 2 para Mover, simplesmente. O Caption no importante para este evento, porm, a viso do usurio, por isso dever ser bem explicativo. MOVER REGISTROS (EX: 2) D um clique duplo no boto Mover, e observe que os cdigos digitados aparecero novamente, dever troc-los por estes novos: procedure TFormCadastro.Button22Click(Sender: TObject); Var ST:String; begin
ST:=Inputbox ('Mover','Digite o n de registro que deve voltar ou avanar','');

ClientDataSet1.MoveBy (StrToInt(ST)); end;

Ao clicar neste boto, aparecer a caixa de entrada, ento voc poder digitar o nmero que deve avanar ou o que deve voltar. Ex: Se eu digitar 6, ento a tabela avanar 6 registros.

www.ramosdainformatica.com.br
Se eu digitar 3, ento voltar 3 registros. Neste caso, posso ir ou voltar para qualquer registro. Mesmo assim, no satisfaz a necessidade do usurio, dificilmente saberei qual o registro n 6, alm disso, os registros podem mudar de posio quando so indexados. Veja este exemplo abaixo: Uma tabela est indexada pelo campo Cdigo. Veja como ficam os registros: Cdigo Nome 1 Regina 2 Carlos 3 Bela 4 Davi 5 Amanda Se eu indexar a tabela pelo campo Nome, veja o que acontece: Cdigo Nome 5 Amanda 2 Carlos 3 Bela 4 Davi 1 Regina Observe que as ordens dos registros foram trocadas. Regina era o 1 registro, agora o 5 registro, para que eu o encontre, a melhor maneira e escrever um cdigo que localize o cdigo do cliente ou o nome. Esta opo anterior, tambm se usa, mas para posicionar em registros que obedecem ao ndice na tabela e no um nome especfico.

MTODOS FIND

www.ramosdainformatica.com.br
Para localizar dados em uma tabela, primeiramente, terei que escolher qual campo eu quero localizar. Para isso precisarei fazer algo muito simples: indexar o campo que quero localizar. O ndice importante, pois o cdigo ir agir somente no campo indexado, caso no indexamos nenhum, o cdigo vai tentar localizar o ndice atual (padro). Os mtodos Find, muito usado, talvez at os mais usados, para comear vamos conhecer o mtodo FindKey. Este mtodo, localiza um registro, obedecendo a risca, cada caractere digitado, menos maisculas e minsculas. Ex: Suponhamos que estou localizando um nome chamado Valena, se eu digitar Valenca, ele no encontrar, este mtodo bastante exato e rigoroso. Vamos, ento, acrescentar mais um boto (guia Standard), altere seu Caption para Localizar 1. D um clique duplo neste boto e entre com estes cdigos: procedure TFormCadastro.Button9Click(Sender: TObject); Var ST : String; begin // mostra uma caixa de entrada ST := InputBox (Localizar , Entre com o nome a ser localizado , ); //indexa a tabela por nome ClientDataSet1.IndexFieldNames := Nome ; // se no localizar o nome digitado ento If not ClientDataSet1.FindKey ([ST]) then // mostre a mensagem ShowMessage (Registro no localizado);

www.ramosdainformatica.com.br
end;

Clique no boto (Localizar 1), digite na caixa de entrada um nome que est na cadastrado, a tabela ir localizar o registro, caso o registro no est cadastrado, uma mensagem ser exibida. Se isso acontecer, algo errado est acontecendo: Ou digitou nome errado, ou no tem este registro na tabela.

Localizar Dados (Ex: 2) At agora, s localizamos pelo campo nome. Para que isso fosse possvel, tivemos que indexar a tabela por este campo, porm, temos vrios campos na tabela que podemos localizar, para isso ser necessrio indexar a tabela por outro campo. Os campos que mais se localiza, geralmente, so o campo Cdigo e o campo Nome, dentre estes vrios outros tambm solicitam, mas variam muito de tela para tela de programas. Para completar, vamos colocar outro boto (guia Standard), alterar seu Caption para Localizar 2 e localizar por este.

D um clique duplo no boto Localizar 2 e digite este cdigo: procedure TFormCadastro.Button11Click(Sender: TObject); Var ST : String; begin // mostra uma caixa de entrada ST := InputBox (Localizar , Entre com o nome a ser localizado , ); //indexa a tabela por nome ClientDataSet1.IndexFieldNames := Codigo ;

www.ramosdainformatica.com.br
// se no localizar o nome digitado ento If not ClientDataSet1.FindKey ([ST]) then begin // mostre a mensagem ShowMessage (Registro no localizado); End; end;

Ao clicar neste boto, a tabela se organiza (ordem de Cdigo) e localiza o cdigo que digitar , caso no encontre, exibe mensagem. Localizar Dados (Ex: 3) Acabamos de trabalhar com o mtodo FindKey, este mtodo, localiza dados exatos, como vimos, mas existe outro mtodo Find que pode localizar dados aproximadamente, e este bastante necessrio, principalmente aqui no Brasil que existem vrios acentos e palavras bastantes parecidas, isso dificulta a localizao, para resolver este problema, utilizamos o mtodo FindNearest (localizar o prximo), que bastante eficiente, caso no se sabe como foi cadastrado, ele facilitar a procura. Para isso, no vamos usar boto, coloque: 1 Label (guia standard) e altere seu Caption para Localizar 1 Edit (guia standard) e delete sua propriedade Text D um clique duplo no Edit1 e verifique que o evento OnChange (quando muda, altera) aparecer, neste evento, digite estes cdigos: procedure TFormCadastro.Edit1Change(Sender: TObject); var ST : String; Begin ST:= Edit1.Text;

www.ramosdainformatica.com.br
// indexa a tabela por nome ClientDataSet1.IndexFieldNames := 'Nome'; // localiza aproximadamente ClientDataSet1.FindNearest ([ST]); end;

Este mtodo, chamamos de pesquisa aproximada, conforme voc vai digitando no Edit1, ele vai localizando o nome mais prximo do digitado. Neste mtodo, no h possibilidade de no localizar, sempre um registro vai ser apontado como o mais prximo ou at o exato, caso digite o nome exato. At agora localizamos dados pelo mtodo Find, existem outros mtodos que vamos estudar nos prximos exemplos. Os programadores tm suas opes, mas importante saber tudo para tornar um bom programador, e bom lembrar que sempre existe diferenas de um para outro mtodo, as vezes determinados mtodos so mais eficiente para um determinado trabalho.

Localizar Dados (Ex: 4) MTODOS GOTO Este mtodo, tambm localiza, assim como os mtodos Find, porm sua maneira de localizar diferente, ele se refere aos registros de maneira diferente, porm to eficiente quanto o outro. Para fazer este exemplo, vamos inserir um boto (guia Standard), alterar seu caption para localizar 3. D um clique duplo neste boto e digite:

www.ramosdainformatica.com.br
procedure TFormCadastro.Button13Click(Sender: TObject); Var LocName : String; Begin // cria caixa de entrada, seu valor = LocName LocName := InputBox ('Localizar', 'entre com o nome:',''); // com o clientdataset1 faa With ClientDataSet1 do begin // indexa por nome IndexFieldNames := Nome; SetKey; // localize o mais prximo que digitar FieldByName (Nome).asString := LocName; GotoNearest; End; end;

Este mtodo, localiza o nome mais prximo, assim como o mtodo FindNearest, ele poder ser programado em um edit, como j temos um coloquei em um boto, mas poder treinar, se quiser. Localizar Dados (Ex: 5) Para completar este mtodo, vamos mostrar que tambm existe possibilidade de localizar exatamente, no s o mtodo Find que o faz. Para isso vamos acrescentar mais um boto (guia Standard), alterar o Caption para Localizar 4.

www.ramosdainformatica.com.br
D um clique duplo, neste boto e digite: procedure TFormCadastro.Button23Click(Sender: TObject); Var LocName:String; begin // caixa de entrada LocName := InputBox ('Localizar', 'entre com o nome:',''); // faa com o clientdtaset1 With ClientDataSet1 do begin // indexa por nome IndexFieldNames := 'Nome'; SetKey; // localiza FieldByName (Nome).asString := LocName; // verifica os registros KeyFieldCount := 1; // se no encontrar if not GotoKey then // mostre mensagem ShowMessage ('Cidade no encontrada'); end; end; Este mtodo faz a localizao exata, caso no encontre o nome procurado, exibir a mensagem. Mtodo Locate Estes mtodos estudados, so os que precisamos saber para criar um projeto que envolve banco de dados, mas sempre existem outras maneiras de se fazer algo,

www.ramosdainformatica.com.br
por exemplo o mtodo Locate, se usa muito para localizar dados sem precisar indexar uma tabela, as vezes a tabela est vinculada a outra e no pode ser alterado seu ndice, neste caso cai bem um Locate que pode encontrar um registro sem est indexado. Localizar Dados (Ex: 6) Para que isso seja possvel, coloque um boto, com o caption Locate, d um clique duplo no mesmo e entre com este cdigos. procedure TFormCadastro.Button24Click(Sender: TObject); Var LocName:String; begin // cria uma caixa de entrada LocName := InputBox ('Localizar', 'entre com o Nome:',''); // se no localizar, exiba mensagem if not ClientDataSet1.Locate ('Nome', LocName, []) then ShowMessage ('sobrenome no encontrado'); end; um cdigo bastante pequeno, mas eficiente que pode localizar o sobrenome sem indexar o campo.

CRIANDO PGINAS No menu Edit, escolha select All (selecionar tudo), tecle Ctrl + x (recortar). Clique na Commom Control, pegue um PageControl, coloque o sobre o Form sendo: Align = alClient

www.ramosdainformatica.com.br
Clique com o boto direito sobre o PageControl, um menu instantneo aparecer, clique em New Page, Clique no meio do PageControl (para selecionar a pgina criada), e altere sua propriedade caption para Cadastro. Clique novamente com o boto direito sobre o PageControl, clique em New Page, Clique no meio do PageControl (para selecionar a pgina criada), e altere sua propriedade caption para Consulta. Acabamos de criar duas pginas, uma serve para cadastro, a outra para consultas. Vamos colar nosso projeto na pgina Cadastro. Clique na mesma e tecle Ctrl + v. SELECIONANDO UM PERODO DE DADOS Quando criamos relatrios, precisamos antes selecionar os dados que queremos imprimir, afinal se tivermos 10.000 registros em uma tabela, no iramos imprimir todos, isso se faz pedindo ao programa para selecionar um perodo, sempre por uma ordem, as vezes de nome, data nmeros, etc. Esta seleo complemente diferente de localizar, entes selecionvamos registros, mas os demais continuavam visveis, neste mtodo no, vamos exibir na tela somente os que estiver obedecendo a os critrios da seleo. Para isso, vamos usar a pgina Consulta do Page control. Estando na pgina consulta, coloque um Panel (guia Standard) sendo: Aling = alTop Caption = Coloque, abaixo do Panel, um DBGrig (guia DataControl), sendo: DataSource = DataSource1 D um clique duplo, no DBGrid (o editor de colunas aparecer), clique no cone Add All Field. No Panel, coloque 2 MaskEdit e altere suas propriedades:

www.ramosdainformatica.com.br
EditMask = 99-99-9999 Isso criar uma mscara de entrada, para evitar de precisar os traos, ao digitar. Selecione o MaskEdit2, no Object Inspector, clique na Guia Events, clique em OnKeyDown, d um clique duplo nesta parte branca para abrir a janela de cdigo no evento OnKeyDoun. Entre digite estes cdigos: procedure TFormCadastro.MaskEdit2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); Begin if Key = 13 then begin // se teclar o Enter // indexa o campo ClientDataSet1. IndexFieldNames:= data; // seleciona o perodo ClientDataSet1.SetRange ([MaskEdit1.Text], [MaskEdit2.Text]); end; end;

O nmero 4100 representa a tecla Enter (no do teclado numrico), portanto toda vez que teclar enter o programa far uma seleo da data que eu digitar. Obs: Voc poder fazer seleo de dados em qualquer campo que estiver indexado, simplesmente indica onde deve comear a seleo, e onde deve terminar. Ex: Eu poderia selecionar dados assim: ClientDataSet1.IndexFieldNames := Nome; ClientDataSet1.SetRange ([Raul], [Raul]);

www.ramosdainformatica.com.br
Neste caso, s aparecer o registro cujo nome igual a Raul, no selecionei apenas, Raul, mais todos. Outro exemplo: ClientDataSet1.IndexFieldNames := 'Codigo'; ClientDataSet1.SetRange ([20], [30]); Exibiria os registros de 20 a 30. Coloquei aqui, nmeros constantes, porm poderia nu lugar destes, por variveis para que possamos digitar onde comea e onde termina a seleo, como a seleo de Data.

Filtrando Dados Filtrar dados e selecionar perodo, parece fazer a mesma funo, mas existem uma pequena diferena, em alguns momentos os dois procedimentos encontramse e fazem a mesma funo, porm precisamos saber os dois, porque h alguns trabalhos que s filtro poder fazer. Para que isso seja possvel, precisamos adicionar um boto, alterar seu caption para filtrar, dar um clique duplo e digitar este cdigos procedure TFormCadastro.Button27Click(Sender: TObject); Var Locnome:String; Begin // cria uma caixa de entrada Locnome:= InputBox ('Localizar', 'entre com o nome:',''); //cancela a seleo anterior ClientDataSet1.CancelRange; // Cancela o filtro anterior e filtra novamente

www.ramosdainformatica.com.br
ClientDataSet1.Filtered := False; ClientDataSet1.Filter := 'nome = ''' + Locnome + ''''; ClientDataSet1.Filtered :=True; end;

Ao clicar neste boto, poder digitar o nome da cidade que deseja filtrar. Sabia que posso filtrar dados de uma seleo e posso usar mais de um filtro? Uma das vantagens deste mtodo que podemos usar critrios para filtros, por exemplo, podemos fazer um filtro por nome, cidade, salrio e outros ao mesmo tempo. No fenomenal? Porm contamos com um pequeno problema, que digitar os nome exato, para facilitar pode at pedir ao programa que pegue o nome que estiver selecionado, para que no digitamos errado, este filtro conta maisculo e minsculo.

Cancelando Filtros e Selees Se selecionarmos um perodo, ou filtrarmos nomes, este filtro e esta seleo, permanecer at que resolvemos cancel-las, para isso, coloque um boto, mude seu Caption para Cancelar, d um clique duplo e digite:

procedure TFormCadastro.Button29Click(Sender: TObject); begin ClientDataSet1.CancelRange; // cancela o filtro ClientDataSet1.Filtered := False; // cancela a seleo end;

www.ramosdainformatica.com.br
Ao clicar neste boto, cancelar a seleo e o filtro, caso tenha feito, caso no tenha feito, nada acontecer. Hoje as pessoas preferem que o computador realize as tarefas que antes se fazia manual, como contar os dias trabalhados, por exemplo. Temos, neste projeto, um campo onde podemos controlar a entrada e sada do funcionrio, ento vamos instruir ao programa que conte os dias trabalhados. Clculos em Tabela Em um banco de dados, existem vrios campos, cada um para entrada de tipo de dados diferentes, alguns deles so dados que inevitavelmente, necessitam de clculos, como Salrio, por exemplo, se o programa no possui esta opo, infelizmente teremos que fazer usando calculadora, Que Chato!, o que vo dizer do programador. Para montar um sistema de acordo, necessitamos aprender a trabalhar com campo calculado, que muito simples, tudo que precisamos, saber um pouco de matemtica e lgica de programao. Somando Coluna de Tabela Chegamos aonde estvamos precisando chegar, em soma do coluna de tabela. Depois de tanto clculo, precisamos da soma de tudo isso, para que isso seja possvel, faremos o procedimento necessrio para exibir a suma de uma coluna. Quando comearmos a trabalhar com tabela vinculada, vai ser ainda maior a necessidade de se somar as colunas necessrias, mas vamos comear agora, para chegarmos l afiados. Coloque um boto novo e faa o seguinte: Mude seu Caption para Soma, d um clique duplo e digite: procedure TFormCadastro.Button26Click(Sender: TObject); Var

www.ramosdainformatica.com.br
Total:Real; begin // zera o valor anterior Total := 0; // posiciona no incio da tabela ClientDataSet1.First; // enquanto no chegar ao fim faa a todas linhas While not ClientDataSet1.Eof do Begin // valor da varivel total Total := Total + ClientDataSet1salario.Value; // depois de somar vai para o prximo ClientDataSet1.Next; end; // mostre a soma total ShowMessage ('A soma do salrio : ' + Format ('%m',[Total])); end;

Criamos uma varivel que cujo valor 0 (zero), pedimos a tabela para posicionar no primeiro registro (Tabelafuncinario.First), criamos um loop While, instruindo que enquanto no chegasse ao fim dos registros e tabela deveria continuar executando a instruo abaixo que a seguinte: Total := Total + ClientDataSet1salario.Value; ClientDataSet1.Next; A varivel Total copia somando o valor do campo da tabela, enquanto isso a tabela avana para o prximo, a varivel novamente copia at e faz isso o fim, no final ele ter armazenado todos os valores e dar a soma total. Se voc observar, ver os campos da tabela rolando de um em um enquanto a tabela soma, para isso no acontecer podemos criar um marcador, que evita que isso acontea.

www.ramosdainformatica.com.br

D um clique duplo no boto Soma e acrescente este cdigo: procedure TFormCadastro.Button17Click(Sender: TObject); Var Marcador: TBookmark; Total:Real; begin Marcador := ClientDataSet1.GetBookmark ; ClientDataSet1.DisableControls; Total := 0; try ClientDataSet1.First; While not ClientDataSet1.Eof do begin Total := Total + ClientDataSet1salario.Value; ClientDataSet1.Next; end; finally ClientDataSet1.GotoBookmark (Marcador); ClientDataSet1.FreeBookmark (Marcador); ClientDataSet1.EnableControls; end; ShowMessage ('Soma dos salrios' + Format ('%m',[Total])); end;

Este mtodo o mesmo que voc acabou de usar, o cdigo ficou grande pelo fato de usarmos marcador.

ALTERANDO OS SALRIOS

www.ramosdainformatica.com.br
Caso haja um aumento de salrio, no vamos alterar um de cada vez, j pensou se a empresa possuir 30.00 possuir funcionrios, portanto e necessrio que se coloque uma opo de fazer alterao a partir de um valor digitado. Coloque um boto, altere o caption par Alterar salrio, d um clique duplo e digite: procedure TFormCadastro.Button18Click(Sender: TObject); Var ST:String; Valor :Real; begin // caixa de entrada ST:= InputBox ('Salrio','Digite a percentagem, para aumentar os salrios','0'); // Posiciona no incio ClientDataSet1.First; // enquanto no chegar ao fim While not ClientDataSet1.EOF do begin // posio de receber dado ClientDataSet1.Edit; // Valor da varivel Valor := ClientDataSet1salario.Value; // altera o valor ClientDataSet1salario.Value := (ClientDataSet1salario.Value * StrToFloat(ST) /100) + Valor; // vai para o prximo ClientDataSet1.Next; End; end;

Podemos digitar a percentagem, o programa verifica todos os registros e os altera.

www.ramosdainformatica.com.br

Aqui o fim do curso bsico de MySql, espero que tenha feito bom proveito, caso queira aprofundar na programao adquira o curso de Delphi.

Вам также может понравиться