Consultor Eletrônico



Kbase 70387: Suporte para caracteres Unicode com DataServer - parte II
Autor   Marco Aurelio Scheidt - Tecnologia
Acesso   Público
Publicação   19/03/2018
No artigo anterior (kbase 70386) verificamos que a partir da versão 10.1C o OpenEdge suporta tipos de dados Unicode para os DataServers Oracle e SQL Server. Neste post veremos as configurações necessárias para obter este suporte. Utilizaremos como exemplo o DataServer SQL Server com o banco de dados SQL Server 2008, mas a versão 2005 também pode ser utilizada.

Anteriormente a versão 10.1C, qualquer tentativa de acesso a tabelas que possuam dados NCHAR, NVARCHAR ou NTEXT geram o erro 6227, abortando a sessão do OpenEdge:
SYSTEM ERROR: Unicode Unsupported: Bad datatype -9. (6227)

Para demonstrar o suporte a Unicode no 10.1C, utilizaremos a seguinte estrutura de tabela, com duas colunas Unicode:

CREATE TABLE Languages (
LCID INT PRIMARY KEY,
Alias VARCHAR(20) NOT NULL,
Name NVARCHAR(20) NOT NULL,
Text NVARCHAR(75) NOT NULL,
)


O primeiro passo é criar um Schema Holder que seja cópia de um banco Progress com código de página UTF-8. A Progress disponibiliza um banco de dados empty UTF-8 no diretório %DLC%\prolang\utf\. O Schema Holder pode ser criado com o comando:

prodb shUnicode %DLC%\prolang\utf\empty


Com o Schema Holder já configurado para utilizar UTF-8, podemos criar uma Schema Image também com o código de página UTF-8, como demonstrado na figura 1 em anexo:

A única diferença durante a criação da Schema Image é a definição do código de página como utf-8. O restante do processo de extração dos objectos do SQL Server continua igual.

Finalmente, devemos definir o parâmetro -cpinternal para o valor utf-8, como no exemplo:

prowin32 -pf bancos.pf -cpinternal utf-8

A tela abaixo mostra um exemplo de mensagens em vários idiomas armazenadas no SQL Server e exibidas através de um programa Progress. Repare que os caracteres chineses, japoneses, coreanos e russos são exibidos corretamente (figura 2).

Se os parâmetros de código de página não estiverem adequados, os caracteres Unicode não serão exibidos corretamente. Além disso, qualquer tentativa de gravar caracteres em campos Unicode resultará em dados corrompidos. A tela abaixo mostra um exemplo do que ocorre quando o código de página da Schema Image está diferente de utf-8 (figura 3).

A configuração do suporte Unicode para o DataServer Oracle é semelhante ao apresentado. Mais detalhes sobre a configuração apresentada podem ser encontrados nos manuais:

OpenEdge Data Management: DataServer for Oracle
https://documentation.progress.com/output/OpenEdge102b/pdfs/dmora/dmora.pdf

OpenEdge Data Management: DataServer for Microsoft SQL Server
https://documentation.progress.com/output/OpenEdge102b/pdfs/dmsql/dmsql.pdf

Autor: Marcos Kirchner
Anexos
figura1.jpg figura2.jpg figura3.jpg