Cadastre-se Revistas DevMedia Cursos
 

Space de RUBENS ANTUNES
Busca Autor


Últimas 20 atualizações de RUBENS ANTUNES

Artigo - Auto Incremento: Firebird

 

 

Vamos aprender como criar um campo auto incremento no firebird, ele não possui um campo auto incremento nativo, mas através de generator e trigger podemos montar.

 

Eu criei uma tabela que nos servirá de exemplo essa tabela terá os seguintes campos

Tabela Cliente

ID

Integer

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
31/08/2010 22:57:00





Artigo - Pesquisa String ou Integer: Delphi

 

Neste artigo estarei demonstrando como se fazer pesquisa no Delphi usando o componente ClientDataSet, eu criei um banco de dados e uma tabela chamada Pessoa que nos servirá de demonstração.

 

Tabela Pessoa

IDPESSOA

INTEGER

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
31/08/2010 22:54:00





Artigo - Pesquisa Data: Delphi


 

Precisamos localizar quando um cliente foi cadastrado, para isso iremos aprender como pesquisar por campo Date.

 

Na nossa aplicação exemplo temos um banco de dados com a tabela Pessoa contendo os seguintes campos:

 

TABELA PESSOA

IDPESSOA

INTEGER

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
31/08/2010 22:53:00





Artigo - Pesquisa Dinâmica: Delphi

 

Vamos desenvolver uma pesquisa o qual não sabemos o campo que o usuário irá escolher, ou seja, ele poderá escolher o campo nome, endereço ou outro.

Temos a seguinte tabela dentro do banco de dados Pesquisa:

 

Tabela Pessoa

IDPESSOA

INTEGER

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
31/08/2010 22:51:00





Artigo - Índice: índices persistentes - Delphi


Vamos falar agora de índices persistentes, eles são criados em memória e podem ser reutilizados, e nos possibilita ordenar em ordem crescente e decrescente em tempo de execução do projeto.

            Iremos juntar tudo o que aprendemos para criarmos um método para ordenar os registros em ordem crescente e decrescente;

            A Idéia é o usuário clicar na coluna desejada e ele ordenar em ordem crescente e quando clicar novamente ele ordenar em ordem decrescente a mesma coluna. Vamos a prática.

No evento OnTitleClick do DbGrid coloque o seguinte código:

 

1     procedure TfrmPrincipal.dbgPessoaTitleClick(Column: TColumn);

2     var

3          vName:String;  

4          Opcao:TIndexOptions;

5     begin

6     if cdsPessoa.IndexName = Column.FieldName + '_ASC' then

8     begin

9          vName:= Column.FieldName + '_DESC';

10        Opcao:= [ixDescending];

11   end

12   

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
29/07/2010 18:32:00





Artigo - Índice: O que é? - Delphi


 

Mas o que é Índice? Imagine um livro sem um índice, demoraríamos muito tempo para encontrar o assunto que desejamos. O índice serve para mostrar, indicar ou revelar algo, é uma lista de elementos dentro de uma determinada ordem. No Delphi nós podemos criar Índices em ordem Crescente e Decrescente, nos possibilitando encontrar mais facilmente os registros em nossos componentes de visualização de dados como o  DbGrid.

 Existe dois tipos de índices, o temporário e o persistente. O índice temporário é feito em memória assim como o persistente, a diferença que o temporário eu não posso reutilizá-lo já o persistente eu posso reutilizá-lo, ele nos permite ordenar em ordem crescente e decrescente.

Nesse artigo iremos conhecer como trabalhar com índice utilizando as propriedades IndexDefs e IndexFieldNames do ClientDataSet.

 

Crie um Banco de dados e uma tabela com os seguintes campos e preencha:

 

Nome

Tipo

Chave

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
29/07/2010 18:30:00





Artigo - Índice: Criando Índices em run-time - Delphi

 

            A partir de agora iremos criar índice em tempo de projeto, iremos definir o índice em run-time, ou seja, em tempo de execução do projeto.

 

Selecione o Formulário e no evento OnCreate  coloque o seguinte código:

 

 procedure TfrmPrincipal.FormCreate(Sender: TObject);

begin

  cdsPessoa.Open;

  cdsPessoa.IndexFieldNames:='nome';

end;

 

A propriedade IndexFiledNames recebe uma string, aqui estamos passando o nome do campo que queremos ordenar, podemos também ordenar por qualquer outro campo da sua tabela, basta separá-los por ponto e vírgua (;).

