Delphi 2007 + DBExpress + "conversion from data type varchar to data type money"

13/02/2010

1

Ola,

---------------------------
Debugger Exception Notification
---------------------------
Project OrionNFe.exe raised exception class TDBXError with message 'SQL State: 42000, SQL Error Code: 260
Disallowed implicit conversion from data type varchar to data type money, table 'NotaFiscalEletronica.dbo.DOC_FISCAIS', column 'DFIS_VLR_DESPESAS'. Use the CONVERT function to run this query.
SQL State: 42000, SQL Erro'.
---------------------------
Break   Continue   Help   
---------------------------

"Não permitido conversão implícita de tipo de dados varchar para tipo de dados dinheiro, coluna da tabela"

Configuração do Ambiente:
 Windows XP SP3
 Delphi 2007
 DBExpress : ClienteDataSet + Provider + SQLQuery + SQLConnection
 MSSQL 2000 personal

 A estrutura de Dados e toda criada em Runtime, os Fields são configurados no DataSet via codigo após sua abertura, porem ocorre erro na na gravação. Como abaixo.

procedure TDFISDocFiscais.ConfigurarCampos;
begin
  inherited ConfigurarCampos(FDataSet);

 "Configuração dos campos do tipo (SQL) money"

  if FDataSet.FindField('DFIS_VLR_DESPESAS') <> nil then
  begin
    TBCDField(FDataSet.FieldByName('DFIS_VLR_DESPESAS')).DisplayLabel      := 'Valor Despesas ';
    TBCDField(FDataSet.FieldByName('DFIS_VLR_DESPESAS')).DisplayWidth     := 17;
    TBCDField(FDataSet.FieldByName('DFIS_VLR_DESPESAS')).Required            := True;
    TBCDField(FDataSet.FieldByName('DFIS_VLR_DESPESAS')).Visible                := True;
    TBCDField(FDataSet.FieldByName('DFIS_VLR_DESPESAS')).ReadOnly           := False;
    TBCDField(FDataSet.FieldByName('DFIS_VLR_DESPESAS')).Origin                 := Origem;
    TBCDField(FDataSet.FieldByName('DFIS_VLR_DESPESAS')).ProviderFlags     := [pfInUpdate];
  end;

   ...

end;


Watch Name                         Value

Fields[intCount].fieldname    'DFIS_VLR_DESPESAS'
Fields[intCount].DataType    ftFMTBcd
Fields[intCount].value           '0'

 O erro ocorre ao executar o DataSet.ApplyUpdates.

* Nâo existe configuração para a os Fields da Query, somente o comando SQL.

Responder

Posts

você está passando um valor string.

como os dados estão sendo passados para os campos?
Responder
o retorno deveria ser

Fields[intCount].value           0

e não

Fields[intCount].value           '0'



Responder
O valor esta sendo passado corretamente para o campo no ClienteDataSet, como valor numérico:

    FDataSet.FieldByName('DFIS_VLR_DESPESAS').AsCurrency              := StrToCurrDef(      Trim(AXML.FieldByName('DFIS_VLR_DESPESAS').AsString), 0);

O problema não é tão simples assim...
Responder

17/02/2010

Wilson Junior

Tente utilizar

FDataSet.FieldByName('DFIS_VLR_DESPESAS').AsFloat := StrToFloatDef(      Trim(AXML.FieldByName('DFIS_VLR_DESPESAS').AsString), 0);


Espero ter colaborado.
Responder