MultithreadingFireDAC icon indicating copy to clipboard operation
MultithreadingFireDAC copied to clipboard

TFDPhysDriverLink.VendorHome Oracle como Atribuir

Open Alyssonpp opened this issue 1 year ago • 6 comments

Primeiro parabenizar pela iniciativa. Assim todos ganham com mais conhecimento adquirido e assim melhorando seus projetos.

Gostaria se possível claro, no meu ambiente estou utilizando Oracle, e necessito no meu ambiente informar a proprietada VendorHome do componente TFDPhysOracleDriverLink

FDPhysOracleDriverLink1.VendorHome:= 'OraClient19Home1';

se isso nao for informado ocorre essa mensagem de erro

image

como faço para passar isso no ConnectionDBConfig, por que cheguei ate preencher o exemplo que vc tem no trexo:

edtDriverDefName.Text, //NOME DA CONFI DO DRIVER - [OPCIONAL] - IDENTIFICAÇÃO DO DRIVER, USADO NA CONFIGURAÇÃO DA CONEXÃO FDPhysFBConnectionDefParams.DriverID procedure(FDStanDefinition: IFDStanDefinition) //PARAMETRIZAÇÃO DO DRIVER COM O BANCO DE DADOS - [OPCIONAL] begin FDStanDefinition.AsString['BaseDriverID'] := 'FB'; //DRIVER BASE DO FIREDAC

  //DEFINE O LOCAL DA DLL CLIENT DO FIREBIRD.
  FDStanDefinition.AsString['VendorHome'] := edtDriverVendorHome.Text; //https://docwiki.embarcadero.com/Libraries/Sydney/en/FireDAC.Phys.TFDPhysDriverLink.VendorHome

  //DEFINE O NOME DA DLL CLIENT DO FIREBIRD.
  FDStanDefinition.AsString['VendorLib'] := edtDriverVendorLib.Text; //https://docwiki.embarcadero.com/Libraries/Sydney/en/FireDAC.Phys.TFDPhysDriverLink.VendorLib
end,

Neste trecho mencionado tem a parte VendorHome mais mesmo passando não funciona, como contorno, criei um DataModule e dentro dele coloquei o componente e atribui a informação, mais fica estranho desta maneira..

se vc tiver algum orientação agradeço.

Alyssonpp avatar Apr 01 '24 23:04 Alyssonpp

Acabei desconbrindo o problema deverá preencher assim: o trecho:

'Ora', //NOME DA CONFI DO DRIVER - [OPCIONAL] - IDENTIFICAÇÃO DO DRIVER, USADO NA CONFIGURAÇÃO DA CONEXÃO FDPhysFBConnectionDefParams.DriverID procedure(FDStanDefinition: IFDStanDefinition) //PARAMETRIZAÇÃO DO DRIVER COM O BANCO DE DADOS - [OPCIONAL] begin FDStanDefinition.AsString['BaseDriverID'] := 'Ora'; //DRIVER BASE DO FIREDAC

  //DEFINE O LOCAL DA DLL CLIENT DO FIREBIRD.
  FDStanDefinition.AsString['VendorHome'] := TConstantes.OracleVendorHome; //https://docwiki.embarcadero.com/Libraries/Sydney/en/FireDAC.Phys.TFDPhysDriverLink.VendorHome

  //DEFINE O NOME DA DLL CLIENT DO FIREBIRD.
  //FDStanDefinition.AsString['VendorLib'] := edtDriverVendorLib.Text; //https://docwiki.embarcadero.com/Libraries/Sydney/en/FireDAC.Phys.TFDPhysDriverLink.VendorLib
end,

Alyssonpp avatar Apr 01 '24 23:04 Alyssonpp

Boa tarde @Alyssonpp, tudo certo?

Obrigado pelo feedback, eu nunca trabalhei com Oracle, mas acredito que a configuração seja igual para todos os bancos homologados pela Embarcadero.

Uma dúvida, essa configuração que tu está usando é uma variável de ambiente e qual a arquitetura(32/64 bits) da instalação do Oracle?

FDPhysOracleDriverLink1.VendorHome:= 'OraClient19Home1';

antoniojmsjr avatar Apr 03 '24 17:04 antoniojmsjr

Sim isso ocorre.. por que eu tenho os dois client do oracle 19 em 32 e 64bits, mas aqui so esta exigindo no ambiente de desenvolvimento.. em ambiente produção o sistema sozinho conecta na versao correta.. me parece que algo do delphi do IDE que acaba nao resolvendo sem informar. Mas so é necessario o VendorHome nada mais

Alyssonpp avatar Apr 04 '24 01:04 Alyssonpp

Sim isso ocorre.. por que eu tenho os dois client do oracle 19 em 32 e 64bits, mas aqui so esta exigindo no ambiente de desenvolvimento.. em ambiente produção o sistema sozinho conecta na versao correta.. me parece que algo do delphi do IDE que acaba nao resolvendo sem informar. Mas so é necessario o VendorHome nada mais

A IDE do Delphi é 32bits, neste caso tu vai precisar usar as DLL's desta arquitetura, por exemplo:

https://github.com/antoniojmsjr/MultithreadingFireDAC/assets/20980984/9b308e12-b3b2-458a-b145-3be1fe77f0d7

Em runtime tu pode conectar no Oracle usando as DLL's na pasta do executável ou informando no parâmetro VendorLib o caminho da DLL oci.dll.

O parâmetro VendorHome só consegui usar se o Oracle está instalado no PC informando o SID.

Para acesso remoto eu usei as configurações:

lFDPhysOracleConnectionDefParams.UserName := 'SYSTEM'; lFDPhysOracleConnectionDefParams.Password := '123456'; lFDPhysOracleConnectionDefParams.Database := 'VM-WIN10-000:1521/XE';

usando as DLL's na past do executável.

Essa foi a minha primeira experiência usando Oracle, rsrsrs

antoniojmsjr avatar Apr 04 '24 21:04 antoniojmsjr

Uma curiosidade, usando o exemplo MultithreadingFireDAC.dproj para testar as conexões com o Oracle, se eu executar muitas requisições sequidas executando um comando SQL é gerado o seguinte erro : [FireDAC][Phys][Ora] ORA-12516: TNS:listener could not find available handler with matching protocol stack.

Mas se eu ativar o pool de conexões o erro não acontece, tu sabe qual o limite de conexões que o Oracle suporta ao mesmo tempo? @Alyssonpp

antoniojmsjr avatar Apr 04 '24 21:04 antoniojmsjr

o Oracle de fato é mundo a parte.. ele tem muitas configurações e ele tem limites de cursores que são definidos no padrão da instalação, certamente estourou esse limite padrão e tem que ser aumentado, normalmente aqui quando ocorre algo a isso recorremos ao DBA que é especializado para acompanhar e acertar esses valores, mais de fato o Oracle tem essas particularidades., complementando o outro tramite so utilizo oracle aqui, no meu ambiente em nenhum caso foi necessario colocar as DLLs, simplesmente instala-se o client Oracle 32 ou 64bits e aponta usuário, senha e database e funciona de boa.

Alyssonpp avatar Apr 10 '24 17:04 Alyssonpp