Página 1 de 3

Nome maquina /ou IP

Enviado: 07 Jan 2008 08:14
por ederxc
Bom dia !

Amigos , teria alguma função do Xh que retorne o NOME da maquina que voce atribui na instalação da mesma

winxp / nome da maquina = servidor

winxp / nome da maquina =terminal01


se tiver uma função que retorno o IP , pode ser tbm



...Intenção ..

Algumas tarefas tais como , criar DB e indexar na primeira inicialização do .EXE na maquina , são funções que só devem serem executadas , no servidos , por este motivo gostaria de saber o nome da maquina/IP , para
realizar este tipo de controle

té ++ :)Pos

Enviado: 07 Jan 2008 08:52
por sygecom
Buenas Eder, uma boa semana de trabalho pra vc, segue abaixo os dois exemplos:

Ip do Micro:

Código: Selecionar todos

PROCEDURE GetIp()
LOCAL aHosts
LOCAL cName
Local cEstacao:=netname(.f.)
InetInit()
aHosts := InetGetHosts( cEstacao )
IF aHosts == NIL
   aHosts := InetGetAlias( cEstacao )
ENDIF
IF Empty(aHosts)
   aHosts := InetGetAlias( cEstacao )
ENDIF
InetCleanup()
RETURN  ahosts[1 ]
Nome do Micro:

Código: Selecionar todos

NETNAME()
Abraços
Leonardo Machado

Enviado: 07 Jan 2008 08:59
por alaminojunior
Coincidentemente uso uma rotina que faz isso, sem precisar de nomes. Não sei se é bem isso que está precisando, mas la vai:

Código: Selecionar todos

Function Chek
Private local2:= savenv(00,00,maxrow(),maxcol())
do while .t.
   use cdctr000 excl new // guarda a ultima em que foi feita reindexação

   // aberto em excl outros usuarios não conseguirão abrir, deduzindo  que  já existe algum terminal realizando a manutenção.                               

   if neterr()
      wvt_messagebox("AGUARDE, REORGANIZACAO EM ANDAMENTO","ATENCAO",48)
      loop
   else
      exit
   endif
enddo
if (ctrdat >= Date()-7) // se foi feita a menos 7 dias, sist inicia normal
   rstenv(local2)
   return
else
   reindexa ou então faz manutenção nos arquivos, etc ... e ao final libera o arquivo cdctr000, para que outros terminais possam ler
Espero ter ventilado um pouco.

Enviado: 07 Jan 2008 09:44
por ederxc
sygecom escreveu:Buenas Eder, uma boa semana de trabalho pra vc, segue abaixo os dois exemplos:

Ip do Micro:

Código: Selecionar todos

PROCEDURE GetIp()
LOCAL aHosts
LOCAL cName
Local cEstacao:=netname(.f.)
InetInit()
aHosts := InetGetHosts( cEstacao )
IF aHosts == NIL
   aHosts := InetGetAlias( cEstacao )
ENDIF
IF Empty(aHosts)
   aHosts := InetGetAlias( cEstacao )
ENDIF
InetCleanup()
RETURN  ahosts[1 ]
Nome do Micro:

Código: Selecionar todos

NETNAME()
Abraços
Leonardo Machado
Leo , como sempre matando a pau , valeu !



Alaminojunior , Eu estava fazendo dessa forma , porem creio que seja mais conveniente deixar para o servidor fazer as rotinas de criação e manutenção ...


Grato pela atenção ,e uma boa semana de trabalho a todos , 2008 , agora vai ....

Enviado: 07 Jan 2008 14:14
por alaminojunior
creio que seja mais conveniente deixar para o servidor fazer as rotinas de criação e manutenção ...
Está coberto de razão.
Mas explica melhor, sempre que o sistema for iniciado, ele verifica se a maquina é o servidor e então executa a rotina de manutenção ? É isso ?
Se for, vou pegar carona nessa idéia, incluindo esta etapa dentro da que já tenho.

Enviado: 07 Jan 2008 15:22
por ederxc
alaminojunior escreveu:
creio que seja mais conveniente deixar para o servidor fazer as rotinas de criação e manutenção ...
Está coberto de razão.
Mas explica melhor, sempre que o sistema for iniciado, ele verifica se a maquina é o servidor e então executa a rotina de manutenção ? É isso ?
Se for, vou pegar carona nessa idéia, incluindo esta etapa dentro da que já tenho.

Não , somente quando manda indexar ...

