Como pesquisar um registo independente se tiver Maiúsculas
Olá pessoal,
Como posso fazer um select * from clientes where codigo = ´a´
mas na base dados tanto posso ter codigo em maiusculas ou minisculas?
Existe alguma função para isso? Ou uma que me grave sempre em maiusculas?
Porque se tiver na BD ´aA´ e se procurar por ´aa´ não retorna nada. era que tenho que fazer +- assim
select * from clientes where caps(codigo) = caps(edit1.text)
o caps converte para maiusculas. Não estou perdendo performance ao colocar um função para converter para maisculas?
Como posso fazer um select * from clientes where codigo = ´a´
mas na base dados tanto posso ter codigo em maiusculas ou minisculas?
Existe alguma função para isso? Ou uma que me grave sempre em maiusculas?
Porque se tiver na BD ´aA´ e se procurar por ´aa´ não retorna nada. era que tenho que fazer +- assim
select * from clientes where caps(codigo) = caps(edit1.text)
o caps converte para maiusculas. Não estou perdendo performance ao colocar um função para converter para maisculas?
Porty
Curtidas 0
Respostas
Delphi32
08/08/2005
Olha, eu indicaria que você fizesse justamente o que você já está fazendo. Usar a função na consulta. Qual banco de dados vocês está usando? Se for Firebird (e acho que Interbase também) você poderia usar a função UPPER que converte a string para maiúsculas.
Nos meus projetos sempre coloco a propriedade CharCase dos Edits e DBEdits para ecUppercase, assim garanto que só será possível cadastrar em maiúsculas e por isso as minhas consultas não usam essa função.
Agora, se perde performance ao fazer isso eu não tenho certeza absoluta, mas acho que perde sim. Mas a perda é ínfima. Acho que nem influencia muito...
t+!
Nos meus projetos sempre coloco a propriedade CharCase dos Edits e DBEdits para ecUppercase, assim garanto que só será possível cadastrar em maiúsculas e por isso as minhas consultas não usam essa função.
Agora, se perde performance ao fazer isso eu não tenho certeza absoluta, mas acho que perde sim. Mas a perda é ínfima. Acho que nem influencia muito...
t+!
GOSTEI 0
Ariovaldo
08/08/2005
Se vc estiver usando Firebird ou Interbase Faça o seguinte:
Declare esta função no Banco, ou seja, executa isso na sua interface SQL
[b:1f4b79f347]
DECLARE EXTERNAL FUNCTION LOWER
CSTRING(255) CHARACTER SET WIN1252
RETURNS CSTRING(255) CHARACTER SET WIN1252 FREE_IT
ENTRY_POINT ´IB_UDF_lower´ MODULE_NAME ´ib_udf´;[/b:1f4b79f347]
No seu SQL faça o seguinte:
QryTeste.sql.add(´Select *´);
QryTeste.sql.add(´From Tabela´);
QryTeste.sql.add(´Where Lower(SeuCampo) = :SeuCampo´);
QryTeste.Parambyname(´SeuCampo´).asstring := LowerCase(SeuCampo.Text);
QryTeste.Open;
Me parece que não existe uma função Nativa do banco para converter para Maiuscula e sim só para Minuscula portanto com esta função Lower do banco e LowerCase do delphi vc converte tudo para Maiuscula.
Declare esta função no Banco, ou seja, executa isso na sua interface SQL
[b:1f4b79f347]
DECLARE EXTERNAL FUNCTION LOWER
CSTRING(255) CHARACTER SET WIN1252
RETURNS CSTRING(255) CHARACTER SET WIN1252 FREE_IT
ENTRY_POINT ´IB_UDF_lower´ MODULE_NAME ´ib_udf´;[/b:1f4b79f347]
No seu SQL faça o seguinte:
QryTeste.sql.add(´Select *´);
QryTeste.sql.add(´From Tabela´);
QryTeste.sql.add(´Where Lower(SeuCampo) = :SeuCampo´);
QryTeste.Parambyname(´SeuCampo´).asstring := LowerCase(SeuCampo.Text);
QryTeste.Open;
Me parece que não existe uma função Nativa do banco para converter para Maiuscula e sim só para Minuscula portanto com esta função Lower do banco e LowerCase do delphi vc converte tudo para Maiuscula.
GOSTEI 0
Kotho
08/08/2005
Olha... teoricamente falando, quando utiliza-se função para fazer uma pesquisa, esta pesquisa não é feita pelo índice... o que quer dizer, perda de performance... agora, isso vai depender da quantidade de registros que vc possui...
GOSTEI 0