Duvidas sobre consulta.

Delphi

10/06/2013

Boa tarde pessoal. Estou com perguntas. Por favor, alguem pode me ajudar ?
1- Estou fazendo um pequeno programa de loteria em Delphi 7 e quero colocar "Atualizações Automaticas", ao clickar de 1 botão, dos resultados, pois, digitar manualmente é muita coisa. Não tenho idéia de como se faz.
2- Supondo que meus resultados de lotofacil já estejam atualizados, preciso que, por exemplo:
Quando eu digitar o numero 1, ele me mostra no DBGRID todos os concursos que saiu o numero 1.
Se eu digitar tambem o numero 5, ele me mostra todos os concursos que sairam o numero 1 e o numero 5, e assim por diante, até eu digitar os 15 numeros.
Tentei fazer no SQL, mas, os concursos são sorteados aleatoriamente. Criei no Interbase 15 campos strings iguais, fora os outros(nro. do concurso, data...) para armazenar os numeros. (manualmente por enquanto)
Não consigo fazer ele comparar o numero que digito com os 15 numeros do sorteio.
Por favor, me ajudem. Desde já, obrigado.
Anderson

Anderson

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

10/06/2013

1 - O que seriam as atualizações automáticas?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

10/06/2013

2 - Isso é uma consulta "simples", só que trabalhosa.
Algo do tipo: SELECT * FROM CONCURSOS WHERE NUMERO_1 = :numero OR NUMERO_2 = :numero OR NUMERO_3 = :numero
e por aí vai, para os 15 números.
GOSTEI 0
Guilherme Wiethaus

Guilherme Wiethaus

10/06/2013

Simples:

Se você for digitar em um Edit de pesquisa. Pode ser em 2 casos, colocando seu script de Sql quando pressionando um botão de pesquisa (Evento OnClick) ou ao digitar no edit (evento onChange).

sql:= 'SELECT NrConcurso, Numero FROM Concursos WHERE Numero = ' + Edit1.Text;

Como processar o Sql, subentende que saiba fazer isto.
GOSTEI 0
Anderson

Anderson

10/06/2013

1 - O que seriam as atualizações automáticas?


Em primeiro, obrigado pela atenção.
Atualizações automáticas é "clikar em 1 botão" e baixar os resultados direto do site da Caixa Economica Federal.
Digitar todos os concursos manualmente é "bravo" porque são mais de 1500 concursos até agora. (cada concurso são 6 numeros)
Agora você imagina Lotomania que são 20 numeros.

GOSTEI 0
Anderson

Anderson

10/06/2013

2 - Isso é uma consulta "simples", só que trabalhosa.
Algo do tipo: SELECT * FROM CONCURSOS WHERE NUMERO_1 = :numero OR NUMERO_2 = :numero OR NUMERO_3 = :numero
e por aí vai, para os 15 números.



Eu segui essa linha de raciocinio, mas não deu certo. Entretanto, se você está dizendo, é porque eu estava no caminho certo.
Devo ter me enganado em alguma parte.
Vou tentar outra vez com mais atenção. Mais adiante, posto o resultado. Obrigado mais uma vez. Um abraço.
GOSTEI 0
Anderson

Anderson

10/06/2013

Simples:

Se você for digitar em um Edit de pesquisa. Pode ser em 2 casos, colocando seu script de Sql quando pressionando um botão de pesquisa (Evento OnClick) ou ao digitar no edit (evento onChange).

sql:= 'SELECT NrConcurso, Numero FROM Concursos WHERE Numero = ' + Edit1.Text;

Como processar o Sql, subentende que saiba fazer isto.


Oi Guilherme. Obrigado pela atenção.
No caso tenho 15 campos NUN_Lotofacil iguais. Pra comparar, criei 15 campos "Edit.text" + 1 "Bottom". Lembre-se que a medida que vou digitando 1 numero em cada "Edit.text" (no caso, de 1 a 25)e cliko o "Bottom", ele vai buscando os concursos que possuem tais numeros. Por favor, me perdoem se não consegui expressar direito minha duvida. Valeu a atenção. Um abraço. Fico no aguardo com mais idéias.
GOSTEI 0
Guilherme Wiethaus

Guilherme Wiethaus

10/06/2013

Existe uma maneira mais rápida e requer menos processamento, mas teria que alterar seus campos.

Primeiro você pode guardar seus números em um campo único:

Concursos.Numeros => '01 02 14 18 27 28 30'

Note separados por espaço...nao tem problema

Você pode fazer rotinas Function ou Stored para fazer parser também quando houver necessidade para pegar um único número.

FN_GetNumberLoto(NUM, 3) --> '14'

É um exemplo. Outra maneira é pegar o NUM e fazer um parser para os campos de edit's ou StringGrid, na aplicação e não no banco como o exemplo acima.

value_result:= GetNumberLoto(value_Num, 3); //Precisará fazer esta função, nada difícil :-)

Na hora de juntar tudo, quando pressionar um botão OK, por exemplo para o edit:

value_Num:= Trim(Edit1.Text) + ' ' + Trim(Edit2.Text) + ' ' + ...

Edit pode acabar digitando um numero unico, entao faca uma funcao que coloca zeros a frente:

value_NumberLoto:= PadLeft(Trim(Edit1.Text), 2) + ' ' + PadLeft(Trim(Edit2.Text)) + ' ' + ...

Facilmente encontrado pela web e também nada difícil de se fazer, meia dúzia de linhas apenas pra fazer este PadLeft();

Assim no banco você precisaria apenas de um campo para armazenar tantos números quanto necessário.

Outra funcao interessante que se pdoe contruir é retornar a quantidade de números existentes separados por espacos:

value_Count:= CountNumberLoto(value_Number);

Após isto fica mais fácil fazer o sql:

sql:= 'SELECT NrConcurso, Numeros FROM Concursos WHERE Numeros = %' + PadLeft(Trim(EDTSearchNum.Text)) + '%';

Experimente e veja o resultado. É uma das soluções.
GOSTEI 0
POSTAR