Fórum MultiCamadas com Firebird #4578
16/04/2009
0
Edson Almeida
Curtir tópico
+ 0Posts
24/04/2009
Devmedia
provavelmente vc realmente não está programando errado, pois se funcionava com o MSSQL teoricamente teria que funcionar também. Eu não usei ainda o Firebird 2.1.1, em minhas aplicações eu uso ainda o Firebird 1.5, que para mim é o mais estável, recomendo que faça testes com esta versão.
Uma dúvida, qual a versão do DBExpress que você está usando ?
Att.
Wesley Y
Gostei + 0
24/04/2009
Edson Almeida
Gostei + 0
26/04/2009
Rodrigo Mourão
Meu nome é Rodrigo Carreiro, sou coordenador da área de Delphi da consultoria. Em primeiro lugar peço desculpas pela demora em responder seu chamado. Segue abaixo algumas considerações em relação a sua primeira colocação:
(...) Por utilizar o Dbexpress eu comprei a biblioteca interxpress (dbxup30dll) (...).
Este é um driver de terceiro e eu nunca o utilizei. A principio você deverá verificar com o Fabricante do drive se ele suporta a versão do firebird que esta usando. Porém acho que esse ainda não é o caminho. Veja as conderaçoes abaixo:
(...) a versão do Firebird é a 2_1_1. (...)
Também sou usuario de FireBird nas minhas aplicações, porém vai aqui um conselho: esta versão, na minha opinião, não esta estável a ponte de eu colocar uma aplicação minha para rodar nela. Estamos com alguns bugs ainda e com alguns releases para serem lançados. Atualmente trabalho com a versão 2.0 e indicaria esta para você.
(...) Quando uma pessoa esta logada não é possível outra pessoa logar, acaba não retornando erro e tudo fica travado. Então fiz um teste e comecei a fazer a conexao com o banco diretamente no remotedatamodule, por incrivel que pareça comecou a funcionar, mas sei que o correto seria somente uma conexao com o banco. (...)
Este é um erro muito comum de acontecer quando a configuração da gerências das threads esta feita de forma incorreta. Abaixo segue o link de uma video onde eu explico como isto funciona. A video foi gravada para atender um outro chamado com o mesmo problema que você.
http://video.devmedia.com.br/RodrigoCarreiro/Consultoria/chamado/4578/Chamado619.html
(...)tentei usar um DLL gratuita feita por um brasileiro (esqueci o nome agora) e ai o problema piorou pois qualque campo blob começou a dar pau...(...)
Este Dll e do Driver do Thiago Borges, eu tenho utilizado ele nas minhas aplicações sem problemas. O problema com o blob provavelmente deve ser com a maneira que esta acessando o campo blob. Eu aconselho a trabalhar com Stream, isso idependente do driver ou banco que utiliza.
(...)Agora se eu for ter que voltar o banco para a versão 1.5 ao inves da 2.1 fica mais algumas duvidas: -Hoje eu uso o collate win_ptbr pois ele não é case sensitive e não é sensitive nos acentos(...)
Você não precisa voltar ao 1.5, acredito que o 2.0 está estável a ponto de usá-lo numa aplicação. Ele possui o collate PT_BR.
(...)-devo continuar usando os Drivers do InterXpress ou seria neste caso melhor usar os drivers para Interbase(...)
Bem isto é uma decisão muito pessoal, eu sou contra componentes de terceiros pois você acaba ficando na mão de empresas que podem não dar continuidade ao projeto. Porém tem situações em que não temos como escapar como é o caso de driver para DBX4 acessar firebird. O Driver do interbase funciona mas a Borland nem a CodeGear garantem compatibilidade. Eu estou usando o TBODbx do Thiago Borges e tenho gostado.
(...)Como você tem feito as conexões com o firebird usando o DataSnap ? Você Cria somente uma datamodule para fazer uma só conexão com o banco? Falo isto pois teve uma hora que para diminuir os problemas tive que fazer a conexão com o banco dentro do remotedatamodule e não no datamodule.(...)
Você verá na video que eu te indiquei acima como isso tudo funciona e aprenderar a colocar a configuração certa.
Acredito que as observações acima juntamente com a vídeo ja te daram uma "saída". Porém não custa lembrar que uma alteração como esta, mudar o banco e driver de acesso, deve ser feita com muito cautela, principalmente em sistema que já estão rodando pois pode levar tudo a perder, sempre devemos manter um sistema funcionando e so depois de testar muito, mas muito mesmo o outro, colocar em produção.
Estamos às ordens !!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Gostei + 0
26/04/2009
Edson Almeida
Gostei + 0
26/04/2009
Edson Almeida
Gostei + 0
26/04/2009
Rodrigo Mourão
Quando realizar o teste e ocorrer o travamento tente acessar o banco fora da aplicação, derepente com o IBExpert para que possamos saber se o travamento é do banco ou da aplicação.
Quanto a colocar o Sql Connection num DataModule externo isso e possivel e viável porém o acesso a este data module nao deve ser fetio na base do uses. Você teria que fazer através da interface do servidor de aplicação, da mesma maneira com que trabalhamos com SharedConnection.
Ficarei no aguardo de uma posição sua !!!
Abs !!!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Gostei + 0
26/04/2009
Edson Almeida
Gostei + 0
27/04/2009
Edson Almeida
Gostei + 0
27/04/2009
Rodrigo Mourão
Bem o que te falaram não procede. O fato é que se esta tentando acessar um recurso externo ao RemoteDataModule então terás que trabalhar com Single. Repare na vídeo o teste que eu faço. Eu recebo muitos alunos que chegam nos treinamentos oficiais cheios de (me disseram) kkkk . Eu lembro de mim quando comecei a fazer a formação, cheguei cheio de achismo: ApplyUpdates com -1 e não com 0, Query e Melhor que SqlDataSet entre outros. Isso e comum quando a gente começa a meter a cara por conta própria e então recebemos informações e julgamos estar corretas. Isso é normal.
O importante nisso tudo é o que eu sempre digo para meus alunos: "Tira você suas conclusões, crie você a sua teoria, não viva em função da teoria dos outros". É obvio que ninguém e dono da verdade e que não devemos ser com isso soberbos mas temos que ser questionadores.
Bem no seu caso, como falei, usar o apartment implica em ter uma Thread, um processo para cada requisição. Ou seja um servidor de aplicação é na verdade o TypeLybrary, um processo que roda dentro do Exe (mais ou menos). Então quando você acessa um DataModule fora deste processo para um usuário tudo bem. Agora imagina que 10 pessoas abram o sistema. Você terá 10 processos rodando e apenas 1 aplicativo, correto ??? Se é um só exe, então é um só DM, correto ? Então concluímos que temos 10 pessoas utilizando o mesmo DataModule.
Com Firebird ocorre esse travamento como você mencionou e já tive outros clientes com este problema. E em outros banco isso não ocorre. Isso pode ser devido a maneira com que o Firebird gerencia este processo. O super Server cria uma única instancia para todos os clientes conectados já o classic cria um processo para cada requisição. Mas ai cabe fazermos teste.
Agora posso te dar um conselho, o trabalho que vai dar para implementar shared connection não compensa dependendo do numero de usuário. E melhor neste caso colocar como Single. Imagine que você tenha 100 usuário conectados direto e cada um consumindo 1 MB (coisa já absurda) vc consumiria 100 MB. Se seu servidor tiver no mínimo 2GB (que e mínino para uma maquina servidor da app) então não terá problema algum.
Abs
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Gostei + 0
27/04/2009
Edson Almeida
Gostei + 0
27/04/2009
Rodrigo Mourão
Bem como lhe falei, o que o Manoel possa ter falado não esta totalmente errado, mas eu sou muito receoso em afirmar que uma coisa tem que daquela maneira todo o tempo. Eu sou daqueles que defende que a informática nao e uma ciencia exata, ela mais humana, entende? Temos que sentir o ambiente kkkkkkk
Mas precisando estamos às ordens.
P.S.: Quem cuida da TDS de São Paulo é o Bernardo, é meu chefe aqui no Rio, entre em contato com ele. Derepente pode pintar algum treinamento lá. Não desista não.
Abs !!!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Gostei + 0
01/05/2009
Edson Almeida
Gostei + 0
01/05/2009
Rodrigo Mourão
MultiInstance com Apartment + FireBird + Uses Em um DataModule Externo via Internet não trava, se colocar a mesma estrutura em rede ele trava, seria isso ??
Gostei + 0
01/05/2009
Edson Almeida
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)