Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Neke funkcije na 64bitnom sistemu

[es] :: Access :: Neke funkcije na 64bitnom sistemu

[ Pregleda: 1708 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

BiloKoje
Beograd

Član broj: 40147
Poruke: 401



+4 Profil

icon Neke funkcije na 64bitnom sistemu25.12.2017. u 11:47 - pre 76 meseci
Acces baza je napravljena u .mdb formatu, zatim je updateovana u .accdb, radila je u Accessu 2010 na 32bitnom sistemu.
Na 64bitnom sistemu odmah prijavljuje grešku i pokazuje na modul u kojem se nalazi sledeći kod:

Code:

Option Compare Database

Option Explicit

Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
Declare Function ActivateKeyboardLayout Lib "user32" (ByVal hkl As Long, ByVal flags As Long) As Long
Declare Function UnloadKeyboardLayout Lib "user32" (ByVal hkl As Long) As Long
Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long

Const HKL_ENGLISH_US = "00000409"
Const HKL_ENGLISH_UK = "00000809"
Const HKL_CROATIAN = "0000041A"
Const HKL_SERBIAN_CYRILIC = "00000C1A"
Const HKL_SERBIAN_LATIN = "0000081A"

Public Enum acKeyboardLanguage
    hklEnglishUS
    hklEnhlishUK
    hklCroatian
    hklSerbianCyrilic
    hklSerbianlatin
End Enum

Function SetKeyboardLanguage(KeyboardLanguage As acKeyboardLanguage) As Boolean
    Dim hkl As Long
    SetKeyboardLanguage = False
    Select Case KeyboardLanguage
        Case hklEnglishUS:
            hkl = LoadKeyboardLayout(HKL_ENGLISH_US, 0)
        Case hklEnhlishUK
            hkl = LoadKeyboardLayout(HKL_ENGLISH_UK, 0)
        Case hklCroatian
            hkl = LoadKeyboardLayout(HKL_CROATIAN, 0)
        Case hklSerbianCyrilic
            hkl = LoadKeyboardLayout(HKL_SERBIAN_CYRILIC, 0)
        Case hklSerbianlatin
            hkl = LoadKeyboardLayout(HKL_SERBIAN_LATIN, 0)
    End Select
    If hkl <> 0 Then SetKeyboardLanguage = (ActivateKeyboardLayout(hkl, 0) <> 0)
End Function


Molim za pomoć, kako da menjam postavke jezika iz VBA koda u 64bitnom Accesu 2010.
Verovatno će biti i drugih problema sa starim funkcijama?
 
Odgovor na temu

SLOJ.1973

Član broj: 130198
Poruke: 871
*.dynamic.isp.telekom.rs.



+41 Profil

icon Re: Neke funkcije na 64bitnom sistemu26.12.2017. u 19:12 - pre 76 meseci
Nadjoh nesto ovde.Pozdrav.
Jednog dana...
 
Odgovor na temu

BiloKoje
Beograd

Član broj: 40147
Poruke: 401



+4 Profil

icon Re: Neke funkcije na 64bitnom sistemu27.12.2017. u 10:27 - pre 76 meseci
Hvala, ipak sam morao da vratim 32 bitni Office, ostao je W7 64bitni, tako da mi rade sva stara rešenja.
Možda u nekom momentu isprobam funkcije iz primera na drugom računaru.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Neke funkcije na 64bitnom sistemu27.12.2017. u 11:16 - pre 76 meseci
Pa, bilo bi svima lakše da si napisao i koju si grešku dobio.
Koliko vidim iz dokumentacije, funkcije ActivateKeyboardLayout, UnloadKeyboardLayout očekuju, na mestu gde si stavio long (hkl), 32-bitni integer podatak. Naravno da na 64-bitnom sistemu neće proći pozivanje funkcija iz user32.dll sa 64-bitnim podacima tamo gde se očekuju 32-bitni podaci.
 
Odgovor na temu

Dzaja
Foča

Član broj: 10098
Poruke: 31
31.223.142.*



Profil

icon Re: Neke funkcije na 64bitnom sistemu28.12.2017. u 08:35 - pre 76 meseci
Imao sam slične/iste probleme pa sam nakon malo guglanja našao rješenje. Zbog ovog članka, gdje MS sam preporučuje instalacije 32bitnog Offica na 64bitne sisteme - link za Office 2013, instaliram samo 32bitne verzije, ALI neki korisnici moraju silom prilika instalirati 64 (zahtjevi na poslu). U tom članku MS je tu negdje napisao da:
„VBA code that uses Declare statements must be updated“

Long tip podataka je isključivo 32bitni, trebalo bi ga promjeniti na LongLong (samo za 64) ili LongPtr (32/64) uključujući PtrSafe opis u svim deklaracijama.
- tada bi umjesto:
Citat:
Declare Function UnloadKeyboardLayout Lib "user32" (ByVal hkl As Long) As Long

- trebalo pisati:
Citat:
Declare PtrSafe Function UnloadKeyboardLayout Lib "user32" (ByVal hkl As LongPtr) As LongPtr

Pored ovoga, da bi kod radio i u VBA7 i VBA6, morao bi deklaracije ubaciti u IF petlju
Code:

#If Vba7 Then 
Declare PtrSafe Sub... 
#Else 
Declare Sub... 
#EndIf 


Evo na ovim linkovima je detaljnije objašnjeno 64bit VBA overview i deklaracije.


 
Odgovor na temu

[es] :: Access :: Neke funkcije na 64bitnom sistemu

[ Pregleda: 1708 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.