Consulta diferenciada...

Delphi

03/11/2004

Estou usando em um edit do meu formulário a seguite consulta:

Query.Close;
Query.SQL.Clear;
Query.SQL.Add(´Select * from Mercadorias WHERE CodBarras LIKE´ + ´´´´+´¬´+ Edit1.Text +´¬´+´´´´);
Query.Open;

E assim toda vez que digito o código de barras de uma mercadoria ele busca para mim. Até aí tudo OK. O grande problema acontece quando o código de barras é gerado por uma balança. Nesse tipo de código de barras só me interessam os seguintes dígitos: 2º, 3º, 4º, 5º, 6º e 7º. O primeiro dígito e os demais não tem importância para mim, pois não ajudam na localização.
Então o que desejo é condicionar o edit, para que toda vez que o código de barras começar por 7, usar todos os dígitos para realizar a consulta e, se começar por 2, utilizar somente do 2º ao 7º dígito para realizar a consulta.

Se alguém puder dar-me uma mãozinha com este problema, conte com os meus sinceros agradecimentos.


Pro-luck

Pro-luck

Curtidas 0

Respostas

Motta

Motta

03/11/2004

[quote:de35816e8a=´Pro-Luck´]Estou usando em um edit do meu formulário a seguite consulta:

Query.Close;
Query.SQL.Clear;
Query.SQL.Add(´Select * from Mercadorias WHERE CodBarras LIKE´ + ´´´´+´¬´+ Edit1.Text +´¬´+´´´´);
Query.Open;

E assim toda vez que digito o código de barras de uma mercadoria ele busca para mim. Até aí tudo OK. O grande problema acontece quando o código de barras é gerado por uma balança. Nesse tipo de código de barras só me interessam os seguintes dígitos: 2º, 3º, 4º, 5º, 6º e 7º. O primeiro dígito e os demais não tem importância para mim, pois não ajudam na localização.
Então o que desejo é condicionar o edit, para que toda vez que o código de barras começar por 7, usar todos os dígitos para realizar a consulta e, se começar por 2, utilizar somente do 2º ao 7º dígito para realizar a consulta.

Se alguém puder dar-me uma mãozinha com este problema, conte com os meus sinceros agradecimentos.[/quote:de35816e8a]


Nunca trabalhei com cod. barras, mas fazer pesquisa com like é ruim pois se perdem os indices e este é tipo da pesquisa que tem ser rápida , senão a fila do caixa creeeeesce , melhor criar um 1º digito fajuto e pesquisar sempre pelo indice.


GOSTEI 0
Pro-luck

Pro-luck

03/11/2004

Como devo fazer isso???

Brigadão pela força...


GOSTEI 0
Motta

Motta

03/11/2004

Não sei como isto de cod. barras funciona só disse que uma pesquisa do tipo

select *
from tabela
where coluna like ´¬12345¬´

gera um ´full table scan´

mesmo que coluna tenha indice, isto pode gerar uma demora e um gargalo no sistema, principalmente que é uma pesquisa feita trocentas vezes ao dia.

pq vc ignora o 1º dígito nas etiquetas geradas , pq não gera um 0 ou 1 ?!

e pesquisa com este número ?


GOSTEI 0
Pro-luck

Pro-luck

03/11/2004

Aí galera...


Um dos colaboradores do Fórum deu-me uma luz no que eu procurava e passou-me o seguinte código:

Query.Close;
Query.SQL.Clear;
Query.SQL.Add(´Select * from Mercadorias WHERE CodBarras = :codigo´);
if Edit1.Text[1]=´2´ then
Query1.ParamByName(´codigo´).AsString:= Copy(Edit1.Text, 2, 6)
else Query1.ParamByName(´codigo´).AsString:= Edit1.Text;
Query.Open;


E atendeu exatamente da forma como eu pensava...

Brigadão Vini...


GOSTEI 0
Pro-luck

Pro-luck

03/11/2004

SOBE


GOSTEI 0
POSTAR