Fórum erro com ADO e Sql Server no delphi... #365573

28/10/2008

0

Pessoal, espero que consigam me ajudar.

Estou com o seguinte comando:

INSERT INTO sal.RemessaA (CodRegistroHeader, IdentificacaoArqRemessa, ExtensoIdentificacao,TipoServico, ExtensoTipoServico, ContaCorrente, ExtensoNomeEmpresa)
VALUES(:_CodRegistroHeader, :_IdentificacaoArqRemessa, :_ExtensoIdentificacao, :_TipoServico, :_ExtensoTipoServico, :_ContaCorrente, :_ExtensoNomeEmpresa)´);

Parameters.ParamByName(´_CodRegistroHeader´).Value := 0;
Parameters.ParamByName(´_IdentificacaoArqRemessa´).Value := 1;
Parameters.ParamByName(´_ExtensoIdentificacao´).Value := ´REMESSA´;
Parameters.ParamByName(´_TipoServico´).Value := 1;
Parameters.ParamByName(´_ExtensoTipoServico´).Value:= ´COBRANCA´;
Parameters.ParamByName(´_ContaCorrente´).Value := qryCC.FieldByName(´ContaCorrente´).AsFloat;

Parameters.ParamByName(´_ExtensoNomeEmpresa´).Value := qryCC.FieldByName(´Titular´).AsString;

ExecSql;



Componentes ADO, conexão com SqlServer

O erro é só na linha do parâmetro ´_ExtensoNomeEmpresa´
em modo de execução na aplicação.

se eu substituir o Field ´Titular´ por

1- Um valor de teste do tipo: ´Teste´
2- Um outro campo: qryCC.FieldByName(´cpf2´).AsString;

Ele dá certo a execução;
Só com a linha de comando ´qryCC.FieldByName(´Titular´).AsString´
que dá o erro abaixo:

...EOleException with message ´Dados de cadeia ou binários seriam truncados´.

O que pode ser ?


Thiagopedro

Thiagopedro

Responder

Posts

28/10/2008

Emerson Nascimento

talvez porque o campo Titular seja ´maior´ que o campo ExtensoNomeEmpresa.


Responder

Gostei + 0

29/10/2008

Juniorvieira

Testa o tamanho dos campos como nosso amigo citou, ou cria este parametro persistentemente e checa os valores no params editor do Adoqry.


Responder

Gostei + 0

05/11/2008

Marciodossantosprog

Certamente o problema está no tamanho do campo. O parâmetro passado possui um tamanho maior que o campo na tabela do banco de dados.

Uma forma de você deixar de ter este tipo de erro e, evitar ter de lembrar o tempo todo de que o campo x da tabela Y tem de ter o tamanho XX e, no meio do seu código ficar tratando a informação com LeftStr, RightStr, Copy e etc... seria realizar este tratamento em seu script.

Ao invés de:

´
INSERT INTO sal.RemessaA (CodRegistroHeader, IdentificacaoArqRemessa, ExtensoIdentificacao,TipoServico, ExtensoTipoServico, ContaCorrente, ExtensoNomeEmpresa)
VALUES(:_CodRegistroHeader, :_IdentificacaoArqRemessa, :_ExtensoIdentificacao, :_TipoServico, :_ExtensoTipoServico, :_ContaCorrente, :_ExtensoNomeEmpresa)´);

´

Usar:

´
INSERT INTO sal.RemessaA (
CodRegistroHeader,
IdentificacaoArqRemessa,
ExtensoIdentificacao)
VALUES(
Convert(Int, :_CodRegistroHeader),
Convert(Int, :_IdentificacaoArqRemessa),
Convert(VarChar(15), :_ExtensoIdentificacao)
)

´

Tratando, internamente os parâmetros você reduz o código e garante que não terá problemas na persistência dos dados.

Espero ter contribuído.
Abraços


Responder

Gostei + 0

05/11/2008

Juniorvieira

a solução acima funciona com certeza. é mais uma opção. :D


Responder

Gostei + 0

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

Aceitar