MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Como é que posso comparar objectos ? TEhno um bug num «if» "JaExisteNaTabela" retorna "false" quando devia ser "True"

    Compartilhe

    rui.o.pereira
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 20
    Registrado : 19/01/2014

    [Resolvido]Como é que posso comparar objectos ? TEhno um bug num «if» "JaExisteNaTabela" retorna "false" quando devia ser "True"

    Mensagem  rui.o.pereira em Ter 30 Set 2014, 20:43

    Viva Pessoal,

    tenho uma classe pessoa, com um método (função da classe) "JaExisteNaTabela" que me retorna "false" quando não devia de o fazer,
    (tudo porque tenho um "if" mal feito, mas não não o que está mal....)

    Código:
    'Existe na tabela
    Public Function JaExisteNaTabela() As Boolean
    ' Esta Função mostra como se pode aceder à tabela "pessoa"

        JaExisteNaTabela = False
        Dim GrelhaResultadosDePessoa As DAO.Recordset 'Declara um objecto que vai ficar com os resultados que já _
        estão na tabela de tabela "Pessoa"
        Dim campo_ID As Long
        Dim campo_Nome, campo_Apelido As String
        Dim campo_DataDeNascimento As Date
        ' refere a esta Base de dados
        Set GrelhaResultadosDePessoa = CurrentDb.OpenRecordset("pessoa") 'Acede à tabela e reserva o espaço em memória com _
        os registos que extraiu da tabela. Põe os registos que foi buscar à tabela numa grelha de resultados.
        While Not GrelhaResultadosDePessoa.EOF 'Enquanto a grelha não chegar ao Fim. _
                                                    a propriedade "EOF" fica a "TRUE" quando chegar ao fim da grelha
            campo_ID = GrelhaResultadosDePessoa.Fields("ID").Value ' Aqui é extraído o valor de "ID" que está na grelha
            campo_Nome = GrelhaResultadosDePessoa.Fields("Nome").Value
            campo_Apelido = GrelhaResultadosDePessoa.Fields("Apelido")
            campo_DataDeNascimento = CDate(GrelhaResultadosDePessoa.Fields("DataDeNascimento"))
            [color=#ff0000]If StrComp(nome, campo_Nome)=true And StrComp(apelido, campo_Apelido)=true  And campo_DataDeNascimento = DataDeNascimento Then[/color]
                JaExisteNaTabela = True
            End If
            GrelhaResultadosDePessoa.MoveNext ' Avança para o próximo registo da Grelha com os registo
        Wend
        GrelhaResultadosDePessoa.Close
    End Function
    Tenho um "bug" naquele "if",

    Código:
            If (StrComp(nome, campo_Nome, vbTextCompare) = True) And (StrComp(apelido, campo_Apelido, vbTextCompare) = True) And (campo_DataDeNascimento = DataDeNascimento) Then

    Será que criei 2 objectos "date" completamente distintos, e nunca são iguais? (mesmo quando o valor é igual).

    Será que tenho de converter as duas datas para string, (com a função "str") ? e depois usar também o strcomp nas datas convertidas em string ? e comparar depois o texto?



    ..Ou será que tenho uma forma mais simples de ver se o registo existe (sem ser por chave primária) na minha classe "Pessoa" no método "JaExisteNaTabela", por favor vejam-me a bd.


    Desculpem a maçada...
    Anexos
    Exemplo4(com objectos e métodos de manipulação de tabelas).zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (34 Kb) Baixado 3 vez(es)

    Marco Messa
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 283
    Registrado : 28/06/2010

    Re: [Resolvido]Como é que posso comparar objectos ? TEhno um bug num «if» "JaExisteNaTabela" retorna "false" quando devia ser "True"

    Mensagem  Marco Messa em Ter 21 Out 2014, 14:05

    Rui, você poderia fazer essa busca no bd de uma maneira muito mais simples e eficiente, pois percorrer todos os registros em um laço pode ser lento dependendo da quantidade de registros.

    Um exemplo do que você poderia utilizar é o DLookUp, que pode se aplicar ao seu exemplo da seguinte maneira:

    Código:
    DLookup("Nome", "pessoa", "Nome = '" & ParametroNome & "' And Apelido = '" & ParametroApelido & "' And DataDeNascimento = & "'")

    A função acima retornaria o nome da pessoa caso encontre um registro com os parâmetros especificados.

    Agora indo diretamente ao seu problema, você já usou a depuração para verificar se as variáveis nome, apelido e campo_DataDeNascimento possuem valor quando chegam nesse IF, pois com o trecho de código que você informou aqui, não é possível saber onde as mesmas foram definidas.


    .................................................................................
    Tea with me that I book your face [Você precisa estar registrado e conectado para ver esta imagem.]

    rui.o.pereira
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 20
    Registrado : 19/01/2014

    Obrigado, Marco Afinal era uma solução simples

    Mensagem  rui.o.pereira em Ter 21 Out 2014, 14:08

    Obrigado, Marco Afinal era uma solução simples.


    Isto é um método de uma classe que eu criei, no IF estão as 3 propriedades da classe (são comparadas com o que fui buscar à tabela )

    Marco Messa
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 283
    Registrado : 28/06/2010

    Re: [Resolvido]Como é que posso comparar objectos ? TEhno um bug num «if» "JaExisteNaTabela" retorna "false" quando devia ser "True"

    Mensagem  Marco Messa em Ter 21 Out 2014, 14:28

    É muito importante sempre utilizar a depuração nesses casos, usando inspeção de variáveis e os recursos que o VBA proporciona para encontrar pequenos erros em nosso código.
    De qualquer maneira o importante é que o problema foi resolvido, afinal, você descobriu o porque as propriedades da classe não estavam iguais aos valores buscados ou acabou utilizando a função mesmo?

    É sempre bom marcar qual post resolveu o seu problema para que outras pessoas consigam localizar quando tiverem o mesmo problema.

    Abraço


    .................................................................................
    Tea with me that I book your face [Você precisa estar registrado e conectado para ver esta imagem.]

      Data/hora atual: Sab 10 Dez 2016, 06:50