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]Aplicação access de 32 bits não roda em 64 bits

    avatar
    jpaulorh
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Aplicação access de 32 bits não roda em 64 bits Empty [Resolvido]Aplicação access de 32 bits não roda em 64 bits

    Mensagem  jpaulorh 11/6/2014, 17:26

    Amigos tenho uma aplicação que fiz em access para programação de férias dos funcionários e coloquei na intranet, acontece que temos 15 filiais e algumas tem máquinas com office 32 bits e outras com 64 bits.
    Na de 32 bits roda perfeitamente porém nas de 64 bits dá erro.

    Fiz da seguinte forma mas não está dando certo.

    Option Compare Database
    Option Explicit
    #If VBA7 Then
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Public Declare PtrSafe Function GetFocus Lib "user32" () As LongPtr
    #Else
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Public Declare Function GetFocus Lib "user32" () As Long
    #End If


    Usei também esta:

    #If VBA7 Then
    'Área comum do Access 2010 de 32 bits e 64 bits
    Declare ptrsafe Function GetActiveWindow Lib "user32" () As LongPtr 'Declare ptrsafe Function GetActiveWindow Lib "user32" () As LongPtr
    #If Win64 Then
    'Área exclusiva do Access 2010 de 64 bits
    Declare ptrsafe Function GetTickCount64 Lib "kernel32" () As LongLong
    #Else
    'Área exclusiva do Access 2010 de 32 bits
    Declare ptrsafe Function GetTickCount Lib "kernel32" () As Long
    #End If
    #Else
    'Área do Access 2007 e inferiores
    Declare Function GetActiveWindow Lib "user32" () As Long
    Declare Function GetTickCount Lib "kernel32" () As Long
    #End If

    Em todas as situações dá um erro de compilação.

    Alguém pode dá uma luz... Estou precisando urgente corrigir este problema. A reinstalação do access de 32 bits torna-se inviável.
    Agradeço desde já a ajuda de vocês.

    Obrigado...
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Aplicação access de 32 bits não roda em 64 bits Empty Re: [Resolvido]Aplicação access de 32 bits não roda em 64 bits

    Mensagem  Avelino Sampaio 11/6/2014, 20:27

    Olá!

    Quais as reais APIs vc usa no seu projeto?

    Se seu Access for 2010 ou 2013, sendo 32 ou 64 irá cair na parte em vermelho.

    #If VBA7 Then
    '2010 ou 2013 de 32 ou 64 bits
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Public Declare PtrSafe Function GetFocus Lib "user32" () As LongPtr

    #Else
    '2007 ou inferior
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Public Declare Function GetFocus Lib "user32" () As Long
    #End If

    Que tipo de erro acusa ?

    Aguardamos


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


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Aplicação access de 32 bits não roda em 64 bits Empty Re: [Resolvido]Aplicação access de 32 bits não roda em 64 bits

    Mensagem  jpaulorh 11/6/2014, 21:48

    Olá Avelino, boa tarde!

    Descobri o problema. De fato o código abaixo está correto:

    #If VBA7 Then
    '2010 ou 2013 de 32 ou 64 bits
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Public Declare PtrSafe Function GetFocus Lib "user32" () As LongPtr
    #Else
    '2007 ou inferior
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Public Declare Function GetFocus Lib "user32" () As Long
    #End If

    Fui rastrear o por que (?) do erro e descobri o seguinte:

    Adaptei ao meu sistema um auditor que encontrei em

    Candace Tripp
    ctripp1@earthlink.net
    http://www.candace-tripp.com/

    que registra as alterações ocorridas em que tabela e em que campos. Acontece que nesse auditor coloquei para capturar o

    USUÁRIO DA REDE
    IP DA MÁQUINA

    E, portanto essas declarações não funcionam em 64 bits

    Private Declare Function apiGetUserName Lib "advapi32.dll" Alias _
    "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long


    a outra foi:


    Private Declare Function apiGetComputerName Lib "kernel32" Alias _
       "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

    e a outra:

    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
    Public Declare Function GetIpAddrTable Lib "IPHlpApi" (pIPAdrTable As Byte, pdwSize As Long, ByVal Sort As Long) As Long

    E, gostaria de manter esse auditor, pois existem algumas alterações que preciso que sejam registradas e por quem, isso é essencial.
    O exemplo que usei é muito prático. Existe uma forma de fazer funcionar as declarações acima tanto em 32 como 64 bits

    Obrigado,
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Aplicação access de 32 bits não roda em 64 bits Empty Re: [Resolvido]Aplicação access de 32 bits não roda em 64 bits

    Mensagem  Avelino Sampaio 12/6/2014, 01:54

    Todas as APIs para 2010 em diante devem receber pelo menos o prefixo PtrSafe

    Baixe do meu artigo o arquivo TXT, que possui centenas de APIs já devidamente modificadas.  Todas as APIs indicadas por você estão na lista do Txt.

    https://www.usandoaccess.com.br/tutoriais/configurar-api-access-de-64-e-32-bits-ptrsafe.asp?id=1#inicio

    Bom estudo!
    avatar
    jpaulorh
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Aplicação access de 32 bits não roda em 64 bits Empty Re: [Resolvido]Aplicação access de 32 bits não roda em 64 bits

    Mensagem  jpaulorh 20/6/2014, 19:27

    Obrigado,

    resolvi quase tudo faltou apenas o IP...


    Conteúdo patrocinado


    [Resolvido]Aplicação access de 32 bits não roda em 64 bits Empty Re: [Resolvido]Aplicação access de 32 bits não roda em 64 bits

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 28/4/2024, 18:22