Od jakiegoś czasu trochę sobie grzebię w Accessie 2000 i zastanawia mnie
jedna rzecz. Access 2000 ma dwie (??) metody dostępu do danych:
1. DAO - stara metoda dostępu, mało wydajna
2. ADO - metoda nowa, związana z techniką ActiveX, dostępna od wersji
silnika Jet 4.0, wysokowydajna ...
Rozumiem, że:
1. Z DAO korzystam wtedy, gdy wydaję zapytania SQL pisane w widoku SQL
kwerendy?
2. Z ADO nie mogę korzystać w widoku SQL kwerendy?
3. Z DAO korzystać mogę również wydając zapytania z poziomu VBA z użyciem
polecenia: DoCmd.RunSQL (czy jakiegoś jeszcze ??)?
4. Z ADO korzystać mogę łącząc się z bazą danych SQL Server 2000, ORACLE,
lub plikiem Accessa *.mdb, używająć w VBA zmiennych typu ADODB.* i wykonując
działania na nich (??)
Czy mógłby ktoś odpowiedzieć czy to co napisałem powyżej jest prawdą, czy
nie i ewentualnie coś więcej na ten temat dodać.
Pozdrawiam
Radosław Brunke
Obawiam się, że zupełnie nie tak. ADO i DAO to dwie alternatywne metody
dostępu do danych w MS Access, z któych każda ma swoje ograniczenia i
zalety. W pewnych sytuacjach można stosować tylko ADO, w pewnych tylko DAO,
a w jeszcze innych którąkolwiek z nich. To z której metody lepiej
skorzystać, zależy od wielu czynników.
Proponuję, abyś najpierw oczytał się, a potem zadawał konkretne pytania.
Zacznij od archiwum grupy, przy czym im starsze posty tym rzecz jasna mniej
wiarygodne.
Zajrzyj też tu: http://70.85.90.150/forum/showthread.php?s=&threadid=2606
Pozdrawiam,
Krzysiek
> Obawiam się, że zupełnie nie tak. ADO i DAO to dwie alternatywne metody
> dostępu do danych w MS Access, z któych każda ma swoje ograniczenia i
> zalety. W pewnych sytuacjach można stosować tylko ADO, w pewnych tylko
> DAO, a w jeszcze innych któr±kolwiek z nich. To z której metody lepiej
> skorzystać, zależy od wielu czynników.
> Proponuję, aby¶ najpierw oczytał się, a potem zadawał konkretne pytania.
> Zacznij od archiwum grupy, przy czym im starsze posty tym rzecz jasna
> mniej wiarygodne.
> Zajrzyj też tu: http://70.85.90.150/forum/showthread.php?s=&threadid=2606
> Pozdrawiam,
> Krzysiek
No dobra, nie ukrywam, że moje pytanie wynika z braku wiedzy teoretycznej na
ten temat. Powiem czym się sugerowałem:
Tworzę sobie tebelę z polem o typie danych decimal:
Widok SQL kwerendy - piszę
CREATE TABLE tabela (liczba DECIMAL);
po próbie uruchomienia Access zgłasza błąd: "Błąd składniowy w definicji
pola"
No dobra myślę, typ decimal jest dostępny tylko w ADO, musisz utworzyć sobie
procedurę:
Private Sub tabela()
Dim zapytanie As String
On Error GoTo blad
zapytanie = "CREATE TABLE tabela (liczba3 DECIMAL)"
CurrentProject.Connection.Execute zapytanie
MsgBox "Stworzyłem tabelę!", vbInformation
koniec:
Exit Sub
blad:
MsgBox Err.Description, vbCritical
Resume koniec
End Sub
uruchamiam ... i eureka! działa!
sugeruje to że widok SQL kwerendy umożliwia korzystanie tylko z DAO a VBA z
DAO i ADO
pozdrawiam
Radek
(...)
|| Zajrzyj też tu:
|| http://70.85.90.150/forum/showthread.php?s=&threadid=2606 Pozdrawiam,
| Tworzę sobie tebelę z polem o typie danych decimal:
| Widok SQL kwerendy - piszę
| CREATE TABLE tabela (liczba DECIMAL);
| po próbie uruchomienia Access zgłasza błšd: "Błšd składniowy w definicji
| pola"
|
| No dobra my lę, typ decimal jest dostępny tylko w ADO, musisz utworzyć
| sobie procedurę:
|
| Private Sub tabela()
| Dim zapytanie As String
| On Error GoTo blad
| zapytanie = "CREATE TABLE tabela (liczba3 DECIMAL)"
| CurrentProject.Connection.Execute zapytanie
| uruchamiam ... i eureka! działa!
| sugeruje to że widok SQL kwerendy umożliwia korzystanie tylko z DAO a
| VBA z DAO i ADO
Wyciągasz słuszne wnioski. Rzeczywiście wraz z a'2000 Jet obsługuje
składnię znacznie bardziej zbliżoną do MS-SQL
(@@Identity, default, ON UPDATE CASCADE, ...)
Ciągle tu powtarzamy, że jest to dostepne jedynie z poziomu ADO ...
A przecież nieprawda! W opcjach na zakładce tabele/kwerendy można
zaznaczyć: Sładnia zgodna z SQL Server (ANSI 92)
i nagle wszysto zaczyna śmigać!
(prawie wszysto! Jakoś mi nie zwraca @@Identity ...)
Ale działa :
Create Procedure zzz1 as Insert Into
Create Procedure zzz2 (@p int) as Insert Into ... Values (@p)
Create Procedure zzz3 as exec zzz2 123
nie wspominając o :
CREATE TABLE Tabela1 (ID Identity (1, 10), P1 DECIMAL(10,2))
Co do całej dysputy o wyższości ADO nad DAO (lub odwrotnie) ...
Co tu dużo mówić ... Jak nam ADO (czy raczej ANSI 92) daje więcej to
fajnie.
Ale nie jest to pełna prawda. Paru rzeczy z poziomu ADO (+ADOX + JRO)
zrobić się nie da, a z poziomu DAO jest to trywialne (poczytasz na
http://www.trigeminal.com/usenet/usenet025.asp?1033)
Dodam od siebie: CurentDb.Properties, które zajmują zupełnie inną
przestrzeń niż CurrentProject.Properties
(z bogadszym zbiorem typów oraz dostępem poprzez Plik\Właściwości bazy
danych\Niestandardowe)
Jeśli ktoś pracuje w "czystych" mdb i nie planuje szybiej przesiadki na
MSSQL, to DAO jest idealne i wbrew temu co gdzieś można przeczytać:
wydajniejsze!
Naprawdę szkoda że przystopowano rozwój tej biblioteki, za co zresztą M$
ciągle jest upominany przez rzesze accessowców ...
Że jednak jej koniec jest raczej daleki, świadczy dobitnie fakt, że w
A'2003 znów przywrócono tę bibliotekę jako domyślną (obok ADO, ale jedna o
wyższym priorytecie!)
--
KN
(MVP, M$ Office Access)
archiwum grupy:
http://groups.google.pl/advanced_group_search
(grupa: pl*msaccess)
pozdrawiam
Radek
|| Ciągle tu powtarzamy, że jest to dostepne jedynie z poziomu ADO ...
|| A przecież nieprawda! W opcjach na zakładce tabele/kwerendy można
|| zaznaczyć: Sładnia zgodna z SQL Server (ANSI 92)
| kurczę, u mnie w narzędziach nie ma takiej opcji, sprawdzałem także w
| menu Kwerenda oraz pod prawym przyciskiem myszy. Może tego nie ma w
| a2000? (chyba, że nie mam zainstalowanego jakiegoś składnika accessa)
eee, ten-tego ...
Rzeczywiście, to chyba dopiero od a'2002 (a na pewno od a'2003 ;-) )