Query em DLL - Qual retorno??
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??
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
Curtidas 0
Respostas
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?
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
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
19/02/2011
UP! ...
GOSTEI 0
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;
Result := DM.sp_TodasAsCores.DataSource;
GOSTEI 0
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...?
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
19/02/2011
Up ...
GOSTEI 0
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
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
19/02/2011
Amigo não da erro porem o DBGrid continua em branco...
GOSTEI 0
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
19/02/2011
me add no msn: thepowerofgod@msn.com
GOSTEI 0
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
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
Não esuqeça do Exports
na Aplicação defina
e na Implementation façã
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
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;procedure MostraNome (dataSource: TDataSource);stdcall external 'BancoDados.DLL';
MostraNome(DataSource1);
GOSTEI 0
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...
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
19/02/2011
Mandei para vc o projeto via email
Aqui esta funcionando
GOSTEI 0