TWideStringField definido automaticamente
02/02/2021
0
Tenho uma stored procedure que retorna campos string relativamente longos.
CREATE OR ALTER PROCEDURE BASF_BILLING RETURNS (
CODI_REV VARCHAR(20),
MES_VEN INTEGER,
ANO_VEN INTEGER,
OPER_VEN VARCHAR(20),
CFOP_VEN VARCHAR(4),
DESC_VEN VARCHAR(60),
SINA_VEN VARCHAR(1),
VOLU_VEN NUMERIC(18,4),
VDEF_VEN NUMERIC(18,4),
VIND_VEN NUMERIC(18,4)
)
AS
BEGIN
for select
cast( '''' as VARCHAR(20)) as CODI_REV,
cast( 0 as INTEGER) as MES_VEN,
cast( 0 as INTEGER) as ANO_VEN,
cast( '''' as VARCHAR(20)) as OPER_VEN,
cast( '''' as VARCHAR(4)) as CFOP_VEN,
cast( '''' as VARCHAR(60)) as DESC_VEN,
cast( '''' as VARCHAR(1)) as SINA_VEN,
cast( 0 as NUMERIC(18,4)) as VOLU_VEN,
cast( 0 as NUMERIC(18,4)) as VDEF_VEN,
cast( 0 as NUMERIC(18,4)) as VIND_VEN
from RDB$DATABASE
into :CODI_REV, :MES_VEN, :ANO_VEN, :OPER_VEN, :CFOP_VEN, :DESC_VEN, :SINA_VEN, :VOLU_VEN, :VDEF_VEN, :VIND_VEN
do
begin
suspend;
end
end
Dentro do Delphi eu defino TClientDataSet, TDataSetProvider e TSQLDataSet amarrando com a procedure em questão.
Quando dou duplo click no TSQLDataSet e adiciono os campos da procedure, o Delphi está criando os campos varchar com o tipo TWideStringField.
Como faço para que ele reconheça esses campos com o tipo TStringField?
Obrigado!
![Sady Sady](https://www.devmedia.com.br/imagens/fotoscolunistas/790187_20220114103558.jpg)
Sady
Posts
02/02/2021
Sady
cdsTesteCODI_REV: TWideStringField;
cdsTesteCODI_CLI: TWideStringField;
cdsTesteCNPJ_CLI: TWideStringField;
cdsTesteNOME_CLI: TWideStringField;
cdsTesteENCO_CLI: TWideStringField;
cdsTesteNUME_CLI: TWideStringField;
cdsTesteBAIR_CLI: TWideStringField;
cdsTesteCOMP_CLI: TWideStringField;
cdsTesteCEPC_CLI: TWideStringField;
cdsTesteMUNI_CLI: TWideStringField;
sqlTesteCODI_REV: TWideStringField;
06/05/2024
Sady
Voltei a ter o mesmo problema :(
Podem encerrar o post.
Já percebi que não está muito fácil obter ajudar aqui nessa comunidade.
OBRIGADO!!!
07/05/2024
Arthur Heinrich
Provavelmente tem que alterar o tipo manualmente.
08/05/2024
Sady
Encontrei o problema e a solução.
O problema está diretamente relacionado com tabela unicode.
Se CharacterSet estiver definido como UTF-8, todos os campos do banco que estão como VARCHAR serão reconhecidos pelo Delphi como TWideStringField.
A solução que eu encontrei foi mudar para Win1252. Dessa forma, ao definir os campos dentros do componente utilizado, TFDQuery ou TClientDataSet, esses campos passarão ser reconhecidos como TStringField.
Espero que ajude outros que tenham o mesmo problema.
Clique aqui para fazer login e interagir na Comunidade :)