Após o campo Nome, coloque o campo salario e execute a aplicação e perceba como ficou a ordenação dos campos.

 

procedure TfrmPrincipal.FormCreate(Sender: TObject);

begin

            cdsPessoa.Open;

cdsPessoa.IndexFieldNames:='Nome; Salario';

end;

 

A propriedade IndexFiledNames toma como primeira referência para montar o índice o campo nome e depois o campo salario.

Mas e se quiséssemos clicar em determinada coluna do DbGrid e ele ordenar por ela. Para isso iremos utilizar o evento OnTitleClick do DbGrid, coloque o seguinte código nesse evento:

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
29/07/2010 18:27:00





Artigo - Índice: Pesquisa em Memória - Delphi



A utilização de índice nos permite pesquisarmos um registro em memória sem precisarmos ir ao banco de dados dando um select, podemos utilizar alguns métodos do ClientDataSet como o FindKey e FindNearest.

 

FindKey: Ele faz uma busca precisa em memória trazendo o registro que contenha a expressão utilizada pelo usuário, ou seja, se você deseja buscar por nome, você terá que digitar exatamente como está descrito no ClientDataSet, ou seja, se você quer o João Carlos, terá que digitar João Carlos, não basta digitar só João.

 

Coloque em nosso formulário um Edit e mude a propriedade name para edtLocaliar e no evento OnKeyUP do mesmo coloque o seguinte código:

 

procedure TfrmPrincipal.edtLocalizarKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

  cdsPessoa.IndexFieldNames:='id';

  cdsPessoa.FindKey([edtLocalizar.Text]);

end;

 

Para utilizarmos o método FindKey temos que ter um índice definido, aqui criamos um índice com o campo id e pedimos para o método FindKey localizar nesse índice o registro o qual passamos a instrução no Edit para localizá-lo.

 

FindNearest: Esse método posicionará o cursor no nome mais próximo ao digitado pelo o usuário ou exatamente como o usuário digitou, um fato importante é que ele assim como o FindKey,  posiciona o cursor no registro, eles não nos retorna uma lista aproximada.

 

procedure TfrmPrincipal.edtLocalizarKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

  cdsPessoa.IndexFieldNames:='nome';

  cdsPessoa.FindNearest([edtLocalizar.Text]);

end;

 

Assim como o método FindKey o método FindNearest precisa também de índice para poder varrer esse índice a diferença que ele procura o registro que está mais próximo do que foi digitado no Edit.

 

Nota                                                                                               &nb

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
29/07/2010 18:25:00





Artigo - Índice: Criando uma Unit - Delphi


Será que toda vez que precisarmos ordenar um ClientDataSet, teremos que colocar esse código todo no evento OnTitleClick, claro que não, para isso podemos utilizar uma Unit para guardar o nosso código e ser utilizado em qualquer parte do nosso projeto. Vamos a prática, Crie uma Unit clicando em File/New/Unit Delphi, a unit é muito comum em Orientação a objeto. Ela nos permite criar classes é métodos entre outras funcionalidades. Salve-a como Uordenar e Coloque o seguinte código:

 

 

1 unit Uordenar;

 

2 interface

3  Uses DBClient, DBGrids, Graphics, DB;

 

4 type

5    TOrdenar = Class

6    public

7     class procedure orderna(var cds : TClientDataSet;var dbg : TDBGrid;column : TColumn);

8    end;

9 implementation

 

Tecle Ctrl+Shift+C para implementarmos a classe, podemos perceber que o Delphi  criou essa classe logo mais abaixo, coloque o seguinte código:

 

{ TOrdenar }

10 class procedure TOrdenar.orderna(var cds: TClientDataSet; var dbg: TDBGrid;

11  column: TColumn);

12 var

13  vName:String;

14 Opcao:TIndexOptions;

15 begin

16  if cds.IndexName = Column.FieldName + '_ASC' then

17  begin

18    vName:= Column.FieldName + '_DESC';

19    Opcao:= [ixDescending];

20  end

21  else

22  begin

23    vName:= Column.FieldName + '_ASC';

24    Opcao:= [];

25  end;

26  if cds.IndexDefs.IndexOf(vName) < 0 then

27  begin

28    cds.AddIndex(vName,Column.FieldName, Opcao);

29    cds.IndexName:=vName;

30    cds.First;

31  end;

end;

 

Nota

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
29/07/2010 18:24:00





Artigo - Subquery

Introdução ao Sql

