Variável currency esta retornando zero mesmo a função tendo
12/12/2018
0
Função:
function TFacadeMensalista.getSaldoAnteriorMensalista(idMensalista: Integer; DataInicial, DataFinal: TDateTime): Currency;
var
vsSQL : String;
begin
Result := 0;
vsSQL := '''''''' select ml_saldo ''''''''
+ '''''''' from ''''''''
+ '''''''' mensalista_lancamento ''''''''
+ '''''''' where ''''''''
+ '''''''' ml_pessoa = '''''''' + CSql(idMensalista)
+ '''''''' and ml_data between '''''''' + CSql(DataInicial) + '''''''' and '''''''' + CSql(DataFinal)
+ '''''''' and ml_tipo = '''''''' + CSql(eML_TIPO_PAGAMENTO)
+ '''''''' and ml_situacao = '''''''' + CSql(eML_SITUACAO_NORMAL)
+ '''''''' order by ml_data '''''''';
controle.DadosAux.ExecutaSQL(vsSQL);
Result := controle.DadosAux.getCur(ML_SALDO);
end;
Chamando ela:
saldoAnterior := facade.getSaldoAnteriorMensalista(mensalista, dataIni, dataFim);
E mesmo assim retorna 0, muito estranho se alguém souber de algo, me avisa por favor, valeu.
Fernando Wahl
Posts
12/12/2018
Emerson Nascimento
function TFacadeMensalista.getSaldoAnteriorMensalista(idMensalista: Integer; DataInicial, DataFinal: TDateTime): Currency; var vsSQL : String; begin Result := 0; vsSQL := ' select ml_saldo from mensalista_lancamento ' + ' where ' + ' ml_pessoa = ' + CSql(idMensalista) + ' and ml_data between ' + CSql(DataInicial) + ' and ' + CSql(DataFinal) + ' and ml_tipo = ' + CSql(eML_TIPO_PAGAMENTO) + ' and ml_situacao = ' + CSql(eML_SITUACAO_NORMAL) + ' order by ml_data '; controle.DadosAux.ExecutaSQL(vsSQL); Result := controle.DadosAux.getCur(ML_SALDO); end;
seria necessário publicar o código das funções
- CSql()
- controle.DadosAux.ExecutaSQL()
- controle.DadosAux.getCur()
porque elas que tratam dos parâmetros, executam (abrem) a query e retornam o conteúdo do campo.
12/12/2018
Raimundo Pereira
Fiz um teste em base local:
function TFP.getSaldoAnteriorMensalista(idMensalista: Integer; DataInicial, DataFinal: TDateTime): Currency; var vsSQL: String; begin Result := 0; dm.DadosAux.close; dm.DadosAux.sql.Clear; vsSQL := ' select ml_saldo ' + ' from ' + ' mensalista_lancamento ' + ' where ' + ' ml_pessoa = ' + IntToStr(idMensalista) + ' and ml_data between ''' + DateToStr(DataInicial) + ''' and ''' + DateToStr(DataFinal) + '''' + ' and ml_tipo = ''' + eML_TIPO_PAGAMENTO + '''' + ' and ml_situacao = ''' + eML_SITUACAO_NORMAL + '''' + ' order by ml_data '; dm.DadosAux.sql.Text := vsSQL; vsSQL := StringReplace(vsSQL, '/', '.', [rfReplaceAll, rfIgnoreCase]); dm.DadosAux.open; Result := dm.DadosAux.FieldByName('ml_saldo').AsCurrency; end; Chamando a função usei: eML_SITUACAO_NORMAL:='N'; //Apenas para efeito de teste eML_TIPO_PAGAMENTO:='X'; //Apenas para efeito de teste ShowMessage(CurrToStr(getSaldoAnteriorMensalista(1,DateTimePicker1.Date,DateTimePicker2.Date)));
12/12/2018
Jucélio Silva
<br />
Testa em mais de uma IDE , já tive caso de querys complexas não executar da forma que eu esperava em uma IDE e na outra rodava certinho, isso ocorre por conta da formatação de datas, não sei qual banco ou formato de data mas DateTime é campeão em me pegar peças no Oracle e no Informix.
12/12/2018
Fernando Wahl
A função estava correta, o problema não pé nela, estava na declaração de variável.
Valeu galera.
Clique aqui para fazer login e interagir na Comunidade :)