GARANTIR DESCONTO

Fórum Retorna um ClientDataSet #350920

21/12/2007

0

Boa Noite a todos, eu estou montando uma função que deverá retornar um ClientDataset só que não estou conseguindo. Segue a função que criei, se vocês puder verificar onde estou errando eu fico grato.

Function RetornDados_CPGREC(iCPRCOD :Integer;
sCodigoEmpresa :String;
iTipoRegistro :Integer;
Var dDataSet :TDataSet ) : Boolean ;

Grato pela atenção


Sergiowilson.sp

Sergiowilson.sp

Responder

Posts

21/12/2007

Giordanocwb

O cabeçalho da função está correto, qual o seu problema??

Usar a função, ou está dando erro dentro da função??

Coloque o código de chamada e o código da função que fica mais fácil identificar o problema.

T+


Responder

Gostei + 0

21/12/2007

Aasn

Olá giordanocwb,

pelo visto essa sua função só irá retornar True ou False não o ClientDataSet como você deseja.

o correto seria mais ou menos assim:

Function RetornDados_CPGREC(iCPRCOD :Integer;
sCodigoEmpresa :String;
iTipoRegistro :Integer;
Var dDataSet :TDataSet ) : TClientDataSet;

além do corpo da função é claro...


[]´s
AASN


Responder

Gostei + 0

22/12/2007

Micheus

Segue a função que criei, se vocês puder verificar onde estou errando eu fico grato.
Function RetornDados_CPGREC(iCPRCOD :Integer;
                            sCodigoEmpresa :String;
                            iTipoRegistro :Integer;
                            Var dDataSet :TDataSet ) : Boolean ;

[b:74269f4c6a]sergiowilson.sp[/b:74269f4c6a], como o colega [b:74269f4c6a]giordanocwb[/b:74269f4c6a] disse, o cabeçalho da função está correto. Faltou vc por o código dentro caso seja onde ocorre o tal erro.
Este erro é de compilação? Se for, vc teria declarado na cláusula uses as units DB (para TDataSet) e DBClient (para TClientDataSet)?

Ou ainda, poderia ser um erro como: [i:74269f4c6a]Type of actual and formal var parameters must be identical[/i:74269f4c6a]
O que parece razoável já que vc fala em retornar ClientDataSet, mas seu parâmetro está declara como TDataSet. Assim, ao tentar passar como parâmetro uma variável do TClientDataSet, vc receberá este erro de compilação.
Se for este o caso, apenas mude a declaração para um TClientDataSet (ou o tipo do dataset que vc deseja realmente trabalhar)

Ou seria erro de execução?

Sempre que quiser auxílio quanto a um suposto erro, seria pelo menos interessante que vc postasse a mensagem de erro original. ;)

pelo visto essa sua função só irá retornar True ou False não o ClientDataSet como você deseja.
[b:74269f4c6a]AASN[/b:74269f4c6a], na verdade a função dele tem potencial para fazer o que ele quer sim. Desde que ela esteja funcionando corretamente.
Ele pode sim retornar o DataSet e ainda o resultado booleano. Veja um exemplo ilustrativo:
uses
  DB, DBClient;
...
function RetornDataSet(SQLCommand :string;
                       var dDataSet :TDataSet) :Boolean;
begin
  dDataSet := TClientDataSet.Create(nil);
  with dDataSet as TClientDataSet do
  begin
    CommandText := SQLCommand;
    try
      Active := True;
      Result := True;
    except
      Result := False;
      FreeAndNil(dDataSet)
    end;
  end;
end;

procedure TForm1.BtnSomaClick(Sender :TObject);
var
  Soma :Double;
  DataSet :TClientDataSet;
begin
 // se for manter a função com TDataSet, 
 // tem que fazer o typecast aqui
  if RetornDataSet(´Select * from teste´, TDataSet(DataSet)) then
  try
    while not DataSet.EOF do
    begin
      Soma := Soma +DataSet.FieldByName(´CampoX´).AsFloat;
      DataSet.Next;
    end;
  finally
    FreeAndNil(DataSet);
  end
end;


Abraços


Responder

Gostei + 0

23/12/2007

Sergiowilson.sp

Obrigado pelo auxilio de todos, vou corrigir o meu código, assim que testá-lo novamente postarei o resultado.
Não tenho muita intimidade com Delphi, a linguagem com a qual trabalho profissionalmente é o Cobol, dá pra sentir a diferença, né !
Obrigado pela força !


Responder

Gostei + 0

25/12/2007

Aasn

Olá micheus,

AASN, na verdade a função dele tem potencial para fazer o que ele quer sim. Desde que ela esteja funcionando corretamente. Ele pode sim retornar o DataSet e ainda o resultado booleano. Veja um exemplo ilustrativo:


No caso do seu exemplo ilustrativo, ele não está retornando um DataSet novo, ele está trabalhando com um DataSet passado por referencia, mas que já existia antes da chamada a função, diferentemente da minha sugestão no post.

Abraço,
AASN


Responder

Gostei + 0

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

Aceitar