1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

SQL

Discussão em 'Programação' iniciada por ti17, 30 de Dezembro de 2008. (Respostas: 7; Visualizações: 616)

  1. ti17

    ti17 Power Member

    boas..

    eu estou a fazer o meu projecto de final de curso..o meu projecto é um gestor escolar, e estou a desenvolver esse projecto em DELPHI.

    No meu projecto tenho uma parte que listo todos os cursos existentes, o que eu quero fazer mais nessa mesma listagem, é por uma opção para filtros, para so listar aquilo que queremos, entao eu tenho uma caixa de texto, onde é escrito o nome do curso para depois atraves desse nome, com o SQL vou a base de dados procurar esse nome e deposito o resultado numa GRID. ate aqui todo bem, mas eu queria melhor que isto, queria que quando o utilizador insere uma letra na tal caixa de texto, quero que me mostre todos os cursos começados por essa mesma letra, e sempre que o utilizador inserir letras, que aquilo fosse actualizando, que mostre todos os cursos mas que começem por as letras que sao introduzidas.


    sei que tenho que fazer isto no evento da caixa de texto (on change), só nao sei é como fazer, tou a pensar se o SQL tem alguma função que faça isso, ou se o proprio DELPHI tem, eu ainda nao consegui encontrar nada sobre isso..

    obg a todos, espero que me tenha explicado bem..
     
  2. cybersurfer

    cybersurfer Power Member

    Salvo erro tens a função LIKE, que te dá as coisas semelhantes(estou um bocado enferrujado em sql)....
     
  3. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Por exemplo,
    Código:
    SELECT nome FROM cursos WHERE nome LIKE "eng%"
    
    o % é semelhante ao wildcard *.

    Toma cuidado com o que metes no LIKE, não vá o diabo (e o SQL Injection) tecê-las ;)
     
  4. [C4]

    [C4] Power Member

    De salientar que essa abordagem, vai criar alguma carga no servidor, uma vez que por cada letra digitada, é feita uma query para trazer os resultados e é executado o respectivo preenchimento da grid.

    Ex: Curso tecnologico de electronica -> 32 querys (uma por cada letra)

    A minha abordagem pessoal a este problema costuma ser diferente.
    Crio um timer com 2 segs. Este timer é inicializado em cada click (onchange) de texto. Se nao for escrita nenhuma letra no espaco de 2 segundos, o timer dispara o evento (OnTimer) e executa a query.

    Esta abordagem permite que o utilizador escreva o nome do curso e so quando parar de escrever é que a consulta é efectuada.

    Um outra alternativa é efectuares a consulta de TODOS os cursos à entrada do form, guardares isso numa lista qualquer, e ir fazendo a leitura nessa lista.

    Pessoalmente gosto mais da primeira abordagem.
     
  5. IComeFromBehind

    IComeFromBehind Power Member

    Podes por um delay entre queries. 2 segundos é muito, alguns milisegundos devem bastar.
     
    Última edição: 31 de Dezembro de 2008
  6. ti17

    ti17 Power Member

    ok.. obg a todos vou experimentar depois digo qualquer coisa..

    obg e cumpts
     
  7. Tomb4000

    Tomb4000 Power Member

    sendo assim como sao apenas nomes de cursos, podes carrega-los todos para o programa e depois efectuar a pesquisa na aplicação. pouparias nas consultas.
     
  8. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Concordo, e podes pensar numa espécie de cache (se bem que isso já deve sobrecarregar um pouco o cliente): não carregas tudo inicialmente, mas assim que vão sendo introduzidas letras, as respostas aos queries à BD serão guardadas. Assim, se alguém escreve "EN" fica com tudo o que começa com "EN" gravado; em seguida escreve "H" e tem 0 respostas (erro ao escrever), e quando apaga essa letra, não há um novo query por "EN", porque a resposta já tinha sido dada.
    Melhor mesmo é o programa pegar em todas as respostas ao query "EN%", memorizá-las e depois fazer ele mesmo essa verificação.
    Não sei se será viável...?
     

Partilhar esta Página