Jump to content
Fórum Script Brasil
  • 0

SQL - Utilização de Parametros (Dicas)


Corposemalma
 Share

Question

Uma curta + interessante:

Aee gente, pra quem não sabe do poder de SQL vamu lá agora!

O comum ao se trabalhar com SQL é que tenha-se sempre uma variavel definida pelo usuário final.... A maneira mais prática e menos trabalhosa de se fazer o mesmo (na minha opinião e de alguns outros usuários) é a utilização de parametros!

O comum de usuários iniciantes é colocar as variáveis dentro da própria setença de SQL, mas esse tipo de aproximação trás dois grandes problemas:

* O incontável número de "aspas" na sentença, dificultando a visualização, edição, aplimoramento e teste da mesma...

* Dificuldade de tratar tipos diferentes de variáveis (string, date, integer)

Exemplo comum:

Query.SQL.Add('SELECT * FROM tabela WHERE CampoNome = '''' + EditNome.text + '''' ')

Bem... nesse exemplo é facil visualizar tudinho... 
agora olhe o próximo:

Query.SQL.Add('SELECT Nome, Endereço, Idade FROM tabela WHERE CampoNome = ' + '''' + EditNome.text + '''' + ' AND Idade BETWEEN ' + StrtoInt(EditIdade1.text) + ' AND ' + StrtoInt(EditIdade2.text) + ' AND  Endereço LIKE ' + '''' + % + EditEdndereço.text + % + '''' + ' ORDER BY Nome')     
isso tudo acima é sou uma linha tá! Conseguiu ler algo ai no meio? Vai saber se falta alguma aspa HEHE, detalhe que se faltar, voce somente verá em tempo de execucao o erro, e mesmo assim não aponta exatamente, voce vai precisar voltar e revisar toda a sentença sozinho Mesma linha acima usando Parametros:
Quey.SQL.Add('SELECT Nome, Endereço, Idade FROM tabela WHERE Nome = :Nome AND Idade BETWEEN :idade1 AND :Idade2 AND Endereço LIKE :endereço ORDER BY Nome ') 
query.parambyname('nome').AsString := Editnome.text
query.parambyname('idade1').AsInteger := StrtoInt(Editidade1.text)
query.parambyname('idade2').AsInteger := StrtoInt(Editidade2.text)
query.parambyname('endereço').AsString := '%' + EditEndereço.text + '%'

Pooo mas deu mais linhas! Mais menos trabalho, olha a quantidade de aspas que foram poupadas!! Com certeza, agora se tiver que mexer é super fácil de achar....

Esse tipo de abordagem em SQL facilita bastante no tratamento de variaveis por deixa de obrigar a pessoa a usar as " aspas e fazer aquela zona... Além de ajudar tambem no tratamento de tipos diferentes de variaveis, tipo procurar por um numero em um campo string.

Aprenda a fazer! Quando tiver que enfrentar SQL cabulosas com pesquisas complexas (eu tinha uma que procurava: autor, cantor, musica, CD, entre datas, e genero musical, o usuário selecionava o que queria, ordenava por qualquer um dos itens, de forma crescente ou decrescente, resumindo: a sentença era totalmente maleavel... Imagina se tivesse colokado isso tudo em uma só sentença, cheia de aspas, sem usar nenhum parametro e no fim ver que precisa trocar um detalhe!)

Certamente a utilização de parâmetros em sql, além de dar limpeza na visualização do código, também dá uma certa flexibilização como esta:

Já tive problemas com parâmetros data; em um banco era .asDate, em outro era .asDateTime. Então o que eu fiz:

try

Query.Open ou Query.Execsql

except

// aqui eu mando p/ uma rotina que checa os parâmetros data

// faço um for de 0 a Params.Count-1 e vejo

// se o DataType for ftDate, altero p/ ftDateTime e vice-versa

// depois volto a dar

Query.Open ou Query.Execsql

end;

Se os parâmetros estivessem implícitos na sentença, eu não conseguiria.

Acho que a maioria utiliza implicitamente por não ter que escrever as linhas de atribuição de valores dos parâmetros.

Obs: Acho que na linha:

query.parambyname('endereço').AsString := % + EditEndereço.text + %

O % deve estar entre aspas. <- REALMENTE EU TINHA ESQUECIDO... HEHE

Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      151k
    • Total Posts
      649.1k
×
×
  • Create New...