1
I need to configure the CDS to save the result of the query, but without dragging the components, since in this case I am not using any form, but returns error 'Invalid Field Type' in the fields informed. Follows my code:
begin
CDSEstoque := TClientDataSet.Create(Application);
SDSEstoque.Close;
CDSEstoque.Close;
CDSEstoque.FieldDefs.Clear;
CDSEstoque.FieldDefs.add('ID_PRODUTO', ftInteger);
CDSEstoque.FieldDefs.add('NOME_PRODUTO', ftString, 50);
CDSEstoque.FieldDefs.add('NCM', ftString, 8);
CDSEstoque.FieldDefs.add('QTDADE', ftCurrency);
CDSEstoque.FieldDefs.add('CUSTO_TOTAL', ftCurrency);
CDSEstoque.FieldDefs.add('CUSTO_UNI', ftCurrency);
CDSEstoque.FieldDefs.add('UND', ftString, 2);
CDSEstoque.CreateDataSet;
DataEstoque := FormatDateTime('yyyy-mm-dd', pDataFim);
SDSEstoque.SQLConnection := TDBExpress.getConexao;
SDSEstoque.CommandText := 'SELECT M.ID_PRODUTO, A.NOME_PRODUTO, A.NCM, SUM(M.QUANTIDADE) AS QTDADE, ' +
'SUM(M.VALOR_TOTAL) AS CUSTO_TOTAL, '+
'(SUM(M.VALOR_TOTAL) / SUM(M.QUANTIDADE)) AS CUSTO_UNI, B.SIGLA AS UND '+
'FROM movimento_produto M '+
'INNER JOIN produto A ON (A.ID = M.ID_PRODUTO) '+
'INNER JOIN unidade_produto B ON (B.ID = A.ID_UNIDADE) '+
'WHERE (M.DATA_MOVIMENTO <= '+QuotedStr(DataEstoque)+') '+
'AND QTDADE > 0 GROUP BY M.ID_PRODUTO ORDER BY A.NOME_PRODUTO;';
CDSEstoque.Open;
SDSEstoque.Open;
end;
could not be the quantity field that is declared as currency in the clientdataset?
CDSEstoque.FieldDefs.add('QTDADE', ftCurrency);
, generally Qtde. fields are integer– JMSlasher
but the quantity can be broken, for example 1,5 1,7
– wribeiro
And another question would be, if I’m creating the CDS correctly
– wribeiro
What is "Sdsestoque"? And where is the CDS being related to a Datasetprovider?
– Andrey