Subqueries

 

            Neste artigo irei demonstrar como utilizar uma busca dentro de outra busca. Esse é um recurso avançado e extremamente útil do comando SELECT. Na prática, será colocado um SELECT dentro de outro. Isso quer dizer que serão colocados vários SELECTs internos. Subqueries faz parte do padrão SQL-86, logo todos os bancos de dados relacionados que utilizam SQL devem permitir essa utilização.

 

Vamos criar algumas tabelas que nos servirá de exemplo:

 

Tabela Gravadora

Codigo_Gravadora

Integer

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
30/06/2010 22:28:00





Artigo - Subquery de múltiplas linhas

Introdução ao Sql

Subquery de múltiplas linhas

 

            Neste artigo, demonstrarei como trabalhar com subquery de múltiplas linhas. Neste caso, o SELECT interno retorna mais de uma linha. Não se pode utilizar operadores simples como igualdade, diferença, maior ou menor. Deve-se utilizar um operador de grupo para realizar a comparação. Esses operadores são ANY, ALL e IN.

 

IN

            Imagine que gostaríamos de saber quais CDs têm o preço igual ao menor preço de cada gravadora. Inicialmente devemos saber qual o menor preço de cada gravadora. Isso pode ser feito com o comando:

 

Select min(preço_venda) from CD

Group by Codigo_gravadora

 

Para saber quais são os CDs com esses preço, poderíamos escrever o seguinte comando:

 

Select código_cd, nome_cd, preço_venda from cd

Where preco_venda in (15,9,10.5)

 

Para fazer isso tudo em um único comando, escrevemos o comando da seguinte forma:

 

select codigo_cd, nome_cd, preco_venda from cd

where preco_venda in (select min(preco_venda) from cd

group by codigo_gravadora)

 

Código_CD

Nome_CD

Preço_Venda

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
30/06/2010 22:27:00





Artigo - Subquery de múltiplas colunas

Introdução ao Sql

Subquery de múltiplas colunas

 

 

            Alguns bancos de dados permitem realizar a busca em múltiplas colunas utilizando uma subquery.

            A primeira técnica consiste em colocar as colunas unidas na cláusula WHERE do SELECT externo e realizar a busca no SELECT interno dessas colunas unidas da mesma forma. Essa técnica tende a ser muito lenta, mas pode ser feita em qualquer banco de dados.

            Temos vários CDs indicados no cadastro e queremos conhecer os dados do CD dentre os menores CDs indicados de cada gravadora. Para isso, temos que saber o menor CD indicado de cada gravadora. Observe que tivemos que unir as duas colunas com || .

 

select codigo_gravadora || min(cd_indicado) from cd

group by codigo_gravadora

 

Agora devemos realizar a busca dos dados dos CDs que atendem a essa característica:

 

select codigo_cd, nome_cd, codigo_gravadora, cd_indicado from cd

where codigo_gravadora || cd_indicado in (15,21,31)

 

Note como a combinação das colunas CODIGO_GRAVADORA e CD_INDICADO é a mesma do comando SELECT anterior. Agora veremos tudo num único comando:

 

select codigo_cd, nome_cd, codigo_gravadora, cd_indicado from cd

where codigo_gravadora || cd_indicado in

(select codigo_gravadora || min(cd_indicado) from cd

group by codigo_gravadora)

 

 

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
30/06/2010 22:27:00





Artigo - Introdução SQL Pesquisa avançada

Introdução SQL

Pesquisa avançada

 

            Já vimos muitas formas de pesquisa em tabelas. Agora vamos analisar algumas formas que permitem trabalhar com vários comandos SELECT. Serão criados conjuntos que poderão ser unidos e separados da mesma forma como trabalhamos com os conjuntos na matemática.

 

UNION

            A união entre tabelas cria uma saída com todas as linhas de uma tabela unida com as linhas da outra tabela. Diferentemente da união regular entre tabelas, aqui as linhas não são combinadas às linhas da outra tabela. As linhas da segunda tabela são colocadas em seqüência às linhas da primeira tabela.

            É necessário que haja uma compatibilidade entre as colunas. Na prática, isso quer dizer que as colunas devem ser do mesmo tipo e estar na mesma seqüência para que se possa unir as duas tabelas. Mesmo que o conteúdo das tabelas não seja coerente, a união entre as tabelas autores e músicas é possível porque as colunas têm o mesmo tipo de dado e tamanho.

            É importante que as colunas estejam na mesma seqüência, com o mesmo tipo de dados nos dois SELECTs, do contrário o comando não funcionará. Veja que não é necessário que as colunas tenham o mesmo nome, uma vez que apenas o tipo de dado e o tamanho são comparados e, normalmente, quando é feita essa união, trabalha-se com tabelas diferentes. Veja o exemplo:

 

