MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

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)
    avatar
    Marco Messa
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 282
    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 )
    avatar
    Marco Messa
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 282
    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 21 Out 2017, 09:37