• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

s e 7 e n

[VB6] Pesquisas na Base Dados

12 mensagens neste tópico

Boas

Tou aqui a fazer um programa que la ligado a uma Base Dados.

O VB ja consegue ir buscar os dados a BD, mas tive um problema.

Sei que se deve usar o ADODC mas tava a dar erros, agora estou a usar o DATA e ja trabalha bem.

Agora o problema é fazer pesquisas na BD...

Andei a ver na net e vi um codigo com isso, mas não consigo por a trabalhar  :D

Encontrei este codigo:

Private Sub cmdPesquisar_Click()
Dim str As String

str = InputBox("Que cidade deseja Procurar?")

BaseDados.Recordset.Find  &str

If BaseDados.Recordset.EOF Then
BaseDados.Recordset.MoveFirst
MsgBox " Nao foi encontrado nenhuma cidade"
End If

End Sub

Mas continuo a não consegui fazer a pesquisa.

Que dizem???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas, não será o mesmo problema que eu tinha ontem? estás a introduzir o nome MESMO igual ao que está na BD?

Alem disso, eu como desconhecia o comando find fiz de outra forma.

Private Sub Command1_Click()
    Adodc1.Recordset.MoveFirst
    Do Until Adodc1.Recordset.EOF = True
        If LCase$(Text_designacao) Like "*" & LCase$(Text1) & "*" Then
            GoTo sair
        End If
        Adodc1.Recordset.MoveNext
    Loop
sair:
End Sub

Onde text_designacao é um textbox que está no form (no meu caso visivel, mas pode-se meter invisivel) e text1 é outra textbox que está no form não fix input box, mas vai dar ao mesmo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois. Agora durante o almoço, tive a pensar nisso. :D

Ainda me sentei num banco ao sol a pensar como fazer e lembrei-me duma coisa mais ou menos desse genero :)

Isso tambem serve e se não conseguir fazer da forma que eu queria fica assim.

Mas eu tava a pensar em o VB ir a BD ver procurar, em vez de correr no programa todos os registos.

EDIT:

d_pintassilgo tu a usares o ADODC ao especiicares o caminho da BD como é que metes???

Eu tenho que escrever tudo, assim: "

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\se7en\Ambiente de trabalho\[Project][VB6] DVD Collector\BDA\movies.mdb;Persist Security Info=False

Enquanto com o DATA, basta por assim:

.\BDA\movies.mdb

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu no DATA já não uso. Agora e só adodc. Aquilo é automatico, mas vou lá ver o código...

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\David Pintassilgo\Desktop\Projecto HISC\bd1.mdb;Persist Security Info=False

Axo que está igual ao teu.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, mas por exemplo se eu levar o Projecto para outro PC não deve de dar para aceder a BD.

Porque esta escrito que o caminho é este:

-> C:\Documents and Settings\se7en\Ambiente de trabalho

E se levasse ao teu PC ja era:

->C:\Documents and Settings\David Pintassilgo\Desktop

e assim o VB ja não conseguia aceder a BD, enquanto que com o BATA ao permitir so  .\BDA\movies.mdb  ja dá. :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Yá,...tb já vi isso, mas isso resolve-se no fim com o instaler do programa. (não sei ainda como, mas logo se ve)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Novo problemas :?

Os registos tem um numero, quando apago um registo que esteja no meio fica la um lugar vazio.

Do genero, tenho [1] [2] [3] [4] [5] se apagar o [3] fico com [1] [2] [4] [5]

Fz um codigo assim:

Private Sub cmdEliminar_Click()
Dim IDFILME As Integer

    BaseDados.Recordset.Delete
    BaseDados.Recordset.MovePrevious
    BaseDados.Recordset.Edit
    IDFILME = txtIDFilme.Text
    
    Do Until BaseDados.Recordset.EOF = True
        IDFILME = IDFILME + 1
        BaseDados.Recordset.MoveNext
        txtIDFilme.Text = IDFILME
    Loop
    
    BaseDados.Recordset.Update
    BaseDados.Recordset.MoveFirst

End Sub

Mas da-me erro no "BaseDados.Recordset.MoveNext" que esta dentro do Do Until ... Loop

O erro é:

Run-Time Error '3426'
Esta acção foi cancelada por um objecto associado.

Alguem sabe o que podera ser???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tu ao apagares o registo [3] ficas com    [1][2][4][5] ou [1][2][][4][5] ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fico com [1][2][4][5]

Se abrir a BD no Access ta la: [1][2][4][5] e a linha do [3] desapareceu, foi apagada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então! se desaparece mesmo tá fixe! Não tens problema nenhum. Se fazes mesmo questão de "ocupar" todos os numeros, podes sempre fazer uma coisa:

Deixas tar assim com está ao eliminar

Ao introduzir, vai ter en atençao de usar nº que faltem, (tipo, uma pesquiza 1º pra ver se há algum espaco vazio)

Ordenar.

É capaz de haver alguma maneira mais simples de fazer isso, nao sei. É a unica forma que me vem á cabeça agora.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ja trabalha :D

1º tinha a BD no Access a fazer no ID numeração Automatica, tirei isso e fiz umas alteraçoes no codigo.

Private Sub cmdEliminar_Click()
Dim IDFILME As Integer

    IDFILME = txtIDFilme.Text
    BaseDados.Recordset.Delete
    
    If BaseDados.Recordset.RecordCount = (IDFILME - 1) Then
        BaseDados.Recordset.MoveFirst
        Exit Sub
    Else
        BaseDados.Recordset.MoveNext
        BaseDados.Recordset.Edit
        Do While BaseDados.Recordset.EOF = False
            txtIDFilme.Text = IDFILME
            BaseDados.Recordset.MoveNext
            IDFILME = IDFILME + 1
        Loop
    
        BaseDados.Recordset.MoveFirst
        
    End If

Se reparares alterei a condição di IF porque me esta a chatear, mas vou tentar voltar para o AEF :)

Mas assim ja quando Elimino por exemplo o [3] ele altera o [4] [5] para [3] [4].

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, mas por exemplo se eu levar o Projecto para outro PC não deve de dar para aceder a BD.

Porque esta escrito que o caminho é este:

-> C:\Documents and Settings\se7en\Ambiente de trabalho

E se levasse ao teu PC ja era:

->C:\Documents and Settings\David Pintassilgo\Desktop

e assim o VB ja não conseguia aceder a BD, enquanto que com o BATA ao permitir so  .\BDA\movies.mdb  ja dá. ;)

Exactamente como disseste, não iria dar noutro PC devido ao caminho que está definido para carregar a BD, mas poderás dar a volta a isso usando o App.Path

Exemplo:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\bd1.mdb;Persist Security Info=False"

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora