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

Me Ajudem


mestre fyoda

17 respostass a esta questão

Posts Recomendados

  • 0

a conexao não pode ser usada para realizar essa operação . ela esta fecha ou invalida neste contexto .


Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Private Sub Form_Load()
cn.CursorLocation = adUseClient 'Define o cursor como local
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\biblioteca.mdb" 'Abre o BD
rs.Open "SELECT * FROM alunos", cn, adOpenDynamic, adLockOptimistic 'Abre a tabela no objeto "rs"
End Sub

Private Sub List1_Click()
Dim Dados As String, Mensagem As String
Dim Consulta_SQL As String
Dim Resultado As String
Dim Registro As String
Dado = List1.Text
Consulta_SQL = " Select * From alunos where nome LIKE '%" & Dado & "%' order by nome"
Set alunos = Arquivo.openRecordset(Consulta_SQL, dbopenSnapshot)
Rem Mensagem = " Posição retornada por Pesquisa.AbsolutePosition = " + _ Str(alunos.AbsolutePosition)
If alunos.AbsolutePosition > -1 Then
Mensagem = " Nome encontrado : " + alunos("nome")
Resultado = MsgBox(Mensagem, vbInformation)
Else
Resultado = MsgBox("Nome não encontrado.", vbInformation)

End If
Registro = alunos(0)
Resultado = MsgBox(Registro, vbInformation)
Relacionamento = " Select * From alunos,pegar where pegar.id = alunos.id;"
Set alunos = Arquivo.openRecordset(Relacionamento, dbopenDynaset)
Registro = Registro - 1
alunos.Move Registro

End Sub

Private Sub Text5_Change()
Dim Dados As String, Mensagem As String
Dim Consulta_SQL As String
Dim Resultado As String
Dim Contador As String, Total_encontrado As Integer

Contador = 0
Total_encontrado = 0
List1.Clear
Dado = Text5.Text
Set rs = CreateObject("ADODB.Recordset")
With rs
.Open " Select * From alunos where nome LIKE '%" & Dado & "%' order by nome"

If Total_encontrado > 1 Then
List1.ToolTipText = " Clique em um dos nomes  disponiveis para verificar dados completos . "

Else
List1.ToolTipText = "Nenhum nome disponivel . "
End If

Do

If alunos.AbsolutePosition > -1 Then
List1.AddItem (alunos("nome"))
Contador = Contador + 1
alunos.MoveNext

End If
Loop Until Contador >= Total_encontado

Relacionamento = " Select * From alunos,pegar where pegar.id = alunos.id;"
alunos.MoveFirst
End With
End Sub

Link para o comentário
Compartilhar em outros sites

  • 0

a conexao não pode ser usada para realizar essa operação . ela esta fecha ou invalida neste contexto .

Em qual linha? Seja mais específico, por favor. Sempre poste a mensagem do erro (já que os números de erro não significam nada para mim [eu vou ficar guardando número na cabeça?! biggrin.gif] ) e a parte do código em que o erro ocorre. De preferência, poste a rotina completa em que o erro ocorre ou pelo menos do começo da rotina até a linha do erro.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
ta nessa parte

With rs
.Open " Select * From alunos where nome LIKE '%" & Dado & "%' order by nome"

Sim, cadê a conexão ali? No segundo parâmetro de Open você deve informar a conexão (um ADODB.Connection que você cria anteriormente). No seu caso, é o "cn" que você declarou lá no General Declarations e que abrir no Form_Load.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
agora deu pau nessa linha

objeto requride .

If alunos.AbsolutePosition > -1 Then

Claro, "alunos" não existe ali. Só existe lá no List1_Click. Você deve ter em mente o escopo de variáveis dentro do VB. Declare ela no General Declarations e o seu código funcionará.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
COMO SE FAZ ISSO , me de um exemplo

Ué?! ohmy.gif Eu falei ali em cima:

Declare ela no General Declarations e o seu código funcionará.

Ou seja, é só ir no General Declarations (onde *você* declarou o "cn" e o "rs" - você nunca se perguntou por quê eles estão ali? blink.gif ) e coloque o "alunos" também:

dim alunos as Recordset

Sacou? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

ta dando erro aqui denovo :

erro : Object Variable  OR with block variable not set


If alunos.AbsolutePosition > -1 Then

Onde você inicializa "alunos"? Você só pode utilizá-lo depois de tê-lo inicializado. Isso ocorre em List1_Click, porém você está tentando utilizá-lo em Text5_Change. Não sei qual é a sua idéia, mas do jeito que está, você deve primeiro dar um clique na List1 para depois poder escrever algo na Text5. E, você precisa estudar um pouquinho mais a estrutura de um programa (principalmente objetos, escopos, orientação a eventos).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
eu quero fazer algo assim , quando o usuario digitar a letra inicial do nome , me mostre todas elas q estao no bd dentro da List .

você tem algum tuto sobre isso ?

Você não vai achar um tutorial especificamente sobre isso. Tutoriais, em geral, explicam como utilizar os recursos disponíveis e você deverá organizá-los de forma a fazer o que precisa.

Agora, se é isso que você quer fazer (listar os nomes de acordo com o que foi digitado na caixa Text5) pra quê tanta complicação? Veja:

Private Sub Text5_Change()
    Dim dado As String
    Dim rsTemp As New ADODB.Recordset
    
    List1.Clear
    dado = Text5.Text
    With rsTemp
        .Open "Select * From alunos where nome LIKE '" & dado & "%' order by nome", cn, adOpenStatic, adLockReadOnly
    
        If Not .EOF Then
            List1.ToolTipText = "Clique em um dos nomes  disponiveis para verificar dados completos."
        Else
            List1.ToolTipText = "Nenhum nome disponivel . "
        End If
    
        Do While Not .EOF
            List1.AddItem .Fields("nome").Value
            .MoveNext
        Loop
    End With
End Sub

Substitua o seu Text5_Change() por este acima e veja o resultado.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
dentro do List1 eu tenho o nome e o rg , como eu faço para desabilitar o clique no rg ?

Como assim? Uma list só guarda "itens", ou seja, cada linha daquela é um "item". Como você está adicionando o nome e o RG? No mesmo item (ambos na mesma linha)?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

No mesmo item (ambos na mesma linha)?

Isso mesmo.

Não tem jeito, oras. Foi o que eu disse acima, a listbox só guarda itens (linhas) e não "colunas"... Quando você clica em uma das linhas, você *não* está clicando no nome ou no RG e sim em uma linha (somente!).

E outra duvida , quando o usuario da backspace e apaga o inicio da letra digitada , ele mostra todos cadastrados , como faço para consertar isso ?

já usei  o  .Clear e não funfou .

Sim, ele mostra porque a SQL, nesse caso, fica: "SELECT * FROM alunos WHERE nome LIKE '%' ORDER BY nome;", já que "dado" é vazio ("") ao juntar com "%" fica só o "%" mesmo. De fato, procurar por "%" vai retornar todos os nomes. Então, creio que por aí você já tenha uma idéia sobre o que deve ser feito.

Abraços,

Graymalkin

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