Ir para conteúdo
Fórum Script Brasil
  • 0

Estou Confuso, Como Vcs Fazem Isso ? (Resolvido)


Alessandro

Pergunta

Estou muito confuso em relação ao sistema de ponto que fiz e está quase pronto...

O banco de dados e o executável vai ficar em uma máquina, e o pessoal que for utilizá-lo terá apenas o atalho....até aí td bem...

O problema é que quando gravo a data e hora no banco de dados, o sistema captura da máquina de quem está usando atravez do atalho e não da máquina onde está o sistema.

Alguém pode me dar um help em relação a isso, pois é essencial esse concerto...preciso fazer com que meu sistema capture a data e hora do servidor...idependente da data e hora que esteja nas outras máquinas.

O Não tenho nem idéia de como fazer isso.....

Estou utilizando DELPHI 6 e Access 2000....

Abraços.....

Valeu.... biggrin.gif

PS. Se com a ajuda de vocês...eu não conseguir isso vai td por água abaixo...... sad.gif

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

O problema é justamente que você não possui um servidor (no sentido estrito da palavra). Apenas você tem um computador que compartilha arquivos e que outros usam. Dessa maneira todo o processo é feito localmente, ou seja, é como se o banco de dados estivesse ali na máquina local, portanto a hora gravada será a dele.

Todavia, é claro que sempre pode-se fazer uma gambiarra... hehehe. Imaginei três possibilidades:

1) Sempre acertar a hora da estação de acordo com a do "servidor", antes de qualquer operação de gravação.

2) Sempre obter a hora do "servidor" através de uma função qualquer e usá-la nas SQLs (ao invés da função Now() do próprio Jet).

3) Essa é a mais trabalhosa: fazer com o "servidor" execute as instruções SQL ao invés da máquina local. A idéia seria transmitir a SQL via sockets para um programinha simples no "servidor" e quando a informação chegasse lá ele executaria a mesma. Comecei a fazer um projeto assim, mas não em Delphi (porém seria utilizável nele também), mas acho que ainda não está desenvolvido e testado o suficiente para ser usado de forma profissional.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

1) Sempre acertar a hora da estação de acordo com a do "servidor", antes de qualquer operação de gravação.

2) Sempre obter a hora do "servidor" através de uma função qualquer e usá-la nas SQLs (ao invés da função Now() do próprio Jet).

Muito legal cara.....é isso mesmo que está acontecendo....o problema é que eu não faço idéia de como fazer um desses dois aí....você sabe como, onde eu posso conseguir essas funções ??? Iria me ajudar muito...... biggrin.gif

Desculpe-me pelo comodismo.....odéio isso.....mas estou desesperado.....

Abraços....

Link para o comentário
Compartilhar em outros sites

  • 0

Só mais uma coisinha....

Aqui na empresa eu tenho como colocar o executável na REDE......tem o G: aqui......mas mesmo assim ele continua pegando a data do usuário, sendo que os mesmo possuem somente atalhos.....como é que vocês fazem em seus programas ......quando roda em um servidor mesmo ???

biggrin.gif

Link para o comentário
Compartilhar em outros sites

  • 0
Só mais uma coisinha....

Aqui na empresa eu tenho como colocar o executável na REDE......tem o G: aqui......mas mesmo assim ele continua pegando a data do usuário, sendo que os mesmo possuem somente atalhos.....como é que vocês fazem em seus programas ......quando roda em um servidor mesmo ???

biggrin.gif

Isso é exatamente o que eu disse aqui:

O problema é justamente que você não possui um servidor (no sentido estrito da palavra). Apenas você tem um computador que compartilha arquivos e que outros usam. Dessa maneira todo o processo é feito localmente, ou seja, é como se o banco de dados estivesse ali na máquina local, portanto a hora gravada será a dele.

Quando se tem um servidor de verdade, é nele que as SQLs são executadas, por isso uma função Date() ou Now() no meio de uma delas retorna a data dele (afinal, é *ele* que está executando). Até hoje não precisei de uma situação desse tipo, ou seja, de precisar guardar a hora exata (baseando-me por uma máquina).

No Windows existe um comando executado no prompt para obter a hora de um determinado computador:

net time \\computador
Para acertar a hora de um computador a partir de outro você pode fazer:
net time \\computador /set /y

Basta que o seu programa execute esse procedimento acima (o que pode ser feito pela API ShellExecute, acredito eu).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - Felipee -

Amigo,

Acho que a solucao do comando net time é a mais conveniente. smile.gif

Agora você tem um outro problema, como capturar esta data via dos e jogar para sua variavel em delphi?.... sad.gif

Um outra sugestao é você gravar a hora num bd do servidor a cada minunto. Assim cada vez que um funcionario entrasse pagaria a hora deste banco de dados. wink.gif