select codigo_autor, nome_autor from autor

where codigo_autor < 10

union

select codigo_musica, nome_musica from musica

where codigo_musica < 15

 

Código_autor

Nome_Autor

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
30/06/2010 22:26:00





Artigo - Introdução ao SQL - Case

Introdução ao SQL

Case

 

Expressões CASE

 

            O padrão SQL prevê a possibilidade de utilizar a expressão CASE, presente em diversas linguagens de programação. Utilizando essa cláusula é possível criar complexas estruturas de controle tanto nas diversas linguagens de programação como nos comandos SQL. Ao ser utilizada a cláusula CASE em comandos SQL é possível economizar diversas linhas de código, pois não é necessário criar blocos de programação para testar condições.

            A expressão CASE será testada em tempo de execução do comando SELECT ou UPDATE. Como o CASE faz parte de outro comando, será possível colocá-lo em qualquer situação em que um valor deva ser testado.

            Veja que em linguagens de programação usuais a expressão CASE, que é autônoma, não tem a mesma forma de avaliação e executará um bloco de instruções. Dessa forma, um único comando testará diversas linhas retornando, em cada linha, o comando correspondente à linha analisada.

 

SELECT

            É possível utilizar o comando SELECT prevendo diversas condições para extração dos dados. A sintaxe é a seguinte:

 

SELECT colunas,

            CASE

            WHEN condição THEN ação

            ...

            [ELSE condição padrão]

            END

            FROM tabela;

 

            Como exemplo, podemos imaginar uma situação em que desejamos dar um desconto sobre o preço de venda CDs em função do preço. Quanto maior o preço de venda, maior o desconto. Veja:

 

select nome_cd, preco_venda,

    case

    when preco_venda < 10 then

        preco_venda * 0.9

    when preco_venda >=10 and preco_venda < 13 then

        preco_venda * .8

    else

        preco_venda * .7

    end venda

    from cd

 

Nome_CD

Preço_Venda

Venda

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
30/06/2010 22:25:00





Artigo - Introdução ao SQL - Agrupamento de Resultados


Uma característica muito importante do SQL é o poder de agrupar linhas com base em valores de determinadas colunas. Dessa forma, não estaremos trabalhando na pesquisa em todas as linhas da tabela, como fizemos anteriormente, mas sim em grupos menores. Para isso, utilizamos as funções de grupo já mostradas, com a cláusula GRUPO BY no comando SELECT. A cláusula GRUPO BY  deve vir antes da cláusula ORDER BY  e depois do WHERE (se houver necessidade de utilizá-los).

            Como exemplo, podemos querer saber quantos pedidos foram vendidos, para isso iremos fazer a busca na tabela pedido e agrupar por CODVENDA:

 

SELECT CODVENDA, COUNT(*) FROM PEDIDO

GRUPO BY CODVENDA;

 

            Para sabermos quanto um determinado cliente nos comprou, precisamos agrupar por CODCLIENTE,  veja como fica essa instrução:

 

SELECT CODCLIENTE, SUM(TOTALPEDIDO) FROM PEDIDO

GROUP BY CODCLIENTE;

 

 

Podemos realizar mais de uma função de grupo dentro de um mesmo SELECT. Aqui, além da média do preço de venda, temos a quantidade de registros da tabela PEDIDO.

 

SELECT CODVENDA, AVG(PRECOVENDA), COUNT(*) FROM PEDIDO

GROUP BY CODVENDA;

 

 

Agrupamento com mais de uma tabela

 

            Podemos unir mais de uma tabela seguindo as mesmas regras vistas anteriormente, veja o exemplo a seguir:

 

SELECT PEDIDO.CODVENDA, PEDIDO.CODCLIENTE, CLIENTE.NOME, SUM(TOTALPEDIDO) FROM PEDIDO, CLIENTE

WHERE PEDIDO.CODCLIENTE = CLIENTE.CODCLIENTE

GROUP BY PEDIDO.CODVENDA, PEDIDO.CODCLIENTE, CLIENTE.NOME;

 

Obs.: Devemos colocar todas as colunas que fazem parte do comando SELECT na cláusula GROUP BY, exceto, naturalmente, a função de grupo. Adote isso como regra para evitar problemas com o comando. Não é obrigatóri

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
28/05/2010 09:48:00





