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

Pesquisar Findkey


Pirambu!

Pergunta

5 respostass a esta questão

Posts Recomendados

  • 0

na tabela PARADOX estar assim:

codigo1 / + / *

codped / I / *

Quantidade / N

o campo grifado é o que eu quero controlar, assim, eu tenho um pedido com vários itens, então na tabela fica assim

codigo1 - codped - quantidade

1 - 15 - 120

2 - 15 - 135

3 - 15 - 34

mais quando eu for lançar outro pedido, deve verificar se o pedido que estar sendo informado já estar na tabela.

Link para o comentário
Compartilhar em outros sites

  • 0
na tabela PARADOX estar assim:

codigo1 / + / *

codped / I / *

Quantidade / N

o campo grifado é o que eu quero controlar, assim, eu tenho um pedido com vários itens, então na tabela fica assim

codigo1 - codped - quantidade

1 - 15 - 120

2 - 15 - 135

3 - 15 - 34

mais quando eu for lançar outro pedido, deve verificar se o pedido que estar sendo informado já estar na tabela.

Pirambu!, nestes casos, a melhor opção seria você ter seu índice com esta sequência: CodPed, Codigo1; pois facilita muitos processos, principalmente se você liga a tabela de itens à de pedidos, via MasterSource - aonde você lança o pedido, e a partir dele, lança os itens. Não teria como você estar lançando um item para um pedido que não existe.

De qualquer modo, partindo da estrutura que você mostrou aqui, na minha opnião, você teria que utilizar uma query para veficar a existencia do pedido. Porque via FindKey, você terá que utilizar os campos existentes na chave, tipo: FindKey(VarArrayOf([Codigo1, CodPed])), ou seja, você tem que informar um código do item, que eventualmente pode nem existir (por ter sido excluído) - o que não garante uma resposta correta.

Com a chave no formato "correto", você poderia utilizar FindKey apenas no primeiro campo CodPed: FindKey(CodPed); que, se não estou enganado, já funcionaria.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Micheus, eu até pensei em usar o FindKey, mais pensava que só funcionava se a tabela tiver-se apenas uma chave primaria ( * ), conseguir usar uma query onde faço a consulta do codped assim

With query1 do
begin 
close;
sql.clear;
sql.add('select codped');
sql.add('from tabela1');
sql.add('where codped = :ID');
params.parambyname('ID').values := StrToInt(Dbedit1.text);
open;

if query1.IsEmpty then
...

mais deve ter uma maneira mais simples.

Link para o comentário
Compartilhar em outros sites

  • 0

Pirambu!, como mensionei antes, funcionaria bem com o FindKey caso você tivesse a ordem dos campos alterada no seu índice primário. Mas há outras opções sim, você pode:

- criar um índice secundário, onde o primeiro campo do índice seja seu CodPed e seleciná-lo ele via propriedade IndexFieldNames ou IndexName;

- o mais fácil para a situação atual, seria utilizar a função Locate deste modo: Locate('CodPed', StrToInt(Dbedit1.text), []); - assim você faz uma busca pelo campo exato.

Não utilizando a query, o ideal seria mesmo utilizar índices.

Quanto a "uma maneira mais simples", acredito que você pudesse manter um componente TQuery exclusivo para esta função. Então, você adiciona o SQL na respectiva propriedade do componente e no seu código teria apenas:

With Query1 do
begin
  Close;
  Params.ParamByName('ID').Values := StrToInt(Dbedit1.text);
  Open;
end;
if query1.IsEmpty then

nâo é nada complicado e é a melhor forma de verificar a existência de dados no banco (utilizar Query)

Abraços

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,3k
×
×
  • Criar Novo...