Jestesmy w srodowisku runtime. Jak z poziomu VB
odczytac, czy zostal(y) wgrane jakiekolwiek
service pack'i ? Czy wogole da sie wyczytac ?
(Dotyczy glownie a2k, mniej a9x)
Ciao, Rafal
P.S: Za cholere nie moge sie dogadac z helpem.
Ja swoje, a on swoje :-|
> Jestesmy w srodowisku runtime. Jak z poziomu VB
> odczytac, czy zostal(y) wgrane jakiekolwiek
> service pack'i ? Czy wogole da sie wyczytac ?
> (Dotyczy glownie a2k, mniej a9x)
taaaa, tam sie juz nie zaglada ?
http://www.mvps.org/access/api/api0065.htm
> P.S: Za cholere nie moge sie dogadac z helpem.
> Ja swoje, a on swoje :-|
hmmm, to trzeba polubic ;-)
ja osobiscie pytam juz tylko z poziomu edytora kodu: slówko + F1
a jak wiem co szukam (!?), to oczywiscie w drzewku helpa - ale to nie metoda
...
--
KN
Może wystarczy Ci sprawdzić wersję providera?
?CurrentProject.Connection.Properties("Provider Version")
Wydaję mi się, że ten numer zmienia się wraz z zainstalowaniem SP do Jeta.
Pozdrawiam
Grzegorz
--
Archiwum grupy: http://niusy.onet.pl/pl.comp.bazy-danych.msaccess
> taaaa, tam sie juz nie zaglada ?
Mea maxima culpa :-|. O tym nie pomyslalem.
> http://www.mvps.org/access/api/api0065.htm
Spodziewalem sie, ze bedzie jakies swinstwo.
Bawi mnie inna rzecz:
?fGetProductVersion(SysCmd(acSysCmdAccessDir) & "msaccess.exe")
9.0.0.4506
Natomiast Menu->Info (msinfo32.exe tez):
9.0.4402 SR1
O to jedno zero sie nie kluce, ale ... Co prawda
obie wartosci swiadzylyby o zainstalowanym SR1
(> 9.0.0.3822), ale komu wierzyc ?
Dzieki za podpowiedzi, Rafal
> > Jestesmy w srodowisku runtime. Jak z poziomu VB
> > odczytac, czy zostal(y) wgrane jakiekolwiek
> > service pack'i ? Czy wogole da sie wyczytac ?
> > (Dotyczy glownie a2k, mniej a9x)
> Może wystarczy Ci sprawdzić wersję providera?
>
> ?CurrentProject.Connection.Properties("Provider Version")
>
> Wydaję mi się, że ten numer zmienia się wraz z zainstalowaniem SP do Jeta.
>
Rzeczywiście ... Dobrze wiedzieć o tej właściwości :-)
Od razu napisałem sobie funkcyjkę:
Function GetProviderVersion()
Dim sp(0 To 7) As Long
Dim cv As Long, pv As Integer, i As Integer
'---------------------------------------------------------------------
' msjetoledb40.dll "
'---------------------------------------------------------------------
sp(0) = 0
sp(1) = 2927 ' nie było
sp(2) = 2927 ' nie było
sp(3) = Split("4.00.2927.2", ".")(2) ' - Jet 4.0 SP3 (October 11, 1999)
sp(4) = Split("4.00.3714.0", ".")(2) ' - Jet 4.0 SP4 (April 26, 2000)
sp(5) = Split("4.00.4331.4", ".")(2) ' - Jet 4.0 SP5 (October 26, 2000)
sp(6) = Split("4.00.5919.0", ".")(2) ' - Jet 4.0 SP6 (April 15, 2002)
sp(7) = 5920 'na przyszłość ;-)
cv = Split(CurrentProject.Connection.Properties("Provider Version"),
".")(2)
For i = 0 To 7
pv = pv - (cv >= sp(i))
Next
GetProviderVersion = "SP " & (pv - 1)
End Function
To co podaje Ashish tez ma swój sens, ale dla nas accessowców jakby mniejszy
...
Office SR1 i SR1a głównie poprawiają pozostałe produkty a w zakresie
access'a chyba jedynie dublują Jet4.0SP# (???)
--
KN
> Bawi mnie inna rzecz:
>
> ?fGetProductVersion(SysCmd(acSysCmdAccessDir) & "msaccess.exe")
> 9.0.0.4506
>
> Natomiast Menu->Info (msinfo32.exe tez):
>
> 9.0.4402 SR1
>
> O to jedno zero sie nie kluce, ale ... Co prawda
> obie wartosci swiadzylyby o zainstalowanym SR1
> (> 9.0.0.3822), ale komu wierzyc ?
W tym rzecz ze MS poprzez msinfo32.exe nie pokazuje wlasciwej wersji.
Stad niemoznosc rozróznienia miedzy SR1 a SR1a czy nawet SR2
Porównaj z:
http://support.microsoft.com/default.aspx?scid=KB;EN-US;q278269
(...)
Office Program Version in "About" Dialog Box
-------------------------------------------------------
Microsoft Access (9.0.4402 SR-1)
File Version
--------------------------------------------------------
msaccess.exe 9.0.0.4506
--
KN
P.S.
Wersja providera (odpowiedz Grzeska) wydaje sie bardziej szczególowa
> Rzeczywiście ... Dobrze wiedzieć o tej właściwości :-)
> Od razu napisałem sobie funkcyjkę:
Jak jeszcze powiesz, ze zabudowales ja w Swoje
aplikacje w menu -> ? -> Info, to cie posadze
o plagiat ;-)
> Office SR1 i SR1a głównie poprawiają pozostałe produkty a w zakresie
> access'a chyba jedynie dublują Jet4.0SP# (???)
Wiem, ze db-System MS-Jet jest dostepny poza pakietem office.
Mozna go uzywac jako RDBMS takze z poziomu innych jezykow prog.
Chociaz pod windowsem wszystko instaluje sie na opak. Wystarczy
zainstalowac IE i juz mamy bez pytania Outlook, MS JVM i cala
rzesze innych smieci. Ale to juz OT.
Ciao, Rafal
P.S: Wlasnie szukam po i-net'ie opisu wlasciwosci
polaczen. Niektore sa dosc zagadkowe. Patrz:
dim prop as Property
For Each prop In CurrentProject.Connection.Properties
Debug.Print prop.Name & " -> " & prop.Value
Next
> > Od razu napisałem sobie funkcyjkę:
>
> Jak jeszcze powiesz, ze zabudowales ja w Swoje
> aplikacje w menu -> ? -> Info, to cie posadze
> o plagiat ;-)
nie mówi się "to cie posadze o plagiat" tylko
"to cie posadze ZA plagiat"
:-))))
> P.S: Wlasnie szukam po i-net'ie opisu wlasciwosci
> polaczen. Niektore sa dosc zagadkowe. Patrz:
>
> dim prop as Property
> For Each prop In CurrentProject.Connection.Properties
> Debug.Print prop.Name & " -> " & prop.Value
> Next
poszło Ci z
Dim prop As Property ?
bo ja musiałem dać Object ...
ale mniejsza, rzeczywiście niezła lista ...
Jeszcze ciekawsza by była, gdyby można dowiedzieć się, które z nich RO a
które RW.
Zwykły przechwyt błędu przy
prop.Value = prop.Value
coś niby daje, ale niestety bardzo mało wiarygodne:
rw > Identifier Case Sensitivity -> 8
ale też:
rw DBMS Version -> 04.00.0000
rw Maximum Index Size -> 255
rw Maximum Row Size -> 4049
;-)))
Część z nich opisana jest oczywiście przy okazji DbEngine.SetOption
--
KN
> poszło Ci z
> Dim prop As Property ?
> bo ja musiałem dać Object ...
>
o, ja cipa głupia ...
no przecież nie używam ADO ...
;-))))
KN
> >
> > ?fGetProductVersion(SysCmd(acSysCmdAccessDir) & "msaccess.exe")
> > 9.0.0.4506
Nie mogę się oprzeć ...
Krzysiek Pozorek na swojej stronie umieścił cala serie nieudokumentowanych
SysCmd(), które udało mu się rozszyfrować:
http://www.access.vis.pl/af0424a.htm
m.in. (choć jeszcze nie umieścił):
? SysCmd(715)
4506
Gdyby nie ten watek, w życiu bym nie zrozumiał, co ta funkcja zwraca ...
***
Był sobie kiedyś watek o pisaniu w Access'ie (2000) wieloma językami
i było pytanie jak programowo w Access'ie przełączać klawiaturę:
polska> grecka > rosyjska > turecka itd.
O ile do samodzielnego przełączania klawiatury możemy ustawić globalny
windowsowy gorący klawisz - co pozwala różnymi czcionkami (językami) pisać
nawet w tym samym polu - to jak to zrobić programowo ?
Np. mamy tabele z polami [polski], [grecki], [rosyjski]
I znów, dzięki Krzyskowi, wszystko jasne:
Private Sub grecki_Enter()
SysCmd 710, 67634184 'GR
End Sub
Private Sub grecki_Exit(Cancel As Integer)
SysCmd 710, 68486165 'PL
End Sub
Private Sub rosyjski_Enter()
SysCmd 710, 68748313 'RU
End Sub
Private Sub rosyjski_Exit(Cancel As Integer)
SysCmd 710, 68486165 'PL
End Sub
Oczywiście to tylko szkic - klawiatury musza być w systemie zainstalowane,
bo inaczej SysCmd zwróci niepowodzenie = 0
***
i jeszcze jedna:
SysCmd(609)
Zwraca PID procesu (to samo co zwraca Shell())
Tylko do czego to wykorzystać ? Większość API jakie znam potrzebują uchwytu
okna i to właśnie głównie o to chodzi:
jak z PID zwróconego przez Shell uzyskać uchwyt hwnd
(gdzieś - chyba u Asisha jest algorytm)
Mnie się nasunęło jedno wykorzystanie, odnośnie niedawnego wątku z
automatyzacja:
"Schowek Ctrl+C Ctrl+V"
(...)
x = Shell(app & " " & _
Chr(34) & dbs & Chr(34) & _
" /nostartup" & _
" /user " & usr & _
" /pwd " & pas & _
" /wrkgrp " & Chr(34) & wrk & Chr(34), _
vbMinimizedFocus)
Set accObj = GetObject(dbs)
' no właśnie - czy accObj jest ta aplikacja wywołana Shell'em, czy kolejna
lub poprzednia instancja ?
If accObj.SysCmd(609)<>x Then
' to inna instancja !
Może ktoś zaproponuje inne użycie ?
--
KN
> SysCmd(609)
> Zwraca PID procesu (to samo co zwraca Shell())
>
> Tylko do czego to wykorzystać ?
Ciekawy rodzaj podejscia do problemu :-)
> Większość API jakie znam potrzebują uchwytu
> okna i to właśnie głównie o to chodzi:
> jak z PID zwróconego przez Shell uzyskać uchwyt hwnd
> (gdzieś - chyba u Asisha jest algorytm)
Ze starych czasow pamietam, ze windows _wie_ jakie
okna naleza do jakiego procesu.
> (...)
> x = Shell(app & " " & _
> Chr(34) & dbs & Chr(34) & _
> " /nostartup" & _
> " /user " & usr & _
> " /pwd " & pas & _
> " /wrkgrp " & Chr(34) & wrk & Chr(34), _
> vbMinimizedFocus)
>
> Set accObj = GetObject(dbs)
>
> ' no właśnie - czy accObj jest ta aplikacja wywołana Shell'em, czy kolejna
> lub poprzednia instancja ?
Przy uzyciu:
Set accObj = GetObject(dbs, "Access.Application")
powinienes trafic ta wlasnie wywolana instancje.
Ale co sie stanie jak wywolasz Shell(jak wyzej)
kilkakrotnie ?
Ciao, Rafal
> > SysCmd(609)
> > Zwraca PID procesu (to samo co zwraca Shell())
> >
> > Tylko do czego to wykorzystać ?
>
> Ciekawy rodzaj podejscia do problemu :-)
Wyczuwam lekką kpinę ...
;-)
Skoro do tej pory nigdzie tego PID'a nie potrzebowałem, to pewnie do niczego
mi się nie przyda ...
Ale może być i tak, że do tej pory pewne uwidziane algorytmy momentalnie w
głowie kasowałem, bo potrzebowały jakiegoś PID'a ...
> > Większość API jakie znam potrzebują uchwytu
> > okna i to właśnie głównie o to chodzi:
> > jak z PID zwróconego przez Shell uzyskać uchwyt hwnd
> > (gdzieś - chyba u Asisha jest algorytm)
>
> Ze starych czasow pamietam, ze windows _wie_ jakie
> okna naleza do jakiego procesu.
>
Windows raczej na pewno wie - gorzej z programistą ;-)
> > (...)
> > x = Shell(app & " " & ...)
> > (...)
> > Set accObj = GetObject(dbs)
> >
> > ' no właśnie - czy accObj jest ta aplikacja wywołana Shell'em, czy
kolejna
> > lub poprzednia instancja ?
>
> Przy uzyciu:
>
> Set accObj = GetObject(dbs, "Access.Application")
>
> powinienes trafic ta wlasnie wywolana instancje.
> Ale co sie stanie jak wywolasz Shell(jak wyzej)
> kilkakrotnie ?
Właśnie.
1.
Aplikacja mogła już być odpalona, np. z niewłaściwą grupą roboczą albo z
logowaniem innego użytkownika.
2.
GetObject może zajść za szybko, jeszcze przed zadziałaniem asynchronicznego
Shell
U Ashisha zauważyłem ten sam algorytm, z przedzielającą linijką:
DoEvents: DoEvents: DoEvents: DoEvents
Ale masz rację - co ja tu będę wynajdywał zastosowania. Same się pojawią ...
albo i nie.
--
KN