SQL do Delphi não reconhece acentuação

11/02/2006

Prezados colegas:

Em certo formulário, tenho um componente DBLookupComboBox que exibe uma listagem com mais de 5 000 municípios brasileiros, sendo definido (através de uma consulta SQL) que os registros sejam ordenados alfabeticamente, mas percebi que alguns dos registros, cuja primeiras letras são acentuadas, são listados APÓS os municípios iniciados pela letra ´Z´. Algo assim:

Xinguara/PA
Xique-Xique/BA
Zabele/PA
Zacarias/SP
Zortéa/SC
Zé Doca/MA
Água Azul do Norte/PA
Água Boa/MG
Água Boa/MT
...
Óbidos/PA
Óleo/SP

Esclareço que utilizava essa mesma listagem em componentes Access/VBA definindo como origem uma consulta SQL idêntica e nunca tive qualquer problema. Só posso concluir que a implementação SQL instalada no Delphi não reconhece palavras acentuadas (e certamente também cedilhas). Até então, julgava que sistemas que não suportavam acentuação eram mais antigos, legados do Clipper ou Cobol, mas, pelo visto, muito trabalho me espera, e não me refiro o de eliminar a acentuação de todos os registros, pois acredito que não terei muita dificuldade em desenvolver uma função ou procedimento que automatize a tarefa, porém não gostaria de fazer isso antes de checar outras alternativas.
Na verdade, se o ambiente fosse Access, bastaria manter os registros atuais mas criando uma nova coluna na tabela com os registros sem acentuação; defini-la como a que deve ser ordenada na consulta SQL, mas oculta-la ao usuário exibindo somente a que contém os registros acentuados, isso porque no Access é possível exibir ou ocultar facilmente colunas em qualquer ComboBox e ListBox, recurso que o Delphi aparentemente só oferece (com restrições) em componentes do tipo DBGrid.
Por isso, indago aos colegas se existe alguma maneira de que os registros sejam exibidos de maneira correta sem eliminar a ortografia. Desde já, agradeço a atenção dispensada.


Spiritwwwalker

Respostas

11/02/2006

Vinicius2k

Colega,

Qual banco de dados você está utilizando (não ficou bem claro)?
Qual a camada de acesso (BDE, ADO, etc...)?

A ordenação não é implementada pelo Delphi e sim pelo SGBD utilizado (ou engine local) e é necessário espeficicar charsets e collates adequados no momento da criação do banco de dados para que o SGBD interprete corretamente a acentuação/cedilha.

T+


Responder Citar

11/02/2006

Tremonti

Aproveitando o Tópico

Utilizo SQL....qual colate devo usar para ter o cedilha e os acentos?

Abraços...


Responder Citar

11/02/2006

Vinicius2k

Utilizo SQL...

Não esclareceu muita coisa...


Responder Citar

11/02/2006

Foxcyber

Se fosse você faria como faço em meus sistemas. Quando são muitos dados pra mostrar num combo eu coloco um edit e um botao ao lado. Ao clicar no botao abre uma tela com os dados e com algumas opções de busca para estes dados. Ao clicar no grid do campo desejado ele volta pra tela anterior carregando no edit o valor desejado e escolhido.


Responder Citar

11/02/2006

Spiritwwwalker

Prezado Vinicius2K:

Em resposta às suas indagações, esclareço que os registros mencionados foram importados de uma tabela Access para uma outra no padrão Paradox, a qual foi criada no próprio Database Desktop, sendo que a consulta propriamente dita foi definida num componente ´Query´ da coleção Data Access do Delphi 5 e possui a seguinte sintaxe:

SELECT * FROM tblMunicipios ORDER BY Municipio




Prezado FoxCyber:

Agradeço sua sugestão, mas não posso adota-la no momento porque me obrigaria a redefinir o layout de quase todos os formulários de minha aplicação.


Responder Citar

11/02/2006

Vinicius2k

Colega,

Minha experiência é ínfima com Paradox (sempre preferi utilizar o próprio Access como banco de dados desktop) portanto peço que me perdõe se isto não for a solução:

1. Configure [b:cd063364f1]LANGDRIVER[/b:cd063364f1] do driver nativo para Paradox para [b:cd063364f1]Paradox ´Intl´ 850[/b:cd063364f1]. BDE Administrator -> Configuration -> Drivers -> Native -> Paradox. Este é o processo que eu fazia com o driver nativo do Access quando utilizava a BDE.

2. Altere a estrutura da sua tabela configurando [b:cd063364f1]Table Language[/b:cd063364f1] para [b:cd063364f1]Paradox ´Intl´ 850[/b:cd063364f1].

PS: Não confunda [i:cd063364f1]Pdox ANSI Intl850[/i:cd063364f1] (que é o default) com [i:cd063364f1]Paradox ´Intl´ 850[/i:cd063364f1]

T+


Responder Citar

12/02/2006

Marco Salles

[b:4fed09c806]Duas perguntas , uma para o SpiritWWWalker e uma para o vinicius[/b:4fed09c806]

BDE Administrator -> Configuration -> Drivers -> Native -> Paradox


[color=darkred:4fed09c806]1) pergunta : Para o SpiritWWWalker[/color:4fed09c806]

como no BDE Administrador esta definido o LANGDRIVER ???? :?: :?: :?:

Ressalto que :

