Duvidas sobre consulta.
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.
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
Curtidas 0
Respostas
Joel Rodrigues
10/06/2013
1 - O que seriam as atualizações automáticas?
GOSTEI 0
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.
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
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.
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
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
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.
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
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.
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
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.
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