Fórum Retorna um ClientDataSet #350920
21/12/2007
0
Function RetornDados_CPGREC(iCPRCOD :Integer;
sCodigoEmpresa :String;
iTipoRegistro :Integer;
Var dDataSet :TDataSet ) : Boolean ;
Grato pela atenção
Sergiowilson.sp
Curtir tópico
+ 0Posts
21/12/2007
Giordanocwb
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+
Gostei + 0
21/12/2007
Aasn
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
Gostei + 0
22/12/2007
Micheus
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. ;)
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
Gostei + 0
23/12/2007
Sergiowilson.sp
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 !
Gostei + 0
25/12/2007
Aasn
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)