LANGDRIVER Essa configuração seleciona a linguagem do driver usada pela suas tabelas e índices. A linguagem do driver determina que língua específica de caracteres podem ser armazenados nas tabelas e em qual tipo de ordem é usada para construir índices. O caractere padrão do Paradox configurado segue o tipo de ordem ASCII , que separa ´a´ depois de ´Z´ isto é, caracteres minúsculos seguem os maiúsculos. Se você quiser ´A´ e ´a´ para serem separados adjacentes (entre eles), você deve considerar a mudança do drive de linguagem para o Paradox Internacional. Se fizer, embora fique avisado que, sem reconstruir todos os índices - um usuário Paradox com uma linguagem de driver diferente não será capaz de usar tabelas que você cria.


[color=darkred:4fed09c806]2)pergunta : Para o vinicius [/color:4fed09c806]

2. Altere a estrutura da sua tabela configurando Table Language para Paradox ´Intl´ 850.


[b:4fed09c806]Vinicius , como e aonde se altera a estrtura de uma tabela paradox ???[/b:4fed09c806]


Responder Citar

12/02/2006

Edilcimar

Marcos, para alterar a página abra o databasedesktop e clique em table language e escolha a que quiser


Responder Citar

12/02/2006

Marco Salles

citação de : Marco salles
Vinicius , como e aonde se altera a estrtura de uma tabela paradox ???


A estrutura que me refiro , não e a estrutura de tipo de campos , mudar tamanho , criar indices etc... Não e este tipo de estrutura que estou me referindo

Citação de Edicilmar
Marcos, para alterar a página abra o databasedesktop e clique em table language e escolha a que quiser


Citação de Vinicius.2k
2. Altere a estrutura da sua tabela configurando Table Language para Paradox ´Intl´ 850. PS: Não confunda Pdox ANSI Intl850 (que é o default) com Paradox ´Intl´ 850


eu abro o database desktop mas não vejeo esta opção :cry: :cry: :cry:


Responder Citar

12/02/2006

Edilcimar

desculpe, esqueci, tem que abrir a tabela é na parte de alteração da extrutura da mesma


Responder Citar

12/02/2006

Marco Salles

eu nun consigo ver nada que diz respeito a Linguagem :cry: :cry: :cry:


Responder Citar

12/02/2006

Edilcimar

abra o databasedesktop, abra uma tabela qualquer, clique no menu table e depois em restructure, no lado superior da tabela tem table properties, clique lá e escolha table language, depois clique no botão modify aí vai aparecer um form com language, é só escolher a desejada


Responder Citar

12/02/2006

Edilcimar

abra o databasedesktop, abra uma tabela qualquer, clique no menu table e depois em restructure, no lado superior da tabela tem table properties, clique lá e escolha table language, depois clique no botão modify aí vai aparecer um form com language, é só escolher a desejada


Responder Citar

12/02/2006

Marco Salles

abra o databasedesktop, abra uma tabela qualquer, clique no menu table e depois em restructure, no lado superior da tabela tem table properties, clique lá e escolha table language, depois clique no botão modify aí vai aparecer um form com language, é só escolher a desejada


ai foi .. obrigado edicilmar

mas vamos voltar agora no ponto em que paramos . Afinal o tópico é o SpiritWWWalker

*************************************************************


uma pergunta para o SpiritWWWalker..

conforme o vinicius.2k tinha te recomendado : Vá em :
BDE Administrator -> Configuration -> Drivers -> Native -> Paradox


1) [color=darkred:064ddc1dc5]pergunta : Para o SpiritWWWalker [/color:064ddc1dc5]

[b:064ddc1dc5]como no BDE Administrador esta definido o LANGDRIVER ???? [/b:064ddc1dc5]

Ressalto que :

[color=darkblue:064ddc1dc5]LANGDRIVER[/color:064ddc1dc5]

Essa configuração seleciona a linguagem do driver usada pela suas tabelas e índices. A linguagem do driver determina que língua específica de caracteres podem ser armazenados nas tabelas e em qual tipo de ordem é usada para construir índices. O caractere padrão do Paradox configurado segue o tipo de ordem ASCII , que separa ´a´ depois de ´Z´ isto é, caracteres minúsculos seguem os maiúsculos. Se você quiser ´A´ e ´a´ para serem separados adjacentes (entre eles), você deve considerar a mudança do drive de linguagem para o Paradox Internacional. Se fizer, embora fique avisado que, sem reconstruir todos os índices - um usuário Paradox com uma linguagem de driver diferente não será capaz de usar tabelas que você cria.



Responder Citar

12/02/2006

Spiritwwwalker

Prezado Marcos Salles:

Quando postou sua mensagem, já havia efetuado as alterações propostas pelo colega Vinicius2k, mas verificando outras tabelas de minha aplicação, todas tem o LangDriver definido como PdoxANSI Intl850, portanto a que armazena os registros de municípios brasileiros certamente possuía a mesma definição, já que foi criada no padrão Paradox. Ela só diferia das demais por ter seus registros incluídos de maneira automatizada, após estabelecer uma conexão ADO com uma tabela Access.



Prezado Vinicius2k:

Segui suas orientações, mas quando configurei a Table Language para Paradox ´intl´ 850, todos os caracteres acentuados ficaram truncados, seja no DataBase Desktop, seja no formulário. Alterei a configuração para ´Access General´ (deixando o LangDriver como você havia sugerido) e tudo voltou ao normal, inclusive os registros passaram a ser ordenados corretamente no DBLookupComboBox. Agradeço a ajuda de todos os colegas que, mais uma vez, prestaram seu valioso auxílio para a solução de um problema que, a princípio, parecia demandar horas de pesquisas e experimentações.


Responder Citar