TWideStringField definido automaticamente

02/02/2021

0

Olá pessoal!

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

Responder

Posts

02/02/2021

Sady

Completando:

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;
Responder

06/05/2024

Sady

Há 3 anos atrás eu postei essa pergunta e até hoje ninguém me respondeu :(]

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!!!
Responder

07/05/2024

Arthur Heinrich

Não creio que o Delphi faça um parse do comando, para perceber o datatype de cada coluna que será inserido em cada variável, para então criar o parâmetro.

Provavelmente tem que alterar o tipo manualmente.
Responder

08/05/2024

Sady

Olá a todos!

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.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar