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

Erro: "component Request Pending"


brunohjoia

Pergunta

Olá!!!!

No meu projeto, estou usando uma rotina com um código para abrir um banco de dados com senha. Esse código eu desenvolvi com a ajuda de algumas pessoas dos foruns da vida, que aliás me ajudaram muito, mas ele está apresentando um probleminha de vez em quando. Eis o código:

Dim ObjectAccess As New Access.Application
Dim MySQL As String
Dim MyDB As Database
Dim strSendKeys As String

Private Sub cmdRelatorioView_Click()
'Parte que edita a consulta
Set MyDB = Workspaces(0).OpenDatabase(CurDir & "\BancaJornal1.mdb", 0, False, ";pwd=senha")
MySQL = "SELECT * FROM Produtos WHERE Produtos.cod_fornecedor=" & frmFornecedores.txtCodigo
MyDB.QueryDefs("ProdutosConsulta").SQL = MySQL
MyDB.Close
'*******************************************

'Parte que abre o relatorio
strSendKeys = "senha~"
DoEvents
SendKeys (strSendKeys)
With ObjectAccess
.OpenCurrentDatabase CurDir & "\BancaJornal1.mdb", False
      For Each c In .CommandBars
        c.Enabled = False
      Next c
.DoCmd.OpenReport "ContaFornecedores", acViewPreview

.DoCmd.SelectObject acTable, "Descontos", True
.DoCmd.RunCommand acCmdWindowHide
.Reports("ContaFornecedores").Application.DoCmd.Maximize
.Visible = True
End With
'*********************************************************

End Sub

esse probleminha acontece com muita frequencia quando eu rodo o programa em Win98, e com pouca frequencia quando eu rodo o programa em WinXP. O probleminha que dá é que quando eu clico no botão que executa a rotina, uma janela estranha aparece. Nela diz assim:

"Component request Pending" - "This action cannnot be completed because the other application is busy. Choose 'Switch To' to activate the busy application and correct the problem."

Essa janela de erro me dá duas opções: "Switch to" e "Retry", mas não importa em qual eu clique, o erro persiste e impede que eu continue com a execução do programa... Aí eu tenho que apelar pro Ctrl+Alt+Del pra fechar o programa...

Alguém aí sabe qual é o real motivo desse erro?

Obrigado!

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

Provavelmente é aquele SendKeys ali no meio. Qual o propósito dele?

Explico: Através desse código estou tentando abrir um banco de dados que possui senha. Por causa disso, antes de executar o .OpenCurrentDatabase, o access abre uma janelinha pedindo a senha do banco de dados... Esse SendKeys serve para que a senha seja inserida automaticamente no campo que está com o foco(no caso, o campo da janelinha da senha). Repare que após a senha eu inserí um '~'. Ele funciona como uma confirmação, quer dizer, é como se após ter digitado a senha, o usuário tivesse apertado enter para confirmar e abrir o banco de dados. Assim o usuario não precisa saber a senha do banco de dados para acessá-lo, pois o programa "digita" a senha automaticamente. Por isso ele é indispensável no meu codigo.

Se você quiser saber mais sobre o SendKeys acesse esse artigo: Artigo Microsoft

Eu gostaria de frizar uma coisa: com o WinXP, é muito raro ocorrer o problema. Já no Win98 acontece com frequencia... É aí que eu me perco... onde está o problema?

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

Provavelmente é aquele SendKeys ali no meio. Qual o propósito dele?

Explico: Através desse código estou tentando abrir um banco de dados que possui senha. Por causa disso, antes de executar o .OpenCurrentDatabase, o access abre uma janelinha pedindo a senha do banco de dados... Esse SendKeys serve para que a senha seja inserida automaticamente no campo que está com o foco(no caso, o campo da janelinha da senha). Repare que após a senha eu inserí um '~'. Ele funciona como uma confirmação, quer dizer, é como se após ter digitado a senha, o usuário tivesse apertado enter para confirmar e abrir o banco de dados. Assim o usuario não precisa saber a senha do banco de dados para acessá-lo, pois o programa "digita" a senha automaticamente. Por isso ele é indispensável no meu codigo.

Se você quiser saber mais sobre o SendKeys acesse esse artigo: Artigo Microsoft

Eu gostaria de frizar uma coisa: com o WinXP, é muito raro ocorrer o problema. Já no Win98 acontece com frequencia... É aí que eu me perco... onde está o problema?

Obrigado

Sim, compreendo (só que é meio falho isso, não? Se o cara alternar para o bloco de notas, por exemplo, no momento em que a senha estiver sendo digitada, provavelmente ele a capturará, não?). Eu uso o SendKeys em um dos meus programas, mas já ouvi falar várias vezes de estranhos efeitos colaterais em sistemas operacionais diferentes, como esse citado (apesar de eu mesmo nunca ter presenciado algum).

Experimente dar uma pausa antes de utilizar o SendKeys (para se certificar de que não está começando a digitar alguns milissegundos antes da janela aparecer realmente e esperar a digitação). Utilize a API Sleep para pausar pelo menos 1 segundo e veja se o erro persiste.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Nossa... mas agora você me complicou... Tudo bem dar uma pausa, mas usar uma API que vai ser dificil... Eu nunca usei uma API, e não faço aminima ideia de como usar... Não conhecço as APIs.... Eu tenho paciencia para aprender, mas tem q ver se você tem paciencia pra me ajudar não é?. hehehehe....

Se for possível, me explique e mande exemplos de como utilizar as APIs....

Obrigado

Bruno

Link para o comentário
Compartilhar em outros sites

  • 0
Nossa... mas agora você me complicou... Tudo bem dar uma pausa, mas usar uma API que vai ser dificil... Eu nunca usei uma API, e não faço aminima ideia de como usar... Não conhecço as APIs.... Eu tenho paciencia para aprender, mas tem q ver se você tem paciencia pra me ajudar não é?. hehehehe....

Se for possível, me explique e mande exemplos de como utilizar as APIs....

Obrigado

Bruno

Quanto às APIs dê uma lida nestes dois posts:

http://scriptbrasil.com.br/forum/index.php?showtopic=26595

http://scriptbrasil.com.br/forum/index.php?showtopic=33901

Depois, faça o que se segue (creio que então você já terá entendido o porquê do código abaixo). Adicione o seguinte código à um módulo do seu programa:

Public Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
E, no lugar que deverá estar a pausa, coloque:
Sleep 2000

Certo? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Olá!

Eu usei a API sleep no meu programa e mesmo assim o erro continua aprecendo às vezes... Eu cheguei até a colocar "sleep 7000" logo após o doEvents, mas mesmo assim, parece que a janela da senha do banco de dados está abrindo depois que é executada a SendKeys...

Pensando aqui eu imaginei se não seria melhor usar uma API que detecte se a janela da senha do banco de dados já foi carregada e aberta. Caso possitivo, aí sim o programa enviaria a senha com o SendKeys. Caso negativo, ele procuraria novamente pela janela até que ela seja carregada, para depois usar o SendKeys... É aí que eu vou precisar da sua ajuda, hehehehehe... Será que tem como?

Obrigado

Bruno

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, nem tentei fazer o exemplo com o FindWindow: descobri que estamos quebrando nossas cabeças à toa... hehehehe. O último parâmetro do OpenCurrentDatabase é utilizado justamente para passar a senha biggrin.gif (note o nome dele: bstrPassword). Por isso, basta utilizar:

.OpenCurrentDatabase CurDir & "\BancaJornal1.mdb", False, "senha"

E não precisa de esquema nenhum para digitar a senha.

Certo? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Olá!

Que estranho... o meu OpenCurrentDatabase não tem esse terceiro parâmetro... eu fiz exatamente como no exemplo que você me deu no ultimo post, e ele dá uma mensagem de erro: "Wrong number of arguments...".

Pode ser que você esteja falando de um .OPenCurrentDatabase de outro objeto... no meu caso é Access.Application.OpenCurrentDatabase.

Será que teremos que voltar a usar as APIs FindWindow ou a FindWindowEx????

Obrigado

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...