Atualizar base de dados em tempo real

Delphi

22/02/2005

Olá amigos,

Desenvolvi um sistema e nele usei bases paradox. Este sistema roda em um consultório médico. Acontece que a secretária entra com os dados do cliente e no consultório o médico acessa os dados para continuar com a consulta.

O problema é que as bases não são atualizadas em tempo real. O médico esta tendo que fechar o sistema e tornar a abri-lo para ter acesso às novas inclusões. E às vezes nem fechando e abrindo o sistema as inclusões são mostradas. Às vezes é necessário que a secretária reinicie a máquina na outra sala para que a do consultório mostre os dados.

Tentei incluir a comando ´ApplyUpDates´ no evento AfterPost, más recebo a mensagem ´Undeclared identifier´.

Qualquer ajuda será muito bem vinda.

Augusto.


Vetorzero

Vetorzero

Curtidas 0

Respostas

Fábio Feltrin

Fábio Feltrin

22/02/2005

Se você estiver usando SQL você deve colocar ApplyUpdates, sendo que para utilizar este comando é necessário que você coloque um componente como o IBUPDATESQL localizado na paleta Interbase(Este é o que eu uso), e fazer suas devidas configurações.

Se você estiver utilizando banco de dados normal(digo que não seja sql), você deve colocar o comando REFRESH.

Att Fábio.


GOSTEI 0
Vetorzero

Vetorzero

22/02/2005

Olá Fábio,

Obrigado pela dica. O problema que já tentei usar o Refresh só que não funciona. Não atualiza de forma alguma. Se pensar em outra solução poste aqui.

Obrigado.


GOSTEI 0
Fábio Feltrin

Fábio Feltrin

22/02/2005

Ok


GOSTEI 0
Marcio.theis

Marcio.theis

22/02/2005

Já tentou fechar e abrir as tabelas??? Ou trocar tudo para qry...


GOSTEI 0
Fábio Feltrin

Fábio Feltrin

22/02/2005

Tente excluir as tabelas do datamodule e reconfigura-las pois talves elas estejam com algum comando desnecessário. principalmente se vc estiver utilizando o IBupdatesql(Reconfigure-o).

Fábio Feltrin da Silveira


GOSTEI 0
Vetorzero

Vetorzero

22/02/2005

Olá Fábio,

Neste projeto não estou usando DataModule. Será isso? Será que devo passar as tabelas do formulário para um DataModule ?


GOSTEI 0
Fábio Feltrin

Fábio Feltrin

22/02/2005

Não tenho certeza se pode ser por causa do DataModule, não custa fazer uns testes. Que componentes está utilizando para acessar o Banco de dados? Você está utilizando SQL? E tipo se vc não esta utilizando DataModule se eu não me engano vc não podera utilizar a tabela em outro formulário.


GOSTEI 0
Roy

Roy

22/02/2005

Dê mais detalhes, por exemplo: qual o banco de dados que está usando, quais os componentes de acesso, etc...


GOSTEI 0
Vetorzero

Vetorzero

22/02/2005

Olá Fábio,

Estou usando componentes da paleta Data Access (TTable e TDataSource) e da Paleta Data Controls(TDBGrid, TDBEdit entre outros) aplicados diratamente no formulário (TForm). Neste formulário (Cadastro de Clientes) não utilizo SQL. As tabelas são Paradox.

Meu maior problema é que quando faço as correções em minha máquina, abrindo duas vezes o mesmo programa para simular uma rede, com o refresh funciona. Más quando instalo e testo no consultório não funciona e termino ficando na maior falta de graça.

Se pensar em mais alguma coisa poste aqui.


GOSTEI 0
Lindomar.des

Lindomar.des

22/02/2005

Colega,

1-Inclua Bbe na clausua uses do form/datamodule;
2-insira o código abaixo no evento de afterpost das tabelas:

dbisavechanges((dataset as ttable).handle);

Com isso ãs informações que estiverem em memória serão descarregadas em disco e vc obtera atualização na rede em tempo real.


GOSTEI 0
Vetorzero

Vetorzero

22/02/2005

Olá Lindomar

