Problemas com a distribuição do DBExpress nos clientes.

Delphi

15/10/2004

Olá pessoal,
Estou tentando distribuir uma aplicação nas máquinas clientes, utilizando o DBExpress e o Crystal Report 10. O SO é Windows XP Professional. Na minha máquina está tudo rodando perfeitamente. Mas ao distribuir para uma cliente Windows 2000 apresenta erro faltal, mas isso apenas em uma máquina. Pois também roda no NT e em outras máquina Win2000. Alguém pode me ajudar nesta distribuição? Já coloquei na unit do Data Module Midaslib e Dbexpora, mas não funcionou. O que pode ser??

Hugo


Hcnc

Hcnc

Curtidas 0

Respostas

Gandalf.nho

Gandalf.nho

15/10/2004

Instalou o cliente do banco de dados?


GOSTEI 0
Hcnc

Hcnc

15/10/2004

Ah! Esqueci de mencionar que o banco que uso é o Oracle 9i. E o cliente está instalado em todas as máquinas e funcionando perfeitamente. Outra, os arquivos de dbxconnections.ini e dbxdrivers.ini gravei na pasta system32. E agora??


GOSTEI 0
Vinicius2k

Vinicius2k

15/10/2004

Já coloquei na unit do Data Module Midaslib e Dbexpora, mas não funcionou.

Não faça isso. Distribua as DLLs separadamente, mas pelo q entendi vc já tentou isso ou não ?
A regra é simples :
1. Driver para dbExpress (no seu caso [b:44cef1ceb9]dbexpora.dll[/b:44cef1ceb9]) e [b:44cef1ceb9]midas.dll[/b:44cef1ceb9] no system/system32 do Windows.
2. Registrar a midas como dll compartilhada/sistema com a execução de :
[b:44cef1ceb9]regsvr32 midas.dll[/b:44cef1ceb9]

Fora isso, a tendencia é que não seja um problema de distribuição da aplicação com dbExpress...
Pode ser como a gandalf falou do cliente do banco de dados (Oracle) na estação ou em relação ao Cristal mas quanto à estes dois, não saberia lhe informar se alguma instalação ou registro adicional seria necessário.

T+


GOSTEI 0
Vinicius2k

Vinicius2k

15/10/2004

Outra, os arquivos de dbxconnections.ini e dbxdrivers.ini gravei na pasta system32.

Não trabalho com conexões nomeadas para não ter que distribuir estes arquivos, mas o local correto para eles é na pasta da aplicação, afinal, uma estação pode ter mais de uma aplicação usando dbExpress, e a instalação deles no system não seria a ideal.

T+


GOSTEI 0
Hcnc

Hcnc

15/10/2004

Valeu cara!
Mas não entendi o que fazer, quando vc falou em :
´Registrar a midas como dll compartilhada/sistema com a execução de :
regsvr32 midas.dll´

Registrar por que?


GOSTEI 0
Vinicius2k

Vinicius2k

15/10/2004

Este registro informa ao Windows que a midas é uma DLL usada por outras aplicações e que suas funcionalidades devem estar disponíveis...
Em geral, isso não é necessário, mas é bom para evitar problemas de carregamento dela pela aplicação, como ´Could not load midas.dll´ ou ´Error loading midas.dll´...

T+


GOSTEI 0
Rômulo Barros

Rômulo Barros

15/10/2004

Este registro informa ao Windows que a midas é uma DLL usada por outras aplicações e que suas funcionalidades devem estar disponíveis... Em geral, isso não é necessário, mas é bom para evitar problemas de carregamento dela pela aplicação, como ´Could not load midas.dll´ ou ´Error loading midas.dll´... T+


Uau !!! Como é bom ler comentários. Está aí mais uma q eu não sabia. Mas, apareceu uma dúvida:

:?: [color=blue:6fecfe86a0]Após registrar minha dll, vamos supor q eu não queira mais esta dll compartilhada. Como faço para desregistrá-la ou descompartilhar a mesma?[/color:6fecfe86a0]


GOSTEI 0
Carval

Carval

15/10/2004

Coloque no uses de sua aplicação:

Uses DbExpora, Mida;

Isso resolve o problema da distribuição pois as Dlls serão incorporadas ao executável.


GOSTEI 0
Vinicius2k

Vinicius2k

15/10/2004

[quote:cb4edde2e8=´Undeclared Identifier´]Após registrar minha dll, vamos supor q eu não queira mais esta dll compartilhada. Como faço para desregistrá-la ou descompartilhar a mesma?[/quote:cb4edde2e8]
[b:cb4edde2e8]regsvr32 /u midas.dll[/b:cb4edde2e8], realiza o ´unregister´ da DLL

Coloque no uses de sua aplicação: Uses DbExpora, Mida; Isso resolve o problema da distribuição pois as Dlls serão incorporadas ao executável.

Resolve o problema de distribuição e cria outros. Essa incorporação, apesar de ser possível, não é recomendada e não deve ser feita.

T+


GOSTEI 0
Rômulo Barros

Rômulo Barros

15/10/2004

:arrow: [b:89284e761b]Valeu, Vina2k !!!![/b:89284e761b]


GOSTEI 0
Hcnc

Hcnc

15/10/2004

Vinícius,
Por que não é acoselhado incluir o DBExpora e Midas na unit do Data Module.


GOSTEI 0
Vinicius2k

Vinicius2k

15/10/2004

