Ir para conteúdo
Fórum Script Brasil
  • 0

Indice e Find com MySQL


José Luiz

Pergunta

Estou começando a utilizar o Banco MySQL com Zeos, e estou com algumas dúvidas.

Fiz um programa com uma tabela em MySQL e outra em Paradox, para comparar os comandos.

Fiz a edição dos dados através de Edits, para poder alterar simultanamente as duas tabelas, e portanto repito os comandos utilizados com as duas tabelas.

Para inserir, alterar e eliminar um registro as duas tabelas funcionam com os mesmos comandos.

O problema está quanto desejo mostrar um DBGrid com os dados indexados.

Coloquei 3 botões, para alterar o índice que está sendo utilizado no momento. No Paradox, quando altero o índice em utilização (id, nome, Endereco), o DBGrid fica na sequência do índice, mas no MySQL não.

Estou utilizando o IndexFieldNames := 'nome' ( por exemplo ) nos dois casos. Depois, o DBGrid1.Refresh e o DBGrid2.Refresh.

Caso eu utilize um campo que não está indexado, por exemplo Cidade, no Paradox dá erro, mas no MySQL não.

Para fazer uma busca, utilizo o FindKey no Paradox, mas este componente não existe no MySQL. Qual comando devo utilizar ?

Obrigado a todos.

José Luiz.

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Para fazer uma busca, utilizo o FindKey no Paradox, mas este componente não existe no MySQL. Qual comando devo utilizar ?

exemplo: criar uma tabela e definir um indice de um campo ( Primary Key )

1 CREATE TABLE teste

2 (

3 codigo VARCHAR(20) NOT NULL,

4 descricao VARCHAR(50) NOT NULL,

5 PRIMARY KEY(codigo)

6 )

Veja que a chave primária (campo “codigo”) é do tipo VARCHAR.

Vamos imaginar os dados dessa tabela

1 INSERT INTO teste VALUES ('1', 'Teste 1');

2 INSERT INTO teste VALUES ('2', 'Teste 2');

3 INSERT INTO teste VALUES ('3', 'Teste 3');

4 INSERT INTO teste VALUES ('4', 'Teste 4');

5 INSERT INTO teste VALUES ('5', 'Teste 5');

6 INSERT INTO teste VALUES ('6', 'Teste 6');

7 INSERT INTO teste VALUES ('7', 'Teste 7');

8 INSERT INTO teste VALUES ('8', 'Teste 8');

9 INSERT INTO teste VALUES ('9', 'Teste 9');

10 INSERT INTO teste VALUES ('10', 'Teste 10');

11 INSERT INTO teste VALUES ('11', 'Teste 11');

12 INSERT INTO teste VALUES ('12', 'Teste 12');

Após populada a tabela, o desafio é fazer um SELECT que retorne os registros ordenados pelo campo “codigo”. O comando SQL mais óbvio para isso é:

SELECT * FROM teste ORDER BY codigo;

Veja que a ordem retornada não é a esperada, ou seja, o registro 10, por exemplo, vem logo após o 1, quando deveria vir após o 9. Isso acontece pois o banco de dados está interpretando o campo “codigo” como VARCHAR.Uma maneira muito comum para resolver este problema é cadastrar todos os registros prefixados com vários zeros, exemplo: 00001, 00002, 00010, etc. Desta forma, o SQL acima funciona.No entanto, forçar o usuário a cadastrar suas informações utilizando um prefixo não é nada elegante quando existe outra solução muito mais simples. Veja o comando SQL que resolve este problema:

SELECT * FROM teste

ORDER BY

CONCAT(REPEAT("0", 20 - LENGTH(codigo)), codigo);

As funções CONCAT, REPEAT e LENGTH fazem um tratamento no campo código de tal forma que o banco passa a ordenar considerando um prefixo (neste caso vários zeros).

outro exemplo:

Create Table TABELA (NOME varchar(50))

Create Index iNome on TABELA(NOME)

select * from TABELA where NOME='ADRIANOC'

o comando acima está fazendo a busca dos dados em cima do índice iNome

Comparações entre Paradox e Interbase/Mysql

http://www.linhadecodigo.com.br/Artigo.aspx?id=714

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...