Espero ter ajudado. tongue.gif

Felipee.

Link para o comentário
Compartilhar em outros sites

  • 0

No Windows existe um comando executado no prompt para obter a hora de um determinado computador:

Andei pesquisando e achei aqui mesmo na parte de VB.NET uma discussão sua Graymalkin com outro cara em relação ao Shell Execute...ele precisava rodar .AVI, ou coisa parecida.....

Achei também esse link aqui :

http://users.skynet.be/bk296578/Dro/Delphi...tm#_Toc24549114

Mas nem sei por onde começar, meu conhecimento em DELPHI é básicão...

O problema é que não nada em Delphi, quando vocês citaram API, wink.gif fui atras para saber o que era.......se entendi serve para trabalhar com o Windowns no caso do shellEcecute não é? ?!?!?!

Qual a sugestão que vocês me dão, pois o sistema está pronto, e o único problema é esse, a do usuário poder mudar a data e hora burlando o controle....ou seja não servirá para nada... unsure.gif

-------------------------------------------------

Um outra sugestao é você gravar a hora num bd do servidor a cada minunto. Assim cada vez que um funcionario entrasse pagaria a hora deste banco de dados. 

Gostei da sua sugestão Felipe......obrigado pela luz......mas neste caso fica inviável, pois se o programa não for inicializado por exemplo, haverá problemas...........

Graymalkin...qualquer coisa, se você conseguir alguma coisa sobre como implementar o net time, falae....

WinExec('net time',sw_normal);

Seria alguma coisa neste sentido ??? wink.gif

Obrigado galera......Abraços e bom serviço à todos....

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - Felipee -

Amigo,

Sobre minha sugestao, você pode colocar no servidor na opcao iniciar/programa/iniciar o programa que vai gravar a hora. Assim, quando o windows foi inicializado o programa será ativado automaticamente e a hora comecará a ser gravada.

Ai não tem como não inicializar o programa. biggrin.gif

A forma correta de utilizar o winexec seria:

winexec("net time \\computador /set /y");

Mas como eu disse, o negocio vai ser você jogar este resultado numa variavel do delphi.... sad.gif

Acho que você gravar de minuto em minuto, seria mais viavel.

Abrs, smile.gif

Felipee.

Link para o comentário
Compartilhar em outros sites

  • 0

Boa Cara....deu certinho.....nem acredito que resolvi meu problema.......muito obrigado pela luz no fim do túnel.....

Portanto ficou assim, fiz outro aplicativo que inicializa no "servidor", ele fica fazendo um update na tabela....

Como o felipe havia sugerido......

Felipe e Graymalkin........só mais uma coisinha......quando o aplicativo abre no "servidor", eu dei um Hide para não incomodar o usuário que mexer na máquina.......queria saber como posso fazer para que se caso o aplicativo for aberto e o mesmo já estiver aberto.....não efetuar a abertura ????

Para não acontecer de abrir duas vezes o aplicativo.......assim posso utilizar para outros sistemas também.......

Do mais.....muito obrigado galera.......agora vamos estudar....minhas provas estão aí.....ai ai ai..... biggrin.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Alessandro,

eu tambem posso ajudar??? biggrin.giftongue.gif

Ae vai o código pra execultar uma única cópia do programa:

program Project1; 
uses 
  Forms, 
  Windows, 
  Dialogs, 
  Unit1 in 'Unit1.pas' {Form1}; 
{$R *.RES} 
Var HprevHist : HWND; 
begin 
  Application.Initialize; 
  HprevHist := FindWindow(Nil, PChar('Titulo do Aplicativo')); 
  if HprevHist = 0 then begin 
     Application.Title := 'Titulo do Aplicativo'; 
     Application.CreateForm(TForm1, Form1); 
     Application.Run; 
  end else 
     MessageDlg('Você não pode executar outra cópia do aplicativo', mtInformation, [mbOK], 0);

Abs. Progr'amador. wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Agora você tem um outro problema, como capturar esta data via dos e jogar para sua variavel em delphi?.... sad.gif

Simplesmente ele não precisa... O comando...

net time \\computador /set /y

... já *acerta* a hora da estação de acordo com a hora do computador remoto. Portanto, não existe a necessidade de se saber a hora atual (basta usar uma função do tipo Now(), Date() ou Time() normalmente na SQL).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Muito obrigado à todos galera.......valeu mesmo.....

Demorei para responder por causa que fiquei sem net por um tempo......

Esse forum é show de bola.......

podem fechar....

Abraços

PS. Essa dica 132 do "800 dicas delphi" ajudou.....baixei esse programa....hehehehe biggrin.gif

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...