Tem como exportar uma conexão de uma DLL?
Olá amigos, na minha tentativa de implementar módulos, estive pensando,:
[b:900cd1c197]É possível eu criar uma DLL, com os meios de conexão, somente conexão (nada de Query e tals, somente SocketConnection) e depois eu exportar essa conexão? [/b:900cd1c197]
Tipo, não tem o Exports lá da DLL? então eu exportando essa conexão, meus aplicativos poderia ´ve-la´ sem problemas..
isso é posível?
Desde já agradeço
[b:900cd1c197]É possível eu criar uma DLL, com os meios de conexão, somente conexão (nada de Query e tals, somente SocketConnection) e depois eu exportar essa conexão? [/b:900cd1c197]
Tipo, não tem o Exports lá da DLL? então eu exportando essa conexão, meus aplicativos poderia ´ve-la´ sem problemas..
isso é posível?
Desde já agradeço
Titanius
Curtidas 0
Respostas
Carlosfim
08/09/2005
Titanius,
Eu resolveria o problema da seguinte forma: Criaria uma função na DLL que, ao ser chamada, retornaria a instância do componente que vc precisa. Ficaria mais ou menos assim:
Depois declararia esta função na seção Exports da DLL. Daí, ao chamar esta função de dentro de seu exe ela retornaria a conexão que vc precisa.
Agora, se existe uma forma de declarar Objetos diretamente na seção Exports de uma DLL, isto eu não sei (Mas acredito que não exista).
Obs: Lembre-se que se vc tiver funções que retornem dados que não sejam de tipos nativos (como a função acima) vc precisa incluir a Uses ShareMem na sua DLL e em todos os programas onde vc for utilizá-la.
Espero ter ajudado.
Eu resolveria o problema da seguinte forma: Criaria uma função na DLL que, ao ser chamada, retornaria a instância do componente que vc precisa. Ficaria mais ou menos assim:
function GetConnection (Parâmetros, se necessário): TSocketConnection;
Depois declararia esta função na seção Exports da DLL. Daí, ao chamar esta função de dentro de seu exe ela retornaria a conexão que vc precisa.
Agora, se existe uma forma de declarar Objetos diretamente na seção Exports de uma DLL, isto eu não sei (Mas acredito que não exista).
Obs: Lembre-se que se vc tiver funções que retornem dados que não sejam de tipos nativos (como a função acima) vc precisa incluir a Uses ShareMem na sua DLL e em todos os programas onde vc for utilizá-la.
Espero ter ajudado.
GOSTEI 0
Titanius
08/09/2005
Valeu CarlosFim pela resposta, você começou a clarear minhas idéias.. :D
Então há a possibilidade, de eu fazer uma conexão na DLL, e usar essa conexao nos meus aplicativops, blz... mas aih, no caso, como eu pegaria essa conexao no lado do aplicativo? pois certamente ela nao ira aparecer no combobox de coenxoes do meu ConnectionBroker :D
[]s
Então há a possibilidade, de eu fazer uma conexão na DLL, e usar essa conexao nos meus aplicativops, blz... mas aih, no caso, como eu pegaria essa conexao no lado do aplicativo? pois certamente ela nao ira aparecer no combobox de coenxoes do meu ConnectionBroker :D
[]s
GOSTEI 0
Carlosfim
08/09/2005
seria mais ou menos assim:
Se você tiver um ConnectionBroker em um formulário não irá precisar declarar uma variável do tipo TConnectionBroker, como listado acima. Basta recuperar a conexão (da DLL) e setar a propriedade Connection do ConnectionBroker.
Realmente ela não aparecerá no Combo, tem que ser feito na mão mesmo.
Até +
function GetConnection (Parâmetros, se necessário): TSocketConnection; stdcall; External MyDll.Dll; ... var Conexao: TSocketConnection; Broker: TConnectionBroker; begin Conexao := GetConexao(...); ... Broker.Connection := Conexao; ... end;
Se você tiver um ConnectionBroker em um formulário não irá precisar declarar uma variável do tipo TConnectionBroker, como listado acima. Basta recuperar a conexão (da DLL) e setar a propriedade Connection do ConnectionBroker.
Realmente ela não aparecerá no Combo, tem que ser feito na mão mesmo.
Até +
GOSTEI 0
Titanius
08/09/2005
Valeu Carlos :lol: :lol:
Voce me deu uma esclarecida boa.. putz.. agora começo a imaginar meu sistema todo em módulos... :D
Só ultima perguntinha: Voce sabe se posso usar essa dll, em pacote .bpl?
[]s
Voce me deu uma esclarecida boa.. putz.. agora começo a imaginar meu sistema todo em módulos... :D
Só ultima perguntinha: Voce sabe se posso usar essa dll, em pacote .bpl?
[]s
GOSTEI 0
Carlosfim
08/09/2005
Rapaz, sei não :cry:
Não sei nada sobre Pacotes. Até estive procurando material sobre o assunto, mas acabei abandonando. Uso somente Dlls para modularizar.
Não sei nada sobre Pacotes. Até estive procurando material sobre o assunto, mas acabei abandonando. Uso somente Dlls para modularizar.
GOSTEI 0
Titanius
08/09/2005
Pior que é mesmo, não se acha nada disso em lugar nenhum, já ouvi dizer que bpl é muito melhor que dll, muito mesmo, mas não tem como mexer, pois não acha nada... agora com dll, já vi problema do tipo de memória e tals...
mas no seu caso, o seus modulos eh modulo completo, tipo, pra cadastro e movimentacao? Funciona sem problemas?
mas no seu caso, o seus modulos eh modulo completo, tipo, pra cadastro e movimentacao? Funciona sem problemas?
GOSTEI 0
Carlosfim
08/09/2005
Hoje ainda não tenho nenhum sistema todo dividido em módulos, mas estou trabalhando para isso. Só que primeiro estou modificando minhas aplicações para OO, para depois separar os objetos em módulos executáveis.
Mas já utilizo módulos para funções comuns entre os softwares. Por exemplo, tenho um módulo que controla o travamento do sistema quando o usuário não paga (trabalho com aluguel). Esse módulo troca informações com minha aplicação, exibe interfaces de usuário, se conecta no banco de dados..., em fim, faz tudo que tem direito, sem problemas.
A única coisa que não gostei é que ainda não descobri uma maneira de abrir um formulário contido em uma DLL como filho do MDIForm da minha aplicação. E isso pra mim é importante, pq todos os meus programas utilizam MDI.
Mas já utilizo módulos para funções comuns entre os softwares. Por exemplo, tenho um módulo que controla o travamento do sistema quando o usuário não paga (trabalho com aluguel). Esse módulo troca informações com minha aplicação, exibe interfaces de usuário, se conecta no banco de dados..., em fim, faz tudo que tem direito, sem problemas.
A única coisa que não gostei é que ainda não descobri uma maneira de abrir um formulário contido em uma DLL como filho do MDIForm da minha aplicação. E isso pra mim é importante, pq todos os meus programas utilizam MDI.
GOSTEI 0
Titanius
08/09/2005
Falou e disse, MDI pra mim é tudo tbm.. me falaram que bpl dá pra fazer... por isso resolvi ir pra ele :D
GOSTEI 0
Martins
08/09/2005
Perguntinha besta perto do dialogo de vcs, mas, vcs poderiam me informar se tem como trabalhar com conexão de banco de dados em DLL ou BPL (material quase não existe mesmo?), tipo colocar um DM dentro de uma DLL ou BPL, se alguém souber favor informar-me, Ok!
Valew :)
Valew :)
GOSTEI 0
Titanius
08/09/2005
Usando os mesmos métodos descritos aqui, acho ser possível sim...
GOSTEI 0
Mmoreira
08/09/2005
Titanius,
Voce conseguiu fazer a exportação da conexão conforme voce perguntou no inicio do seu post?
Eu estive pensando em fazer o mesmo mas ao invez de exportar o SocketConnection eu ja ia logo exportar o SharedConnection.
Se voce tiver conseguido algo da uma luz ai ... pois meu medo maior é de fazer funcionar e depois que tudo tiver pronto começar a dar problemas.
valew
Voce conseguiu fazer a exportação da conexão conforme voce perguntou no inicio do seu post?
Eu estive pensando em fazer o mesmo mas ao invez de exportar o SocketConnection eu ja ia logo exportar o SharedConnection.
Se voce tiver conseguido algo da uma luz ai ... pois meu medo maior é de fazer funcionar e depois que tudo tiver pronto começar a dar problemas.
valew
GOSTEI 0
Thiago Vidal
08/09/2005
cara, eu tenho muita experiência em modularizar o sistema em DLLs e pacotes, e posso dar algumas dicas pra voces:
Se vc exportar a conexão dessa forma, vc precisará usar o ShareMem e o sistema ficará muito lento. para evitar isso, vc pode passar simplesmente o ponteiro para a conexao, e fazer um TypeCast... e MUITO IMPORTANTE, a conexão deve ser destruída no mesmo MM que a criou, ou seja, na DLL. Se vc nào fizer isso, depois de um tempo funcionando aparentemente normal o sistema começa a dar Access Violation na hora que fecha, depois de tudo, e vc nao consegue descobrir o motivo.
Eu também prefiro carregar as DLLs dinamicamente, entao, vou dar algumas funções que eu uso, coloquei as coisas aqui no DataModule, mas podem ver que isso tudo já tem cara para criar uma classe que controle cada modulo do sistema, e uma classe derivada de TObjectList para gerenciar todos de uma vez:
Interface do DataModule:
No implementation:
e na DLL:
lembrando que voce pode ter varias funcoes que retornam varios objetos, com apenas 1 para destrui-los, e para usar, basta passar o nome da funcao, por exemplo, para retornar o TObject da funcao Teste:
daqui a pouco mando código para utilizar forms MDI nas DLLs
Se vc exportar a conexão dessa forma, vc precisará usar o ShareMem e o sistema ficará muito lento. para evitar isso, vc pode passar simplesmente o ponteiro para a conexao, e fazer um TypeCast... e MUITO IMPORTANTE, a conexão deve ser destruída no mesmo MM que a criou, ou seja, na DLL. Se vc nào fizer isso, depois de um tempo funcionando aparentemente normal o sistema começa a dar Access Violation na hora que fecha, depois de tudo, e vc nao consegue descobrir o motivo.
Eu também prefiro carregar as DLLs dinamicamente, entao, vou dar algumas funções que eu uso, coloquei as coisas aqui no DataModule, mas podem ver que isso tudo já tem cara para criar uma classe que controle cada modulo do sistema, e uma classe derivada de TObjectList para gerenciar todos de uma vez:
Interface do DataModule:
uses
Windows, SysUtils, Classes;
type
TDataModule1 = class(TDataModule)
procedure DataModuleCreate(Sender: TObject);
procedure DataModuleDestroy(Sender: TObject);
private
{ Private declarations }
DLL: THandle;
function GetObject(Nome: string): Pointer;
procedure DestroyObject(var Value);
public
{ Public declarations }
end;
No implementation:
procedure TDataModule1.DataModuleCreate(Sender: TObject); begin if FileExists(´MyDll.dll´) then DLL := LoadLibrary(´MyDll.dll´) else raise Exception.Create(´DLL nao encontrada´); end; procedure TDataModule1.DataModuleDestroy(Sender: TObject); begin if (DLL <> 0) then FreeLibrary(DLL); end; procedure TDataModule1.DestroyObject(var Value); var P: procedure(var Value); stdcall; begin @P := GetProcAddress(DLL, ´Destroy´); P(Value); end; function TDataModule1.GetObject(Nome: string): Pointer; var P: function: Pointer; stdcall; begin @P := GetProcAddress(DLL, PChar(Nome)); Result := P; end;
e na DLL:
library Project3;
uses
SysUtils,
Classes;
{$R *.res}
function Teste: Pointer; stdcall;
begin
Result := TObject.Create;
end;
procedure Destroy(var Value); stdcall;
begin
FreeAndNil(Value);
end;
exports
Teste,
Destroy;
begin
end.
lembrando que voce pode ter varias funcoes que retornam varios objetos, com apenas 1 para destrui-los, e para usar, basta passar o nome da funcao, por exemplo, para retornar o TObject da funcao Teste:
procedure TDataModule1.Teste; var Obj: TObject; begin Obj := TObject(GetObject(´Teste´)); try // Utilize o objeto aqui finally DestroyObject(Obj); end; end;
daqui a pouco mando código para utilizar forms MDI nas DLLs
GOSTEI 0
Mmoreira
08/09/2005
Tiago,
Antes de tudo quero agradecer pela atenção!
Deu para entender seu codigo ai com uso de DLL vou até fazer um pequeno demo aqui para aplicar a sua técnica ... mas nestes dias estive procurando pelo assunto e cheguei a conclusao que trabalhar com Packages seria melhor por varios motivos.
Voce disse que tem boa experiencia em trabalhar desta maneria e inclusive com packages ... minha grande duvida hoje é saber se é possivel e como fazer para que um package se comunique com outro. Vou te dar um exemplo:
Tenho uma package: PacotePedido (Onde eu vou ter um cadastro de pedidos := Cabeçalho e itens do pedido) até aqui blz.
O problema: Para que eu monte o cabeçalho do Pedido eu preciso informar para qual cliente eu vou fazer o pedido .. entao eu tenho um outro package: PacoteCliente (onde eu tenho uma tela para localizar o cliente que eu quero e jogar no pedido) Entao o PacotePedido teria que chamar o PacoteCliente ... estando la eu ia procurar meu cliente e depois ia ´enviar´ este cliente selecionado para o PacotePedido.
É possivel fazer isso ??? Como ????
Espero que tenho conseguido passar minha duvida ... caso nao é só falar que tento explicar melhor.
Aguardando!!!
Antes de tudo quero agradecer pela atenção!
Deu para entender seu codigo ai com uso de DLL vou até fazer um pequeno demo aqui para aplicar a sua técnica ... mas nestes dias estive procurando pelo assunto e cheguei a conclusao que trabalhar com Packages seria melhor por varios motivos.
Voce disse que tem boa experiencia em trabalhar desta maneria e inclusive com packages ... minha grande duvida hoje é saber se é possivel e como fazer para que um package se comunique com outro. Vou te dar um exemplo:
Tenho uma package: PacotePedido (Onde eu vou ter um cadastro de pedidos := Cabeçalho e itens do pedido) até aqui blz.
O problema: Para que eu monte o cabeçalho do Pedido eu preciso informar para qual cliente eu vou fazer o pedido .. entao eu tenho um outro package: PacoteCliente (onde eu tenho uma tela para localizar o cliente que eu quero e jogar no pedido) Entao o PacotePedido teria que chamar o PacoteCliente ... estando la eu ia procurar meu cliente e depois ia ´enviar´ este cliente selecionado para o PacotePedido.
É possivel fazer isso ??? Como ????
Espero que tenho conseguido passar minha duvida ... caso nao é só falar que tento explicar melhor.
Aguardando!!!
GOSTEI 0
Thiago Vidal
08/09/2005
Sabe, eu tava até pensando em escrever um artigo pra ClubeDelphi sobre este assunto, mas vou mandar um resumo por aqui mesmo...
Como modularizar sua aplicação em pacotes:
1- Crie o pacote:
Em File/New, selecione Package, isso irá criar um pacote vazio. Em project options (Ctrl+Shift+F11), na guia defina um nome para o pacote, e marque-o com ´Runtime only´, pois este pacote nào será adicionado à IDE do Delphi.
2- Crie novos forms, ou adicione forms já existentes
(não esqueça de removê-los do projeto da aplicação principal depois)
3- Salve tudo, compile, o Delphi provavelmente irá exibir um aviso dizendo que alguns pacotes precisam ser adicionados, apenas dê OK.
4- Crie uma nova aplicação (VCL Forms) ou abra a sua já existente.
6- Para utilizar um form que está no pacote, apenas adicione a Unit em que ele se encontra à sua cláusula Uses..
7- Voce verá que apesar deste form nao ester no seu projeto, se o pacote estiver na mesma pasta, ele vai compilar, pois irá encontrar a DCU e incluí-la no objeto final... DETALHE: Até aqui, você não utiliza o pacote... a DCU do form foi embutida dentro do executável, como se fizesse parte dele, e aqui vem a diferença:
8- No menu ´Component´ selecione ´Install packages´, e na seção ´Build with runtime packages´ ative a CheckBox, que habilitará um Edit logo abaixo, com uma lista de pacotes.
No caso, o objetivo é continuar embutindo TODOS os componentes da VCL no executavel, e deixar separado APENAS o pacote que nós acabamos de criar, portanto, limpe o EDIT, e escreva apenas o nome do seu pacote, SEM o BPL.
9- Pronto, ao compilar denovo, mesmo com a DCU presente, o código do seu form não será embutido no executável, ao executar o programa, ele irá carregar o seu pacote bpl e executá-lo de lá, e você pode comprovar isso, fazendo alterações neste form, e recompilar o seu pacote SEM ALTERAR O PROGRAMA PRINCIPAL, e verá que as alterações estão lá presentes.
Obs: Recomendo que o pacote e o form principal estejam na mesma pasta, ou pelo menos tenham o mesmo DCU output path, para evitar problemas.
Obs 2: Obviamente, você nào poderá ter units com o mesmo nome no projeto principal e no pacote...
Obs 3: Para fazer um pacote se comunicar com outro, basta ir em ´Install Packages´ e habilitar a opção ´Build with Runtime Packages´ onde cada pacote terá o nome do outro digitado no Edit abaixo, e o Executável terá o nome dos 2 pacotes, separados por ponto-e-vírgula.
Bom, acho que é só, bem simples, se alguém se interessar eu fiz um projetinho de exemplo com forms MDI no pacote, basta me enviar um email para thixp.net@gmail.com que eu mando o exemplo.
Boa sorte!
Como modularizar sua aplicação em pacotes:
1- Crie o pacote:
Em File/New, selecione Package, isso irá criar um pacote vazio. Em project options (Ctrl+Shift+F11), na guia defina um nome para o pacote, e marque-o com ´Runtime only´, pois este pacote nào será adicionado à IDE do Delphi.
2- Crie novos forms, ou adicione forms já existentes
(não esqueça de removê-los do projeto da aplicação principal depois)
3- Salve tudo, compile, o Delphi provavelmente irá exibir um aviso dizendo que alguns pacotes precisam ser adicionados, apenas dê OK.
4- Crie uma nova aplicação (VCL Forms) ou abra a sua já existente.
6- Para utilizar um form que está no pacote, apenas adicione a Unit em que ele se encontra à sua cláusula Uses..
7- Voce verá que apesar deste form nao ester no seu projeto, se o pacote estiver na mesma pasta, ele vai compilar, pois irá encontrar a DCU e incluí-la no objeto final... DETALHE: Até aqui, você não utiliza o pacote... a DCU do form foi embutida dentro do executável, como se fizesse parte dele, e aqui vem a diferença:
8- No menu ´Component´ selecione ´Install packages´, e na seção ´Build with runtime packages´ ative a CheckBox, que habilitará um Edit logo abaixo, com uma lista de pacotes.
No caso, o objetivo é continuar embutindo TODOS os componentes da VCL no executavel, e deixar separado APENAS o pacote que nós acabamos de criar, portanto, limpe o EDIT, e escreva apenas o nome do seu pacote, SEM o BPL.
9- Pronto, ao compilar denovo, mesmo com a DCU presente, o código do seu form não será embutido no executável, ao executar o programa, ele irá carregar o seu pacote bpl e executá-lo de lá, e você pode comprovar isso, fazendo alterações neste form, e recompilar o seu pacote SEM ALTERAR O PROGRAMA PRINCIPAL, e verá que as alterações estão lá presentes.
Obs: Recomendo que o pacote e o form principal estejam na mesma pasta, ou pelo menos tenham o mesmo DCU output path, para evitar problemas.
Obs 2: Obviamente, você nào poderá ter units com o mesmo nome no projeto principal e no pacote...
Obs 3: Para fazer um pacote se comunicar com outro, basta ir em ´Install Packages´ e habilitar a opção ´Build with Runtime Packages´ onde cada pacote terá o nome do outro digitado no Edit abaixo, e o Executável terá o nome dos 2 pacotes, separados por ponto-e-vírgula.
Bom, acho que é só, bem simples, se alguém se interessar eu fiz um projetinho de exemplo com forms MDI no pacote, basta me enviar um email para thixp.net@gmail.com que eu mando o exemplo.
Boa sorte!
GOSTEI 0
Mmoreira
08/09/2005
Tiago,
Ja vou logo mandando uma duvida!
Vamos supor que eu tenha o seguinte Package: PacoteCliente e o mesmo esta fazendo uma conexao com um DataModule que esta em um package: PacoteConexao .. até aqui blz
Dai eu precisei adicionar ao meu DataModule um novo ClientDataSet para um novo cadastro em um Pacote qualquer que nao seja o de cadastro de cliente ... Dai eu aciciono o meu ClientDataSet no meu PacoteConexao, compilo o mesmo ... e blz ...
minha duvida é se eu alterando o PacoteConexao vou ter que recompilar todos os pacotes que fazer referencia a ele ???
Deu para pegar minha duvida?
Ja vou logo mandando uma duvida!
Vamos supor que eu tenha o seguinte Package: PacoteCliente e o mesmo esta fazendo uma conexao com um DataModule que esta em um package: PacoteConexao .. até aqui blz
Dai eu precisei adicionar ao meu DataModule um novo ClientDataSet para um novo cadastro em um Pacote qualquer que nao seja o de cadastro de cliente ... Dai eu aciciono o meu ClientDataSet no meu PacoteConexao, compilo o mesmo ... e blz ...
minha duvida é se eu alterando o PacoteConexao vou ter que recompilar todos os pacotes que fazer referencia a ele ???
Deu para pegar minha duvida?
GOSTEI 0
Emerson Nascimento
08/09/2005
teoricamente, somente aquele que fará uso do novo clientdataset.
GOSTEI 0
Thiago Vidal
08/09/2005
Então, um grande problema que aparece quando você usa pacotes, é a dúvida de ´quando recompilar tudo´.
Eu uso um critério simples:
Se a alteração que você fez, foi apenas a seção ´Implementation´, voce precisa recompilar apenas o pacote.
Se a alteração foi na seção ´Interface´, aí depende: Se não for referenciar esta alteração de outro lugar, não precisa recompilar, agora, se for usar, precisa.
Por exemplo: Supondo que voce tenha um form, e adiciona um botao. vai alterar a Interface. Se voce apenas quiser colocar um codigo de evento OnClick para este botao, então é só recompilar o pacote. Agora, se voce quiser, a partir da aplicação principal, alterar o Caption, ou o Enabled deste botão, então obviamente, precisa compilar tudo.
O mesmo para o ClientDataSet, ou qualquer outro componente.
Funciona em 90¬ das vezes, mas na dúvida, não custa recompilar tudo quando for liberar um release candidate pro cliente.
Como tem muita gente me mandando email pedindo o projeto, coloquei no meu disco virtual na UOL no enderenço:
http://thixp.discovirtual.uol.com.br/disco_virtual/devmedia/Modulos.zip
Queria um feedback de vocês, pra saber se ajudou, se ficou alguma dúvida, no que eu puder ajudar, tamos aí!
Eu uso um critério simples:
Se a alteração que você fez, foi apenas a seção ´Implementation´, voce precisa recompilar apenas o pacote.
Se a alteração foi na seção ´Interface´, aí depende: Se não for referenciar esta alteração de outro lugar, não precisa recompilar, agora, se for usar, precisa.
Por exemplo: Supondo que voce tenha um form, e adiciona um botao. vai alterar a Interface. Se voce apenas quiser colocar um codigo de evento OnClick para este botao, então é só recompilar o pacote. Agora, se voce quiser, a partir da aplicação principal, alterar o Caption, ou o Enabled deste botão, então obviamente, precisa compilar tudo.
O mesmo para o ClientDataSet, ou qualquer outro componente.
Funciona em 90¬ das vezes, mas na dúvida, não custa recompilar tudo quando for liberar um release candidate pro cliente.
Como tem muita gente me mandando email pedindo o projeto, coloquei no meu disco virtual na UOL no enderenço:
http://thixp.discovirtual.uol.com.br/disco_virtual/devmedia/Modulos.zip
Queria um feedback de vocês, pra saber se ajudou, se ficou alguma dúvida, no que eu puder ajudar, tamos aí!
GOSTEI 0
Thiago Vidal
08/09/2005
desculpem, esqueci de dizer, a senha para baixar é devmedia
GOSTEI 0
Mmoreira
08/09/2005
Thiago,
Brother seguindo as dicas que voce deu neste post estou tendo o seguinte problema:
Criei o package: PackageCliente e no mesmo adicionei a Unit do meu Form de Cadastro de Cliente. Este cadastro de cliente precisa ser ligado no meu DataModulo entao o packge exige que eu adicione o DataModulo nele tambem ... tudo bem eu fiz isso, compilei e tudo funciona ... mas daqui para frente vem meu problema.
Quando eu adiciono um ClientDataSet no meu DataModulo e tento acessar o mesmo de um outro form eu não consigo de maneira alguma, é como se o novo ClientDataSet nao existisse no DataModulo depois de tanto quebrar a cabeça com isso eu fui la compilei o PackgeCliente e pronto o no ClientDataSet que eu falei passou a ser enchergado pela aplicação ...
Esse é meu medo sempre que adicionar algo ao projeto que esteja vinculado a algum packge eu tenha que sair recompilando todos os packages .. isso seria impossivel de fazer pois eu teria muitos packages para recompilar.
E ai cara isso que aconteceu foi porque eu fiz algo errado ou o procedimento é este mesmo de ter que recompilar tudo?
No aguardo!
Brother seguindo as dicas que voce deu neste post estou tendo o seguinte problema:
Criei o package: PackageCliente e no mesmo adicionei a Unit do meu Form de Cadastro de Cliente. Este cadastro de cliente precisa ser ligado no meu DataModulo entao o packge exige que eu adicione o DataModulo nele tambem ... tudo bem eu fiz isso, compilei e tudo funciona ... mas daqui para frente vem meu problema.
Quando eu adiciono um ClientDataSet no meu DataModulo e tento acessar o mesmo de um outro form eu não consigo de maneira alguma, é como se o novo ClientDataSet nao existisse no DataModulo depois de tanto quebrar a cabeça com isso eu fui la compilei o PackgeCliente e pronto o no ClientDataSet que eu falei passou a ser enchergado pela aplicação ...
Esse é meu medo sempre que adicionar algo ao projeto que esteja vinculado a algum packge eu tenha que sair recompilando todos os packages .. isso seria impossivel de fazer pois eu teria muitos packages para recompilar.
E ai cara isso que aconteceu foi porque eu fiz algo errado ou o procedimento é este mesmo de ter que recompilar tudo?
No aguardo!
GOSTEI 0