Artigo - Introdução ao SQL - Funções de Agregação


Funções de grupo operam conjuntos de linhas visando a fornecer um resultado para o grupo. Até agora trabalhamos apenas com funções que tratavam apenas uma linha de cada vez. A diferença básica é que serão utilizados grupos de linhas. Esses grupos podem ser constituídos desde toda a tabela até subgrupos da tabela.

 

Funções de grupo

            Existem diversas funções de grupo que são implementadas pelo padrão SQL. Essas funções auxiliam a computar uma variedade de medidas baseadas em valores das colunas do banco de dados. As principais funções de grupo são:

 

Função

Ação

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
28/05/2010 09:47:00





Artigo - Introdução ao SQL - Pesquisa em Multiplas Tabelas


Até agora vimos como realizar pesquisas em uma única tabela. Contudo, na montagem do nosso modelo de dados sempre temos diversas tabelas. Logo é necessário sabermos como vincular a informação dessas tabelas de forma a mostrar a informação de maneira correta. A isto é dado o nome de união de tabelas (join).

            Como visto anteriormente, a união entre as entidades do nosso modelo lógico se dá por meio de chaves primárias e estrangeiras. Essas chaves são, na representação física do modelo, as colunas que as tabelas têm em comum. No decorrer apresentarei as diversas formas de unir colunas e como implementá-las em SQL.

 

União de tabelas

            Para realizar a união de tabelas, basta acrescentarmos após a cláusula FROM do comando SELECT as tabelas que queremos unir. Devemos colocar na cláusula WHERE  a condição de união das tabelas, ou seja, as respectivas chaves primária e estrangeira. Sintaxe:

 

SELECT

Tabela1.coluna1,

Tabela1.coluna2,

Tabela2.coluna1,

Tabela2.coluna2

FROM Tabela1, Tabela2

WHERE Tabela1.chave_primaria = Tabela2.chave_estrangeira

 

            Note que é opcional colocar a identificação da tabela antes do nome das colunas na lista de campo do comando SELECT. Contudo, essa é uma prática recomendada para facilitar o entendimento do comando.

            Essa regra só não é válida quando estivermos querendo mostrar uma coluna que tenha o mesmo nome em amb

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
28/05/2010 09:46:00





Artigo - Introdução ao SQL - Data e Hora


Quando criamos colunas com tipo de dado Data, podemos realizar uma série de cálculos e operações cronológicas. Podemos calcular o número de dias entre duas datas, somar e subtrair dias, meses e etc.

            O padrão SQL especifica quatro tipos de dados relacionados a data e hora:

 

Tipo

Descrição

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
28/05/2010 09:43:00





Artigo - Introdução ao SQL - Cálculos


            Podemos fazer cálculos quando realizamos buscas no banco de dados, simplesmente aplicando um dos operadores aritméticos a colunas. Dessa forma, mesmo não tendo armazenado o valor total (preço unitário multiplicado pela quantidade) em um item de pedido, é possível realizar este cálculo. Como exemplo, será verificado o preço de um determinado produto e aumentará em 5%. Veja abaixo como fica essa instrução SQL.

 

SELECT CODIGO, NONME, PRECO, PRECO * 1.05 FROM TABELA;

 

CODIGO

NOME

PRECO

PRECO * 1.05

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
28/05/2010 09:42:00





Artigo - Introdução ao Sql Parte XIII - Operadores Especiais Parte 2

Introdução ao Sql  Parte XIII

Operadores Especiais Parte 2

(LIKE e IN)

 

 

LIKE

            Com este operador, podemos comparar cadeias de caracteres utilizando padrões de comparação (wildcard) para umou mais caracteres. Normalmente, o caracter percentual (%) substitui zero, um ou mais caracteres e sublinha (_) substitui um caractere.

            Utilizando a combinação desses caracteres especiais com o que se quer localizar, pode-se conseguir uma variedade muito grande de expressões. Veja na tabela a seguir algumas possíveis combinações:

 

Expressão

Explicação

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
15/05/2010 11:14:00





 

Programador Delphi desde de 2004 e Autor do Livro Delphi - Faça Uma Aplicação Comercial
Arquivo de atualizações
 2010
 2009

Estatísticas do Autor:
Número de posts: 42
Características dos posts deste autor:
Conteúdo:
Utilidade:
11 1
 
DevMedia Group - Tel: (21) 3382-5038 - www.devmedia.com.br
Todos os Direitos Reservados a DevMedia Group