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:
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:
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.

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 !