MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

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


2 participantes

    [Resolvido]DlookupX Avelino Sampaio

    avatar
    enduros
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12
    Registrado : 09/02/2012

    [Resolvido]DlookupX Avelino Sampaio Empty [Resolvido]DlookupX Avelino Sampaio

    Mensagem  enduros 21/8/2013, 21:00

    Olá pessoal,


    Acabei de descobrir a função do mestre Avelino (DlookupX).

    Primeiramente gostaria de parabenizar o mestre!

    Agora eu fiz uns testes utilizando ADO/MySQL e a função está funcionando adequadamente, desde que o primeiro critério seja um campo apenas.

    Por Exemplo:

    DLookupX("Campo1", "Tabela1")


    Se formos utilizar mais de um campo, a função retorna Zero.

    DLookupX("Campo1 & '-' & Campo2", "Tabela1")


    Lembrado que a função original Dlookup e também a DlookupX com acesso ao recordset via DAO permite essa situação.


    Alguém já testou com ADO/MySQL ou ADO/ACCDB?

    Funciona também?

    Agradeço desde já a todos vocês


    Segue a função modificada para testes

    Código:
    Public Function DlookupX(NomeCampo As Variant, nomeTabela As Variant, Optional filtro As String = "") As Variant
        Dim strConnect As String
        Dim strSql As String
        Dim strProvider As String
        Dim strDataSource As String
        Dim strDataBaseName As String
        Dim usr_id As String     ' identificacao do usuario para o banco de dados
        Dim pass As String       ' a senha (se tiver) para o banco de dados
        Dim mySqlIP As String    ' o endereco ip da maquina na qual esta o mySql
        
        On Error GoTo trataerro
        
        mySqlIP = "127.0.0.1"    ' a localizacao do usuario (localhost)
        strDataBaseName = "movedb"
        usr_id = "xxxxxx"    ' identificacao
        pass = "xxxxxx"       ' senha
        strConnect = "driver={MySQL ODBC 5.1 Driver};server=" & mySqlIP & ";uid=" & usr_id & ";pwd=" & pass & ";database=" & strDataBaseName

        Set adoDataConn = New ADODB.Connection
        adoDataConn.CursorLocation = adUseClient
        adoDataConn.Open strConnect

        Set rsMySQL = New ADODB.Recordset

        rsMySQL.CursorType = adOpenStatic
        rsMySQL.CursorLocation = adUseClient
        rsMySQL.LockType = adLockReadOnly
        
        
        strSql = "Select (" & NomeCampo & ") AS k FROM " & nomeTabela & IIf(filtro = "", ";", " WHERE " & filtro & ";")
        
        rsMySQL.Source = strSql
        rsMySQL.ActiveConnection = adoDataConn
        rsMySQL.Open

        DlookupX = rsMySQL("K")
        
        rsMySQL.Close

        Set rsMySQL = Nothing
        
    sair:
        Exit Function
    trataerro:
    Select Case Err.Number
        Case 3061: MsgBox "DLookupX - Campo inexistente...", vbInformation, "Aviso"
        Case 3031: MsgBox "DLookupX - Conexão fechada com a base de dados...", vbInformation, "Aviso"
        Case 3078: MsgBox "DlookupX - Tabela inexistente...", vbInformation, "Aviso"
        Case 3464: MsgBox "DlookupX - Tipos de dados incopatíveis...", vbInformation, "Aviso"
        Case 3021: DlookupX = Null
        Case Else
            MsgBox "DLookupX - " & Err.Description & " Nº: " & Err.Number
    End Select
    End Function


    Última edição por enduros em 22/8/2013, 14:08, editado 1 vez(es)
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3900
    Registrado : 04/04/2010

    [Resolvido]DlookupX Avelino Sampaio Empty Re: [Resolvido]DlookupX Avelino Sampaio

    Mensagem  Avelino Sampaio 22/8/2013, 08:11

    Olá!

    Experimente colocando o nome dos campos entre colchetes. Exemplo:

    DLookupX("[Campo1] & '-' & [Campo2]", "Tabela1")

    Desta forma como vc colocou ele pode estar interpretando como se fosse um único campo

    "Campo1 & '-' & Campo2"

    Sucesso!


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    avatar
    enduros
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12
    Registrado : 09/02/2012

    [Resolvido]DlookupX Avelino Sampaio Empty Re: [Resolvido]DlookupX Avelino Sampaio

    Mensagem  enduros 22/8/2013, 13:52

    Obrigado Avelino,

    Porém com colchetes não retorna nem para um campo.

    Dá erro de sintaxe.

    [MySQL][ODBC 5.1 Driver][mysqld-5.5.27]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[Campo1]) AS k FROM Tabela1' at line 1 Nº: -2147217900

    Tem a função do MySql concat, para concatenar campos em consultas, mas também não consegui aplicar.

    Sigo tentando.

    Obrigado!


    Estou editando, pois me deu uma luz e consegui o resultado pretendido.

    alterar a função na linha que segue:

    Código:
       strSql = "Select (" & NomeCampo & ") AS k FROM " & nomeTabela & IIf(filtro = "", ";", " WHERE " & filtro & ";")
      inclua o concat conforme abaixo
       
    Código:
      strSql = "Select Concat (" & NomeCampo & ") AS k FROM " & nomeTabela & IIf(filtro = "", ";", " WHERE " & filtro & ";")


    Como que se usa?

    Código:
    DLookupX("Campo1,'-',Campo2", "Tabela1")
    Não se usa colchetes e cada membro a ser concatenado deve ser separado por vírgula.

    Outro Exemplo Com Where

    Código:
    DLookupX("Campo1,'-',Campo2", "Tabela1","id=1")
    Lembrando que separei os 2 campos com um Hifen, utilizando '-', mas não é necessário. Se não usar nenhuma string para separar os dois campos eles vao ser concatenados em sequencia sem separador.

    Valew Avelino!
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3900
    Registrado : 04/04/2010

    [Resolvido]DlookupX Avelino Sampaio Empty Re: [Resolvido]DlookupX Avelino Sampaio

    Mensagem  Avelino Sampaio 22/8/2013, 14:15

    Obrigado pelo feedback e sucesso!


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.

    Conteúdo patrocinado


    [Resolvido]DlookupX Avelino Sampaio Empty Re: [Resolvido]DlookupX Avelino Sampaio

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 21/11/2024, 23:10