Inclui BDE na clausula uses do form/datamodule;
Insiri o código ´dbisavechanges((dataset as ttable).handle)´ no evento afterpost das tabelas.

Quando mando compilar o programa acusa uma série de erro que antes não existiam:

DMCadastro.pas(272): ´(´ expected but ´)´ found

Uma série de erros como este aí em cima.

Se retiro a cláusula DBE do uses volta a compilar normal, só que aí não atualiza as bases em tempo real.

Se puder me ajudar, agradeço.


GOSTEI 0
Gandalf.nho

Gandalf.nho

22/02/2005

Em vez de BDE, experimente pôr DBIProcs na cláusula USES


GOSTEI 0
Lindomar.des

Lindomar.des

22/02/2005

Augusto,

Segue a cláusula uses que uso:

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, DBTables, ExtCtrls, Bde, ImgList, IniFiles;

Minha aplicação compila normalmente.


GOSTEI 0
Vetorzero

Vetorzero

22/02/2005

gandalf.nho,

Substitui o BDE por DBIProcs e disparou uma série de erros no momento da compilação. Observei que o erro apresentado ´([Error] fCadastro.pas(515): ´(´ expected but ´;´ found´ está relacionado às linhas do código que dizem respeito à data e hora. Exemplo de linha com o erro mencionado:
TabComando.FieldByName(´Data´).AsDateTime := Date;
TabComando.FieldByName(´Tempo´).AsDateTime := Time;
Em todas as linhas com contém referencia a ´Date´ e a ´Time´ acusam o erro acima.
Se eu retiro a cláusula DBIProcs volta a compilar normalmente.

O que pode ser isso?

Desde já agradeço. Se puder me ajudar a resolver vai ser muito bom.


GOSTEI 0
Roy

Roy

22/02/2005

Tente
TabComando.FieldByName(´Hora´).AsDateTime := now;
TabComando.FieldByName(´Tempo´).AsDateTime := now;


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

22/02/2005

Olá amigos, Desenvolvi um sistema e nele usei bases paradox. Este sistema roda em um consultório médico. Acontece que a secretária entra com os dados do cliente e no consultório o médico acessa os dados para continuar com a consulta. O problema é que as bases não são atualizadas em tempo real. O médico esta tendo que fechar o sistema e tornar a abri-lo para ter acesso às novas inclusões. E às vezes nem fechando e abrindo o sistema as inclusões são mostradas. Às vezes é necessário que a secretária reinicie a máquina na outra sala para que a do consultório mostre os dados. Tentei incluir a comando ´ApplyUpDates´ no evento AfterPost, más recebo a mensagem ´Undeclared identifier´. Qualquer ajuda será muito bem vinda. Augusto.

Colega,

Isto acontece em face das configurações do BDE não estarem corretas, principalmente o LOCAL SHARE que deve ser true. Quando incluir BDE na lista de uses, certifique-se que ele seja o primeiro da lista.
O uso de Tables no caso do Paradox É RECOMENDÁVEL ao invés de Querys. Para forçar a gravação física dos dados, use:

dbiSaveChanges(NomeTabela.Handle) no after post da mesma.


GOSTEI 0
Fabiogaldino

Fabiogaldino

22/02/2005

caro ,
Provavelmente o erro ocorre devido a um conflito de funções com mesmo nome em alguma da units que estão na sua cláusula [b:eb2ef8821b]uses[/b:eb2ef8821b], seja em [b:eb2ef8821b]interface [/b:eb2ef8821b]ou [b:eb2ef8821b]implementation[/b:eb2ef8821b].
Sugiro usar as funções [i:eb2ef8821b]Date[/i:eb2ef8821b] e [i:eb2ef8821b]Time[/i:eb2ef8821b] precedidas do nome da unit a que pertencem:

SysUtils.Date;
SysUtils.Time;

Aproveito para comentar que enfrentei um problema semelhante ao discutido neste tópico, só que com [i:eb2ef8821b]ADO [/i:eb2ef8821b]+ [i:eb2ef8821b]ClientDataSet[/i:eb2ef8821b].
Cadastrarei um novo tópico com o Assunto ´[i:eb2ef8821b]Problema de Atualização (ADO + ClientDataSet)[/i:eb2ef8821b]´, a fim de não poluir este com questões que não são específicas do problema apresentado.
Um abraço e desde já agradeço a todos ue postarem sugestões ao meu problema.


GOSTEI 0
Vetorzero

Vetorzero

22/02/2005

Caro Aroldo Zanela,

[b:264f165fb1]Isto acontece em face das configurações do BDE não estarem corretas, principalmente o LOCAL SHARE que deve ser true.[/b:264f165fb1]

Onde configuro no BDE o Local Share ? No BDE, no Alias que criei, em configurações encontrei NET DIR, VERSION, TYPE, LANGDRIVER... más nada como LOCAL SHARE.

[b:264f165fb1]Quando incluir BDE na lista de uses, certifique-se que ele seja o primeiro da lista.[/b:264f165fb1]

Ok. Passei para a primeira cláusula da lista e funcionol legal. Parou de apresentar erros na compilação.

[b:264f165fb1]O uso de Tables no caso do Paradox É RECOMENDÁVEL ao invés de Querys.[/b:264f165fb1]

Ok. Estou usando Tables.

[b:264f165fb1]Para forçar a gravação física dos dados, use: dbiSaveChanges(NomeTabela.Handle) no after post da mesma.[/b:264f165fb1]

Agora estou conseguindo usar, após colocar o BDE em primeiro lugar na lista de uses. O problema é que agora quando testo o sistema (faço uma nova inserção) fecho e abro novamente o sistema, o registro não se encontra lá, na base de dados. Ou seja, quando uso:
dbiSaveChanges(TabCadastro.Handle) o registo simplesmente desaparece.

Se puder, jogue um pouco de luz no motivo desses fatos.

Obrigado pela atenção.


GOSTEI 0
Vetorzero

Vetorzero

22/02/2005

Caros amigos,

Agradeço a todos pelo suporte. O problema foi plenamente resolvido. Seguindo as indicações do amigo Aroldo Zanela ([color=green:6a1c7e59bf]declarando BDE no primeiro lugar da lista de uses, alterando a configuração do BDE para LOCAL SHARE true e inserindo a linha dbiSaveChanges(Tabela.Handle) no evento AfterPost da Tabela[/color:6a1c7e59bf]) as atualizações são processadas imediatamente em todas as máquinas da rede.
O último erro que constatei, a da perda de todo e qualquer registro cadastrado após fechar e novamente abrir o formulário de cadastro era modivado por alterações que eu mesmo havia feito nas propriedades da tabela na busca por solução e, na desepção de não encontrar, havia me esquecido e voltar às configurações originais. Para constar: a propriedade CachedUpDate estava como true quando devia estar como false e a propriedade StoreDefs também estava como true quando devia estar como false.

É isto. Mais uma vez, obrigado a todos vocês. Precisando, estamos aí.

Augusto.


GOSTEI 0
Cinh0

Cinh0

22/02/2005

Aroldo, sensacional essa dica sobre atualização, a muito tempo procuro essa solução para o paradox, mas gostaria que, se possivel, vc me ajudasse a implementar essa mesma solução de atualização em banco de dados MySql, como proceder? Grato pela ajuda, sds, cinh0


GOSTEI 0
Silviogs

Silviogs

22/02/2005

Olá amigo,

para começar não utilize o paradox, já postei algo com referência a este simples gerenciador de arquivos. Tente ultilizar um Banco de Dados como: MSSQL Server, Interbase, FireBird, Postgres...Etc. No caso estou utilizando FireBird com ZeosLib são totalmente free. Faça uma pesquisa
no site que você encontrará como acessar diretamente o banco de dados.

Procure neste tópico

http://forum.devmedia.com.br/viewtopic.php?t=58753&highlight=paradox&sid=952e53bcc79df19c90c2208e935a70d0


Atencisoamente


Silvio Guedes.


GOSTEI 0
Edilcimar

Edilcimar

22/02/2005

voê configurou a rede em otodos os computadores utilizando o bdeadmin em configurações?, colocou o caminho em cada computador e colocou shared como true?, se as respostas forem sim então basta dar um table1.refresh


GOSTEI 0
POSTAR