Atualizar base de dados em tempo real
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.
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
Curtidas 0
Respostas
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.
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
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.
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
22/02/2005
Ok
GOSTEI 0
Marcio.theis
22/02/2005
Já tentou fechar e abrir as tabelas??? Ou trocar tudo para qry...
GOSTEI 0
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
Fábio Feltrin da Silveira
GOSTEI 0
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 ?
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
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
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
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.
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
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.
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
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.
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
22/02/2005
Em vez de BDE, experimente pôr DBIProcs na cláusula USES
GOSTEI 0
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.
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
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.
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
22/02/2005
Tente
TabComando.FieldByName(´Hora´).AsDateTime := now;
TabComando.FieldByName(´Tempo´).AsDateTime := now;
TabComando.FieldByName(´Hora´).AsDateTime := now;
TabComando.FieldByName(´Tempo´).AsDateTime := now;
GOSTEI 0
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
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.
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
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.
[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
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.
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
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
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.
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
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