Fórum Problema com DBExpress - Access violation em rede - não faz sentido #410902
22/12/2011
0
Estou migrando uma aplicação do BDE para DBExpres no Delphi 7 + Interbase
Uso 2 DM
DM Principal
1 SQConnection + um trio de componentes para cadas tabela parametrizado pela chave primária
DM Busca - Pra pesquisas
1 SQLDataSet + DataSetProvider e vários clientDataSet com a propriedade
poAllowCommandText do DSP como TRUE
Blz... Tudo como manda o figurino
Ótimo, tudo funciona perfeito, inclusão. alteração, exlusão e Consultas em MÁQUINA LOCAL
Porém, nos testes em rede, após se logar no sistema, quando vou em algum cadastro pra fazer os testes mencionados acima me deparo com problema de access violation, o que não ocorre em MÁQUINA LOCAL...
Não deveria funcionar normal como funciona na máquina local ???
Qual é o problema ??? Não faz sentido, se funciona em máquina local, deveria funcionar em rede já que a conexão ocorre normalmente ???
Alguém saberia me dizer o que está pegando ?
Desde já agradeço a ajuda...
Jeremias
Curtir tópico
+ 0Posts
26/12/2011
Valnei Reis
Agora, vai ai algumas dicas que podem ajudar, caso não foram feitas ainda.
Firewall
Habilite a porta 3050 para o Firebird em todas as máquinas.
Firebird - instalar em todas as máquinas, obvio....
dbxconnections.ini tem que existir em todas as máquinas de preferência na pasta do seu sistema. Lá aponta para o banco de dados, mas tem um porém nos terminais você deve colocar o nome da máquina ou ip no caminho do banco.
Database=C:\Synapse Beta\Dados\Synapse.FDB ..> Local
Database=192.168.0.10:\Synapse Beta\Dados\Synapse.FDB --> Rede
Copiar os arquivos abaixo para a pasta windows\system32 de cada terminal.
bdertl70.bpl
borlndmm.dll
dbexpint.dll
dbexpress70.bpl
dbrtl70.bpl
dbxcds70.bpl
midas.dll
qrpt70.bpl
qtintf70.dll
rtl70.bpl
Estas são alguns dos arquivos que devem estar para funcionar no caso do meu sistema, mas são comuns em vários casos.
Sem mais informações, fica um pouco difícil te ajudar, mas citei alguns itens acima que são os procedimentos para que o meu sistema rode perfeitamente na rede. Mesmo setando as informações como vc as informou no seu tópico.
Acredito que se isto não resolver, coloque a imagem da violação e mais informações para que a comunidade possa te orientar melhor neste caso.
Fica ai um forte abraço e conte sempre com a comunidade.
Lembre-se O conhecimento humano pertence ao mundo.
Gostei + 0
27/12/2011
Wilson Junior
Depois siga os passos colocados nos tópicos acima.
Espero ter colaborado.
Gostei + 0
30/12/2011
Jeremias
O problema esta na expressão de consulta colocada na propriedade CommandText do CDS
De certa forma o DBExpress reclama quando se usa apenas SELECT * FROM NOMETABELA sem parametros ou cláusula ORDER BY mesmo que se altere esta em tempo de execussão...
Percebi isso testando em tempo de designe...
Quando eu setava o SQLconn pra base local, funcionava... ao ativar o cds a visão de dados aparecia no DBGrid normal dor Form, porém, quando eu seteva o SQLconn pra base de outra máquina, aí dava um erro de Mapping...
Pra resover basta colocar a cláusula ORDER BY NOMEDOCAMPO se você não quer parâmetros...
Mas as dicas de dll estas são importantes, atualmente copio apenas a dbexpint.dll e midas.dll porque utilizo a GDS32.DLL como retro compatibilidade, funciona normal, mas se pá envio as demais citadas...
Agora estou com outra dificuldade na passagem dos valores dos campos para o CDS...
Parece-me que o CDS também reclama de valores padrões passados através de compontentes DBEdit quando estes são decimal, numeric ou data...
Dá problema de Access violation também...
Estou tendo que verificar o conteudo destes componentes e convertê-los antes de passar pra chamada do método post tipo:
function TextToZero(MyDBEdit: TDBEdit) string;
begin
if MyDBEdit.Text = then
result := 0
else
result := MyDBEdit.text;
end;
Deixo ela em uma Unit generica e uso pra converter os valores passados para o CDS... faço isso também com campos data...
Existe uma forma mais prática de se trabalhar com campos Decimal e Data sem precisar convertê-los ???
DBCheckBox tudo bem porque preciso pegar o valor da propriedade Cheched, mas Decimal e Data deveria ser natural não ?
Exemplo:
cdsNomeTabela.FieldByName(valorCompra).asString := dbeValorCompra.Text; // Neste caso ele armazenaria como null
E NÃO
cdsNomeTabela.FieldByName(valorCompra).asString := TextToZero(dbeValorCompra);
Gostei + 0
30/12/2011
Jeremias
function TextToZero(MyDBEdit: TDBEdit) string;
begin
if MyDBEdit.Text = then
result := 0
else
result := MyDBEdit.text;
end;
.......
Exemplo:
cdsNomeTabela.FieldByName(valorCompra).asString := dbeValorCompra.Text; // Neste caso ele armazenaria como null
E NÃO
cdsNomeTabela.FieldByName(valorCompra).asString := TextToZero(dbeValorCompra);
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)