Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ADO i DAO - czyli pytania teoretyczne

50 views
Skip to first unread message

Radosław Brunke

unread,
Jan 30, 2006, 9:47:28 AM1/30/06
to
Witam,

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


Krzysztof Wiśniewski

unread,
Jan 30, 2006, 10:20:38 AM1/30/06
to

Użytkownik "Radosław Brunke" <rad...@nieprawdziwyadres.com> napisał w
wiadomości news:drl910$qgq$1...@nemesis.news.tpi.pl...

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


Radosław Brunke

unread,
Jan 30, 2006, 11:31:53 AM1/30/06
to
Użytkownik "Krzysztof Wi¶niewski" <ktu...@poczta.onet.pl> napisał w
wiadomości news:drlaqh$t4v$1...@news.onet.pl...

> 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


Krzysztof Naworyta

unread,
Jan 30, 2006, 1:49:06 PM1/30/06
to
Juzer Radosław Brunke <rad...@nieprawdziwyadres.com> napisał


(...)

| 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)

Radosław Brunke

unread,
Jan 30, 2006, 2:17:17 PM1/30/06
to
Użytkownik "Krzysztof Naworyta" <k.naw...@datacomp.com.pl> napisał w
wiadomości news:drln3k$5ma$1...@news.onet.pl...

> 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)
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)

> i nagle wszysto zaczyna śmigać!
> (prawie wszysto! Jakoś mi nie zwraca @@Identity ...)
> Ale działa :
//ciach
dzięki za cenne wskazówki

pozdrawiam
Radek

Krzysztof Naworyta

unread,
Jan 30, 2006, 2:22:47 PM1/30/06
to
Juzer Radosław Brunke <rad...@nieprawdziwyadres.com> napisał

|| 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 ;-) )

Radosław Brunke

unread,
Jan 30, 2006, 2:26:32 PM1/30/06
to
Użytkownik "Krzysztof Naworyta" <k.naw...@datacomp.com.pl> napisał w
wiadomości news:drlp2d$cuo$1...@news.onet.pl...

>> 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 ;-) )
dziękuję za wskazówki
Radek

0 new messages