Mas veja bem ja vou voltando atraz no que falei rsrs , analizando tecnicamente ficaria muito bom , porêm , caso seu cliente queira formatar o servidor e chamar algum tecnico pra fazer o serviço e esse tecnico , mudar o nome da maquina , ae ja vai dar problema em seu sistema , mas isso é apenas uma ipótese ! como disse anteriormente , TECNICAMENTE vai funcionar legau ....

PS: Ja fiz os testes e ficou maneiro.

Enviado: 07 Jan 2008 17:14
por Eolo
Algumas tarefas tais como , criar DB e indexar na primeira inicialização do .EXE na maquina , são funções que só devem serem executadas , no servidos ,
Por que "só no servidor"? Não seria melhor "só por alguém com poderes para", alguém que deveria poder fazer qualquer coisa a partir de qualquer PC da rede, não só no servidor?

Eu, faço por usuário. Se, na inicialização do sistema, faltar algum DBF ou algum CDX, o ADM tem que entrar em qualquer um dos PCs e botar a casa em ordem.

Enviado: 07 Jan 2008 17:56
por alaminojunior
Melhor ainda. :D

Enviado: 07 Jan 2008 18:59
por sygecom
Eu faço que nem o Eolo, mas Eder se assim mesmo vc quiser usar esse tipo de metodo nd o impede de ve ter uma opção de parametros do seu sistema que o usuario defina qual o nome ou IP da maquina que serve como SERVIDOR, eu uso isso para acesso a banco de dados MYSQL.

Enviado: 07 Jan 2008 21:05
por ederxc
Idéias são sempre bem vidas , adoro idéias !

Enviado: 07 Jan 2008 23:54
por asimoes
Pessoal,

Eu fiz um sistema que só faz indexação, e é agendado para um determinado horário no servidor como um serviço do windows (usando o srvany), quando o sistema inicia é enviado uma mensagem para o usuário sair do sistema, se estiver usando, mas pelo horário é pouco provável que alguém esteja usando (02:00 am). e também durante a indexação eu verifico se alguém entrou no sistema e ai eu mando o cara pro espaço (PELO SISTEMA), é radical, mas todo mundo já foi avisado e é por ai mesmo. (rs) E funciona que é uma maravilha. Executando a rotina no servidor não há colisão de rede e a indexação é super rápida, pelo motivo de ser local. Os indices de todo o sistema estão definidos em um dbf onde contém o nome do dbf, rdd, chave, condições, se unique key, data da indexação, hora e um campo controle se o indice foi criado com sucesso.

Asimoes

[]´s

Enviado: 08 Jan 2008 00:04
por lucimauro
Pelo que entendi voce quer indentifcar o servidor certo.
voce pode usar :

if left(execname(),1)==[C] indentifica o servidor

essa funcao retorna o nome e o caminho do executavel.
entao se a primeira letra for C entao voce esta no servidor.

Enviado: 08 Jan 2008 07:43
por ederxc
Amigos , grato pela contribuição de idéias ...Porêm como disse acima , vai de cada um avaliar de cliente para cliente como esse código deve ser escrito

Lucimauro , no seu caso fica bom se o .EXE estiver no servidor , em uma rede muito extenção com muitos acessos ao servidor creio que seja mais "coerente" deixar um .EXE para cada maquina e passar uma String como parametro para os DBF´s




Asimoes ,Sua indicação creio que seja a mais "chiq"pois voce não vai mais precisar por a mão , mas pra isso tem que ter uma rede bem estruturada e usuarios bem "domesticados no chicote" , tem cliente que desliga servidor !




RESUMÃO

Ta todo mundo correto ao meu ponto de vista ,vale de cada um avaliar como proceder ;E cheio de dicas assim consegui ter uma idéia de como criar a minha rotina para suprir as necessidades deste sistema que estou desenvolvendo ...


té++ :)Pos

Enviado: 08 Jan 2008 07:47
por Maligno
ederxc escreveu:Lucimauro , no seu caso fica bom se o .EXE estiver no servidor , em uma rede muito extenção com muitos acessos ao servidor creio que seja mais "coerente" deixar um .EXE para cada maquina e passar uma String como parametro para os DBF´s
Se bem que esse procedimento, numa rede grande, adiciona muita dificuldade na hora de atualizar os vários .EXEs espalhados pelas extensões.

Enviado: 08 Jan 2008 11:32
por ederxc
Maligno escreveu:
ederxc escreveu:Lucimauro , no seu caso fica bom se o .EXE estiver no servidor , em uma rede muito extenção com muitos acessos ao servidor creio que seja mais "coerente" deixar um .EXE para cada maquina e passar uma String como parametro para os DBF´s
Se bem que esse procedimento, numa rede grande, adiciona muita dificuldade na hora de atualizar os vários .EXEs espalhados pelas extensões.
Concordo !