Bem, já li e vi várias situações de erros ´inexplicáveis´ quando se faz esta inclusão... pelo que ouvi dizer -- não comprovei, o problema foi solucionado no Delphi 7, mas prefiro não arriscar...
Outro detalhe é que tanto a midas quanto o driver, podem sofrer -- e sofrem atualizações nos Service Packs do Delphi, se vc incorporá-los aos projetos, teria que recompilá-los, ao invés de apenas redistribuir as DLLs ou enviar aos clientes as novas versões...
Além disso, na minha opinião, fere o próprio conceito da função de uma DLL que é compartilhar os mesmos recursos entre aplicações diferentes... vc pode ter mais de uma aplicação rodando sobre a mesma arquitetura e estaria ´engordando´ desnecessariamente todos os .exe...

T+


GOSTEI 0
Michaell

Michaell

15/10/2004

Não trabalho com conexões nomeadas para não ter que distribuir estes arquivos, mas o local correto para eles é na pasta da aplicação, afinal, uma estação pode ter mais de uma aplicação usando dbExpress, e a instalação deles no system não seria a ideal. T+


Poderia explicar como seria a configuração de conexões não nomeadas com o SQLConnection?

[]´s


GOSTEI 0
Vinicius2k

Vinicius2k

15/10/2004

Poderia explicar como seria a configuração de conexões não nomeadas com o SQLConnection?

Michaell,

- Informe apenas a propriedade [b:187af6814b]DriverName[/b:187af6814b] no TSQLConnection que as propriedades [b:187af6814b]GetDriverFunc, LibraryName e VendorLib[/b:187af6814b] deverão ser preenchidas automaticamente.
- Ajuste a propriedade [b:187af6814b]LoadParamsOnConnect[/b:187af6814b] para [b:187af6814b]False[/b:187af6814b].
- Neste ponto vc poderá deixar os parametros da SQLConnection fixos ou dinamicos. Se desejar deixá-los dinamicos, crie seu próprio arquivo .ini com os parametros que deseja passar em tempo de execução, por exemplo :
[Banco]
Database=<caminho do banco>
User_Name=<usuario>
Password=<senha>

E antes de conectar, leia este arquivo .ini atribuindo os valores dos parametros para o TSQLConnection :
with SQLConnection1 do
begin
  Params.Values[´Database´]:=  ArquivoINI.ReadString(´Banco´,´Database´ ,´´);
  Params.Values[´User_name´]:= ArquivoINI.ReadString(´Banco´,´User_name´,´´);
  Params.Values[´Password´]:=  ArquivoINI.ReadString(´Banco´,´Password´ ,´´);
end;


Blz?

T+


GOSTEI 0
Rômulo Barros

Rômulo Barros

15/10/2004

[quote:a45f52fd1d=´Michaell´]Poderia explicar como seria a configuração de conexões não nomeadas com o SQLConnection?

Michaell,

- Informe apenas a propriedade [b:a45f52fd1d]DriverName[/b:a45f52fd1d] no TSQLConnection que as propriedades [b:a45f52fd1d]GetDriverFunc, LibraryName e VendorLib[/b:a45f52fd1d] deverão ser preenchidas automaticamente.
- Ajuste a propriedade [b:a45f52fd1d]LoadParamsOnConnect[/b:a45f52fd1d] para [b:a45f52fd1d]False[/b:a45f52fd1d].
- Neste ponto vc poderá deixar os parametros da SQLConnection fixos ou dinamicos. Se desejar deixá-los dinamicos, crie seu próprio arquivo .ini com os parametros que deseja passar em tempo de execução, por exemplo :
[Banco]
Database=<caminho do banco>
User_Name=<usuario>
Password=<senha>

E antes de conectar, leia este arquivo .ini atribuindo os valores dos parametros para o TSQLConnection :
with SQLConnection1 do
begin
  Params.Values[´Database´]:=  ArquivoINI.ReadString(´Banco´,´Database´ ,´´);
  Params.Values[´User_name´]:= ArquivoINI.ReadString(´Banco´,´User_name´,´´);
  Params.Values[´Password´]:=  ArquivoINI.ReadString(´Banco´,´Password´ ,´´);
end;


Blz?

T+[/quote:a45f52fd1d]

Legal, Vina2k !!!! Já utilizei o método descrito por vc, mas não seria melhor utilizar o [b:a45f52fd1d]´LoadParamsFromIniFile(´dbxconnections.ini´)´ ?[/b:a45f52fd1d]

:wink: [color=red:a45f52fd1d]Valeu !!!![/color:a45f52fd1d]


GOSTEI 0
Vinicius2k

Vinicius2k

15/10/2004

[quote:679aa435f0=´Undeclared Identifier´]Legal, Vina2k !!!! Já utilizei o método descrito por vc, mas não seria melhor utilizar o [b:679aa435f0]´LoadParamsFromIniFile(´dbxconnections.ini´)´ ?[/b:679aa435f0][/quote:679aa435f0]
Bem, é mais simples, mas vc pode não querer informar todos os parametros ou usar para a conexão do banco o mesmo .ini da aplicação, ou (como eu faço) salvar o parametro ´Password´ criptografado no .ini...
Desta forma, acho mais flexível o uso do próprio .ini lido ´manualmente´.

:wink:

T+


GOSTEI 0
Rômulo Barros

Rômulo Barros

15/10/2004

:arrow: [b:a782512cc5]Agora ficou explicado !!!![/b:a782512cc5]

:idea: Brigadão, Vina !!! e vê se aparece no MSN

:wink: :wink: :wink:


GOSTEI 0
POSTAR