Prezados, Estou tentado fazer funcionar o seguinte:
* Delphi 2007 conectando via DBExpress (não, obrigado, não vou trocar por ZEOS) * Delphi open source DbExpress driver for ODBC versão 3.201 (http://sourceforge.net/projects/open-dbexpress/) * Driver ODBC versão 08.03.0300 (http://www.postgresql.org/ftp/odbc/) * Postgres 8.3.4 instalado numa estação RWindows (sem nenhuma pretensão de ser mais do que um servidor de testes para 3 estações) * Um banco de dados criado com codificação UTF8 e client_encoding LATIN1 ou UTF8 (os dois deram o mesmo problema) Já consigo fazer 99% de tudo o que eu preciso, só falta contornar um bug com parâmetros do tipo Unicode (ou UTF8): Encontro um problema quando tento gravar um registro, via query INSERT INTO e valores parametrizados. Quando o valor contido no parâmetro tem caracteres acentuados e o número de caracteres é exatamente igual ao máximo permitido pelo campo (20 caracteres num varchar(20)), o driver ODBC me retorna o erro "value too long for type character varying", como se o campo tivesse caracteres a mais, só que na realidade não tem, são apenas acentuados. Pelo que depurei, o DBExpress passa a informação certa para o driver ODBC (caracteres corretamente acentuados e tamanho da string=20). O mesmo comando com exatamente o mesmo valor funciona corretamente quando o executo pelo PGAdmin. O erro que o driver ODBC me retorna (texto montado pelo driver DBX) é o seguinte: Error returned from ODBC function SQLExecute ODBC Return Code: -1: SQL_ERROR ODBC SqlState: 22001 Native Error Code: 7 ERROR: value too long for type character varying(20); Error while executing the query DBMS: "PostgreSQL", version: 8.3.4, ODBC Driver: "PSQLODBC35W.DLL", version: 08.03.0300 SQL: insert into semaforo (semaforo,identificador,descricao,data_hora,usuario) values ( ? , ? , ? , ? , ? ) Parameters: 1 INPUT INTEGER: 3 2 INPUT VARCHAR: 'CTD-Proc. Integração' 3 INPUT VARCHAR: '00030002000000004102008000000001xxxxxxx' 4 INPUT TIMESTAMP: 2008-10-02 17:40:11.859000000 5 INPUT INTEGER: 1 Connection string: DSN=Teste;DATABASE=Teste01102008143439;SERVER=192.168.1.10;PORT=5432;UID=sysdba;PWD=***;SSLmode=prefer;ReadOnly=0;Protocol=7.4-2;FakeOidIndex=0;ShowOidColumn=0;RowVersioning=0;ShowSystemTables=0;ConnSettings=;Fetch=1000000;Socket=4096;UnknownSizes=2;MaxVarcharSize=255;MaxLongVarcharSize=8190;Debug=0;CommLog=0;Optimizer=1;Ksqo=1;UseDeclareFetch=0;TextAsLongVarchar=1;UnknownsAsLongVarchar=1;BoolsAsChar=1;Parse=0;CancelAsFreeStmt=0;ExtraSysTablePrefixes=dd_;;LFConversion=1;UpdatableCursors=1;DisallowPremature=0;TrueIsMinus1=0;BI=4;ByteaAsLongVarBinary=1;UseServerSidePrepare=1;LowerCaseIdentifier=0;XaOpt=1 A estrutura da tabela é: CREATE TABLE semaforo ( semaforo integer NOT NULL, identificador character varying(20), descricao character varying(250), data_hora timestamp without time zone, usuario integer, CONSTRAINT pksemaforo PRIMARY KEY (semaforo) ); Alguém já passou por algo parecido ou faz idéia de como posso contornar isso? Mozart Hasse _______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral