CONEXAO AUTOMATICA

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
NiNo
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 62
Registrado em: Seg, 11 Jul 2005 2:03 pm
Localização: são Paulo
NiNo
Developer

Ola para todos,

necessito urgente da forma de efetuar uma conexão com o banco de dados sem que seja apresentada a tela de conexão default do FORMS.
Tentei o comando CONNECT DB user/pwd:instance, mas não deu certo.

valeu.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

você pode criar um atalho do runtime. Nele, você coloca o seguinte onde diz "Objeto:"

Selecionar tudo

D:\oracle8\BIN\ifrun60.EXE module=seu_form userid=usuario@senha/seu_banco
Ou seja, com isso, você passa a string de CONEXAO direto pro Runtime.


Se você não quer que a senha fique visível como acima, eu já vi um caso assim:
* Eles criaram um usuário chamado ACESSO com senha ACESSO.
Esse usuário não tem direito de fazer NADA, apenas um GRANT de EXECUTE em uma função que validava a senha. Ou seja, mesmo que alguém visse a senha, não ia conseguir fazer nada...


Outra forma do Forms não perguntar o login, é você criar uma Trigger ON-LOGON no forms com NULL dentro. (dessa forma, ele não se conecta com o banco)... Pelo menos, você pode fazer um esquema pra ele se conectar com CONNECT.

Se não for isso, explica aí o que não deu certo!!!! falowww
Almir J. Gomes
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Qui, 07 Jul 2005 9:45 pm
Localização: são Paulo
Almir J. Gomes
Developer

cara, agradeco desde sua boa vontade de tentar me ajudar mas,
o que eu quero e o seguinte:
Fazer a conexao com o banco atraves de um comando CONNECT assim que o forms for executado pois, na minha aplicacao estou desprezando o controle de acesso do banco e criando um controle de acesso a tabelas internamente da aplicacao devido as necessidades do usuario. Eu dei uma olhada no help do forms no comando CONNECT mas, não surtiu o efeito desejado ou seja. Se você tiver alguma sugestao para isto me ajudaria bastante.

valeu.
NiNo
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 62
Registrado em: Seg, 11 Jul 2005 2:03 pm
Localização: são Paulo
NiNo
Developer

Deem uma olhada no help do forms: Comando "LOGON".
tomgmf
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Seg, 10 Abr 2006 5:00 pm
Localização: Guarujá - SP

Ola para todos,

Eu também estou tentando fazer algo parecido, mas não consigo, na verdade eu preciso fazer um form personalizado usando on-logon, ou seja, transformar aquela tela do on-logon do oracle para uma que eu quero fazer.

Sera que alguém pode me ajudar nesse caso.

Obrigado pela paciencia, fico no aguardo!!!

Edgard Thomas
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Tutorial como fazer o forms conectar direto com o banco

Como fazer uma tela de LOGIN
  • Coloque os campos de login e senha num canvas.
    O Campo SENHA você muda a propriedade "Conceal Data" para YES, a fim de preencher com *** a senha.
  • No botão OK, teste se conectou da seguinte forma:

Selecionar tudo

  LOGOUT;
  LOGON(:bloco.usuario, :bloco.senha||'@'||:bloco.banco, FALSE );
  
  if form_failure then
     ... trata erro 
  end if;

É claro que você pode colocar mais segurança nesse código, por exemplo, criar um contador onde proibe errar mais de 3 vezes a senha etc.

Como fazer pra chamar?

Desta forma, você não eliminou o problema do forms pedir a string de conexão. Para isso, crie um atalho passando para o runtime um login/senha apenas para conexão. (Pode ser um login que não tem privilégio de fazer nada, nem SELECT em nenhum objeto).
Algo assim no atalho:

Selecionar tudo

C:\oracle\BIN\ifrun60.EXE module=<seu_form> userid=login/senha@banco
Desta forma, você se conecta no banco direto com a senha do usuário!
:-o
tomgmf
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Seg, 10 Abr 2006 5:00 pm
Localização: Guarujá - SP

OBRIGADO pelo interesse dr_gori !!!

Eu tenho algumas dúvidas, eu tinha pesquisado antes de lançar a pergunta aqui no forum e já tinha feito isso abaixo, até mesmo porque você já tinho falado com algumas pessoas:

Selecionar tudo

DECLARE

cn VARCHAR2(10);
ALERT_BUTTON NUMBER;

BEGIN

   cn := 'teste';

   IF :login.txt_usuario is not null and :login.txt_senha is not null THEN

      --LOGOUT;
      LOGON(:login.txt_usuario,:login.txt_senha || '@' || cn, FALSE);
      
      IF FORM_FAILURE THEN

         SET_ALERT_PROPERTY('ALL_OK', ALERT_MESSAGE_TEXT, 'O Login Não Funcionou!') ;
         alert_button := show_alert('ALL_OK') ;

      ELSE

         SET_ALERT_PROPERTY('ALL_OK', ALERT_MESSAGE_TEXT, 'O Login Funcionou!') ;
         alert_button := show_alert('ALL_OK') ;

      END IF;
      
   END IF;

END;

Mas por exemplo, fiz isso que você me falou, e quando tento rodar, mesmo eu colocando o logo que não existe, ele diz que o login funcionou. Eu só não tinha tentado com LOGOUT; mas eu tentei também e não funcionou.

Já aconteceu isso com você? porque da maneira que eu penso, se eu digitar um login errado vai acusar pelo FORM_FAILURE que falhou

Mas tudo isso esta no botao, e na trigger do form no on-logon eu coloquei null;



para testar fiz isso abaixo:

Selecionar tudo

C:\orant\BIN\ifrun60.EXE hrs_trabalhadas.fmx
você me diz que eu deveria fazer isso abaixo:

Selecionar tudo

C:\oracle\BIN\ifrun60.EXE module=<seu_form> userid=login/senha@banco
mas porque eu devo testar usando uma conexão, o grande lance não é testar sem usar a conexão, a conexão vai vir agora assim que aparecer o form, desculpa a burrice, mas eu to com estas dúvidas, espero que você possa me ajudar novamente!!!



Obrigado pela paciência!!!

Thomas
tomgmf
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Seg, 10 Abr 2006 5:00 pm
Localização: Guarujá - SP

Mais uma coisa

Eu vi tambem que você me enviou um endereço para eu pesquisar sobre esse assunto abaixo em que você fala para a pessoa o seguinte:
Outra forma do Forms não perguntar o login, é você criar uma Trigger ON-LOGON no forms com NULL dentro. (dessa forma, ele não se conecta com o banco)... Pelo menos, você pode fazer um esquema pra ele se conectar com CONNECT.


Bom, agora eu fiquei na duvida se o que eu fiz ate agora foi uma bagunça fazendo a tela de login e usando uma trigger on-logon com null;

Pelo que entendi você diz que temos duas formas de fazer ou usando do primeiro jeito, que é fazer a tela de login personalizada sem a trigger on-logon e executa-la desta forma

Selecionar tudo

C:\oracle\BIN\ifrun60.EXE module=<seu_form> userid=login/senha@banco 

A outra forma é que eu não entendi direito, tenho que usar conect?

Espero que possa me ajudar!!!
Até mais... obrigado pela força
tomgmf
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Seg, 10 Abr 2006 5:00 pm
Localização: Guarujá - SP

Dr_Gori

Só para melhorar uma das minhas dúvidas que assim que eu li o que escrevi, nem eu entendi :oops:

***********************************
mas porque eu devo testar usando uma conexão, o grande lance não é testar sem usar a conexão, a conexão vai vir agora assim que aparecer o form, desculpa a burrice, mas eu to com estas dúvidas, espero que você possa me ajudar novamente!!!
***********************************

O que eu quis dizer é que eu fazendo a tela de login é para ela aparecer sem que eu não usa-se nenhuma conexão por enquanto, aparecendo a tela, ai sim, depois de digitar o usuario e senha e clicando no botão, vou ser informado se a conexão funcionou ou não (FORM_FAILURE)!!!

FOI ISSO QUE QUIS DIZER :wink:

Valeu!!!
tomgmf
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Seg, 10 Abr 2006 5:00 pm
Localização: Guarujá - SP

Neste endereço também tem a mesma coisa que estou tentando fazer, só que a moça encontra a mesma dificuldade!!!

http://historico.org/message.php/list/oracle_br/id/5876

Se você quiser dar uma olhadinha, derrepente ela se fez entender melhor do que eu!

Abraços

Te aguardo,
Até mais!!!
tomgmf
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Seg, 10 Abr 2006 5:00 pm
Localização: Guarujá - SP

Bom dia a todos...

Bom, consegui achar o que eu queria na internet, abaixo todo o código usado para fazer isso caso alguém se interesse, obrigado, até mais!

Personalizando a Tela Do Logon

O LOGON_SCREEN embutido chama para cima o default Forma tela do logon para capturar o username, senha, e conecta fio. Entretanto, você pode também usar uma tela do logon personalizada. O seguinte tutorial cria um formulário que pode estar utilizado como uma tela do logon de reposição de qualquer formulário. NOTA: Sistema Coordenado é assumido ser pixel.

1. Crie um novo módulo de formulários e muda unicamente as seguintes propriedades:

Selecionar tudo

       Name:         LOGON
       Title:        LOGON          (v4.5)
2. Modifique unicamente as seguintes propriedades para WINDOW0 (v4.0, Cria esta janela):

Selecionar tudo

       Name:         LOGON_WINDOW
       Width:        126
       Height:       108
       Title:        Logon
       Style:        Dialog
       Modal:        TRUE
       Fixed Size:   TRUE
       Iconifiable:  FALSE
       Inherit Menu: FALSE
       Zoomable:     FALSE
3. Crie um novo canvas (v4.0, Modifica CANVAS0) e modifica unicamente o seguinte propriedades:

Selecionar tudo

       Name:         LOGON_CANVAS
       Window:       LOGON_WINDOW
       Width:        126
       Height:       108
4. Modifique unicamente as seguintes propriedades ao LOGON_WINDOW:

Selecionar tudo

       View:         LOGON_CANVAS
5. Crie um novo bloco e modifica unicamente as seguintes propriedades:

Selecionar tudo

       Block Name:   LOGON_BLOCK
6. Crie três itens de texto no canvas LOGON_CANVAS ao LOGON_BLOCK DE bloco com propriedades como follows:

Selecionar tudo

       Name:         USERNAME
       X Position:   12
       Y Position:   8
       Width:        102
       Height:       18

       Name:         PASSWORD
       X Position:   12
       Y Position:   31
       Width:        102
       Height:       18
       Secure:       TRUE

       Name:         CONNECT
       X Position:   12
       Y Position:   54
       Width:        102
       Height:       18
7. Crie dois empurra botões no canvas LOGON_CANVAS ao LOGON_BLOCK DE bloco com propriedades como segue:

Selecionar tudo

       Name:           LOGON
       X Position:     12
       Y Position:     84
       Width:          52
       Height:         18
       Label:          Logon
       Mouse Navigate: FALSE
       Default Button: TRUE

       Name:           CANCEL
       X Position:     72
       Y Position:     84
       Width:          52
       Height:         18
       Label:          Cancel
       Mouse Navigate: FALSE
8. Código o seguinte programa units:

Selecionar tudo

       PROCEDURE leave(status BOOLEAN DEFAULT TRUE) IS
       BEGIN
          IF status THEN
             :global.logged_on := 'TRUE';
          ELSE
             :global.logged_on := 'FALSE';
          END IF;
          EXIT_FORM;
       END;

       PROCEDURE initialize_form IS
          un VARCHAR2(30) := GET_APPLICATION_PROPERTY(USERNAME);
          pw VARCHAR2(30) := GET_APPLICATION_PROPERTY(PASSWORD);
          cs VARCHAR2(30) := GET_APPLICATION_PROPERTY(CONNECT_STRING);
       BEGIN
          DEFAULT_VALUE('3', 'global.logon_tries');
          DEFAULT_VALUE(un, 'global.username');
          DEFAULT_VALUE(pw, 'global.password');
          DEFAULT_VALUE(cs, 'global.connect_string');
          :logon_block.username := :global.username;
          :logon_block.password := :global.password;
          :logon_block.connect  := :global.connect_string;
       END;

       FUNCTION connect_to RETURN BOOLEAN IS
       BEGIN
          IF :logon_block.username IS NULL THEN
             BELL;
          END IF;
          LOGON(:logon_block.username,
                :logon_block.password||'@'||:logon_block.connect, FALSE);
          IF FORM_SUCCESS THEN
             RETURN TRUE;
          ELSE
             RETURN FALSE;
          END IF;
       END;
9. Código os seguintes gatilhos:

On-Logon (Form Level)

Selecionar tudo

       LOGON(:logon_block.username,
             :logon_block.password||'@'||:logon_block.connect,
             FALSE);
When-New-Form-Instance (Form Level)

Selecionar tudo

       initialize_form;
When-Button-Pressed (Item Level, on LOGON_BLOCK.CANCEL)

Selecionar tudo

       leave(FALSE);
When-Button-Pressed (Item Level, on LOGON_BLOCK.LOGON)

Selecionar tudo

       BEGIN
         IF connect_to THEN
            leave(TRUE);
         END IF;
         :global.logon_tries := TO_NUMBER(:global.logon_tries) - 1;
         IF TO_NUMBER(:global.logon_tries) = '0' THEN
            leave(FALSE);
         END IF;
      END;
When-Window-Activated (Form Level)

Selecionar tudo

       DECLARE
         screen_height  NUMBER;
         screen_width   NUMBER;
         window_height  NUMBER;
         window_width   NUMBER;
       BEGIN
         IF :SYSTEM.EVENT_WINDOW = 'LOGON_WINDOW' THEN
            screen_height := GET_APPLICATION_PROPERTY(DISPLAY_HEIGHT);
            screen_width := GET_APPLICATION_PROPERTY(DISPLAY_WIDTH);
            window_height := GET_WINDOW_PROPERTY(:SYSTEM.EVENT_WINDOW, HEIGHT);
            window_width := GET_WINDOW_PROPERTY(:SYSTEM.EVENT_WINDOW, WIDTH);
            SET_WINDOW_PROPERTY('LOGON_WINDOW', X_POS,
                               (screen_width - window_width)/2);
            SET_WINDOW_PROPERTY('LOGON_WINDOW', Y_POS,
                               screen_height/2 - window_height);
         END IF;
       END;
10. Gere e salva isto form.

11. Crie um novo formulário. Este formulário é um exemplo de como para usar o
logon forma que tem somente sido criado.

12. Crie um bloco de default, dando este formulário alguns itens.

13. Código o Em-logon gatilho como segue:

Selecionar tudo

     On-Logon (Form Level)
        CALL_FORM('logon', NO_HIDE);
        IF :global.logged_on != 'TRUE' THEN
           RAISE FORM_TRIGGER_FAILURE;
        END IF;
Esta vontade completa o coding ao formulário principal. Quando o formulário agora
requer uma conexão ao banco de dados, isto usará isto personalizou
tela do logon ao invés do um de default de Formulários.
jcaarlos
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Qui, 23 Dez 2004 10:24 am
Localização: são PAULO

Ola a todos alguém tem um exemplo de alteração de senha do usuario??


ATT JOSE CARLOS
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 7 visitantes