erro com ADO e Sql Server no delphi...
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 ?
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
Curtidas 0
Respostas
Emerson Nascimento
28/10/2008
talvez porque o campo Titular seja ´maior´ que o campo ExtensoNomeEmpresa.
GOSTEI 0
Juniorvieira
28/10/2008
Testa o tamanho dos campos como nosso amigo citou, ou cria este parametro persistentemente e checa os valores no params editor do Adoqry.
GOSTEI 0
Marciodossantosprog
28/10/2008
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
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
GOSTEI 0
Juniorvieira
28/10/2008
a solução acima funciona com certeza. é mais uma opção. :D
GOSTEI 0