Query em DLL - Qual retorno??

Delphi

19/02/2011

tenho uma query que esta dentro de uma dll e é executada sem problemas...

eis o codigo dela:

Código: function MostraCores : TDataSource;
begin
  ConectaBanco;
  with DM.sp_TodasAsCores do
  begin
    Connection := ConectaBanco;
    Close;
    ProcedureName := 'sp_TodasAsCores';
    Open;
    ShowMessage('total de registros é: '+ IntToStr(RecordCount));
    Result := DM.sp_TodasAsCores.DataSource;
  end;
end;
como viram coloquei ate um ShowMessage dentro dela para ter certeza que esta retornando algo... e o DataSource que ela esta retornando esta ligado a minha SP no meu DM... so que na minha aplicação nao recebe os dados... sera que estou colocando o tipo de retorno errado na função...???

na minha aplicação esta assim o codigo:


Código:   DBGrid.DataSource := MostraCores;

alguem pode me ajudar nesse problema??


Leonardo Silva

Leonardo Silva

Curtidas 0

Respostas

Leonardo Xavier

Leonardo Xavier

19/02/2011

Ola leonardo!


     Tudo bem? Bom tive dando uma pesquizada aqui, sobre o seu problema, e fiquei pensando aqui, não fiz uma dll aqui pois nao tenho muito tempo para isso agora, mas com toda certeza vou fazer isso, achei interesante colocar as consultas em dll. bom mas vendo o seu problema...em sua aplicação o comando de dentro de sua funçao na dll ou seja o "ShowMessage('total de registros é: '+ IntToStr(RecordCount));" é apresentado em sua aplicação? ou não aparece a mensagem?
GOSTEI 0
Leonardo Silva

Leonardo Silva

19/02/2011

ola amigo...   sim o showmessage ocorre dentro da DLL e apresenta sem problemas...   o que deveria acontecer e na minha aplicação principal que o dbgrid fica em branco...   mas nao ocorre erro nenhum talvez o retorno da função da dll que tenha que ser diferente...   mas ve ae se vc consegue axar alguma explicação pois esse fim de semana pesquise pra caramba e nada...
GOSTEI 0
Leonardo Silva

Leonardo Silva

19/02/2011

UP!                                   ... 
GOSTEI 0
Leonardo Xavier

Leonardo Xavier

19/02/2011

tive olhando seu código agora, o seu datasource tem este nome mesmo (em vermelho)?

Result := DM.sp_TodasAsCores.DataSource;
GOSTEI 0
Leonardo Silva

Leonardo Silva

19/02/2011

Na realidade esse datasource é uma propriedade da sp_TodasAsCores. mas eu ja coloquei no Result da função um DataSource que esta ligado a minha Sp, mas mesmo assim nao da certo...

novamente eu pergunto sera que o retorno tem que ser de outro tipo para popular o DBGrid na minha aplicação??

ou é isso mesmo...?
GOSTEI 0
Leonardo Silva

Leonardo Silva

19/02/2011

Up         ...
GOSTEI 0
Marco Salles

Marco Salles

19/02/2011

hummm   Vejo que vc ja tentou esta mesma duvida em outro forum     troque a sua function por uma procedure ..   Da seguinte forma   procedure MostraCores(datasource:DataSource);stdcall;   Na implementação da sua Procedure MostraCores , vc tem que atribuir   datasource.DataSet:=AquiVcTemQueColocarODataSetQueCOntemOsDados   Não esqueça de exportar .. exports
MostraCores,   Vamos agora para a Aplicação ...   procedure MostraCores(datasource:TDataSource);stdcall external 'NomeDaSuaDll.dll';   coloque a dll no mesmo diretotio da aplicação   Agora coloque um DataSource e Ligue este DataSource ao DbGrid   e chame assim   MostraCores(SeuDataSource);   claro que o dbgrid tem que esta linkado com o SeuDataSource    
GOSTEI 0
Leonardo Silva

Leonardo Silva

19/02/2011

Amigo não da erro porem o DBGrid continua em branco...
GOSTEI 0
Marco Salles

Marco Salles

19/02/2011

me passa o poojeto Exemplo , pode ser com a tabela employee mesmo tenho certeza que dá certo sim .
GOSTEI 0
Leonardo Silva

Leonardo Silva

19/02/2011

me add no msn:  thepowerofgod@msn.com
GOSTEI 0
Marco Salles

Marco Salles

19/02/2011

me add no msn:  thepowerofgod@msn.com
vai por email , o meu msn não rebe arquivos .. Tem que configurar meu antivirus e ele pega tudo não deixa passar nada   salhamoda@uol.com.br  
GOSTEI 0
Marco Salles

Marco Salles

19/02/2011

Vc esta usando AdoQuery .. Sei nada de AdoQuery . Proponho uma solução com AdoQuery + ClientDatSet Mas antes vmaos mostrar os dados na aplicação   Na Dll  
procedure  MostraNome(DataSource :TDataSource);stdcall;
begin
  if not Assigned(DM) then
     DM := TDM.Create(nil);
  Dm.Conexao.Connected:=false;
  with DM.ADOQuery1 do
  begin
    close;
    Sql.Clear;
    SQL.Add('select * from cliente');
     open;
    ShowMessage('total de registros é: '+ IntToStr(RecordCount));
  end;
   dataSource.DataSet:=dm.ADOQuery1;
end;
  Não esuqeça do Exports   na Aplicação defina  
procedure MostraNome (dataSource: TDataSource);stdcall external 'BancoDados.DLL';
  e na Implementation façã  
MostraNome(DataSource1);
  basicamente é aqulio que lhe passei , qnd disse em tópicos anteirores ( utilizar a Procedure).. Mas verifiquei que vc não tinha definido nen a Directiva stdcall; na Dll e ne a directiva  external 'BancoDados.DLL'; na Aplicação   Mas com eu disse , não sei nada dessa tecnologia , qnd cliquei na grid , logo deu erro ( afinal não sei onde estção esses dados ) Lgo partir para coloca-lo em memoria .. Mas no primerio teste ele apresentou os dados na aplicação O proximo passo é estender o exemplo para utilizar o AdoQuery+clientDataSet
 
GOSTEI 0
Leonardo Silva

Leonardo Silva

19/02/2011

aqui continua dando erro... mas ele parece ter abrido o banco pois agora mostra os titulos das colunas no dbgrid...

a minha pergunta é, sera que realmente existe a possibilidade dessa combinação? pq na realidade nao vou usar nem query vou usar Stored Procedures (ADO) na minha aplicação... mais o conceito é o mesmo das querys....

to quase pra desistir ja tentei de tudo e nada...
GOSTEI 0
Marco Salles

Marco Salles

19/02/2011

Mandei para vc o projeto via email   Aqui esta funcionando
GOSTEI 0
POSTAR