isual Basic, w okienku References, ma podłączone np. "Microsoft Word 8.0". Po
przeniesieniu jej na inny komputer często muszę dokonać tego podłączenia
ręcznie. Jak to zautomatyzować?
Czy można w zdarzeniu OnOpen formularza startowego dodać kod, który
automatycznie "podlinkuje" potrzebne biblioteki? Co w tym kodzie napisać?
I druga sprawa:
Czy jest gdzieś lista bibliotek (z listy w okienku "References") i
odpowiadających im plików na komputerze? Wiem, że struktura plików jest nieco
inna pod Win98 i np. pod WinNT, a chciałbym mieć podlinkowaną bibliotekę
do "Microsoft Word 8.0" niezależnie od wersji systemu i ścieżki. Przyszło mi
do głowy, żeby zgrać potrzebne pliki do swojego foldera i instalować je razem
z bazą, ale pojawiają się wątpliwości co do:
a) legalności takiej zabawy - czy wolno to robić??? To niby klon (kopia
zapasowa) części legalnego systemu, ale z MS nic nie wiadomo...
b) tego, który plik co oznacza (jak wybieram "Microsoft Word 8.0" z listy, to
widzę na dole okienka tylko kawałek ścieżki, bo jest ono jakoś za wąskie). W
konsekwencji nie wiem, który plik .dll odpowiada za bibliotekę np. "Microsoft
DAO 3.51" (nie poprawiajcie mnie bo walę z pamięci :) ).
Hmmmm... Jakieś pomysły?
Pozdrawiam,
Krzysiek
Pozdrawiam
Michał Bralczyk
Odpalasz excela, Edytor Visual Basic/Tools(Narzędzia)/References a
potem 'odchaczasz' Microsoft DAO 3.6 Object Library lub inne potrzebne.
| Pozdrawiam
| Michał Bralczyk
Odpalasz excela, Edytor Visual Basic/Tools(Narzędzia)/References a
potem 'odchaczasz' Microsoft DAO 3.6 Object Library lub inne potrzebne.
Dzięki serdeczne
Michał
ok,
jeszcze jedno pytanie : jeżeli robię sobie po prostu taką małą bazkę to
gdzies sie deklaruje czy uzywam DAO czy ADO i wlasciwie nie orientuje sie
w
temacie DAO i ADO , także niewiem czego używam :|
jeżeli masz Accessa 97, to masz DAO (zadeklarowane) i tylko DAO
jeżeli masz Accessa 2000 lub XP, to standardowo masz ADO, ale w accessowym
edytorze Visual Basic'a w menu Tools/References możesz sobie "załączyć"
również DAO poprzez zaznaczenie "Microsoft DAO 3.6 Object Library" (lub
podobny)
odpowiedź na Twoje pierwsze pytanie korzysta z DAO, gdybyś chciał to
osiągnąć z ADO, to być może powinieneś "załączyć" referencje do "Microsoft
ADO Ext. 2.7 for DLL and Security" (w a2k i aXP) i poszukać po helpach -
gdybyś musiał/chciał z ADO - daj znać - pomyślimy.
pozdrawiam
Robert
Jacek Kuchta wrote:
Sprawdzalem na kilku komputerach z roznymi systemami
operacyjnymi, ale na kazdym jest tak samo. Baza wywala sie na
podstawowych chyba komendach VBA: glownie na str i chr. Wywala sie z
komunikatem: "Błąd kompilacji. Nie można znaleźć projektu lub
biblioteki. Natomaist kumpel mowi, ze u niego działa.
Modul (widok projekt) -Narzedzia -Odwolania
Ja mam tam zaznaczone:
Visual Basic For Applications
Microsoft Access 8.0 Object Library
Microsoft DAO 3.5 Object Library
Po tym jak tam grzebalem pozbylem sie wspomnianego problemu.
Pozdrawiam
Dominik Jesiołowski
Mam problem z kodem vb w access 2k . Mam zainstalowany office 97 wersje
(...)
I własnie o to mi chodzi gdzie jest bład czy ja coś żle robie czy w
(...)
Wygląda na brak biblioteki "Microsoft DAO 3.6..." w odwołaniach:
EdytorVBA | Menu Tools | References | ....
SWid
Probowalem dzialac wg przykladu z tej strony i mam klopot z wykonaniem
krotkiego kodu w VBA
blad kompilacji (user - defined type not defined) wskazuje na linie:
dim myDB As Database
co tutaj moze byc zle?
Komunikat powinien Cię trochę naprowadzić...
Typ musi być gdzieś zdefiniowany. Brak jest jego definicji.
Gdzie zdefiniowane są stałe,typy,obiekty do krórych można się odwoływać ?
W 'załączonych' bibliotekach...
Na liście w edytorze VB w Tools|References nie masz zapewne zaznaczonego
ptaszka przy: "Microsoft DAO 3.6 ..."
Acc2k przy tworzeniu nowych baz danych preferuje ADO i domyślnie nie ustawia
odwołania do DAO... Inaczej sprawa ma się gdy dokonamy konwersji z Acc97...
Jeśli odwołujesz się do obiektu zdefiniowanego w kilku bibliotekach o takiej
samej nazwie, VB przyjmie pierwszą napotkaną definicję obiektu ( z pierwszej
biblioteki na liście References, zawierającej obiekt o tej nazwie ) Stąd
ważna
może być kolejność na liście. Aby się uchronić można odwoływać się do
ze stosownym prefikcem np: DAO.Recordset lub ADODB.Recordset...
SWid
SWid
próbowałem napisał mi nie zdefiniowany typ użytkownika
Musisz dostać się do kodu i w referencjach zaznaczyć odwołanie do Microsoft
DAO 3,6. Referencje znajdziesz w menu Tools =References.
Jakub
jakub1@poczta.onet.pl
Dodam, że chodzi dokładnie o "Microsoft DAO 3.6 Object Library"
Jerzyn
jerzyn <slajer@poczta.wp.plwrote in message
| Porownaj odwolania do bibliotek w obu bazach i ustaw tak, jak jest w tej
| bazie, ktora Ci dziala. Chodzi o to, ze Access2000 domyslnie nie wrzuca
DAO
| i trzeba sobie dodac samemu.
(....)
Dodam, że chodzi dokładnie o "Microsoft DAO 3.6 Object Library"
Jerzyn
Ach to DAO.....
Kurcze nie domyśliłem się bo w tej skonwertowanej z 97 było więcej
komponentów podłączonych a w tej nowej chyba tylko 4
Dziękuję bardzo za pomoc.
Niestety nie rozumiem takiego działania ze strony MS, to trochę wprowadza
zamieszanie....
97 wynika z tego podłączał domyślnie.
Pozdrawiam Robert
Dim rst As Recordset
Dim db As Database
itd.
2)
Przypisanie do zmiennej obiektowej musi być poprzedzone
słowem kluczowym Set:
Set rst = CurrentDb.OpenRecordset("Tabela1")
Set rst2 = rst
itp.
P.S.
Przykłady dotyczą DAO
Jeśli używasz Access 2000 domyślnie używasz ADO
Jeśli nadal chcesz używać DAO należy odpowiednie zmienne deklarować
jawnie:
Dim rst As DAO.Recordset
I jeszcze dołączyć bibliotekę, o ile nie zrobiono tego wcześniej:
Projekt dowolnego modułu/Tools/References/Microsoft DAO 3.6 Object Library
Jacek
W edytorze VB musisz włączyć:
Tools/References/Microsoft DAO 3.6 Object Database
a potem zamiast: Dim dbs As Database
wpisz Dim dbs As DAO.Database (to samo z recordsetem)
dziekuje bardzo!
tymczasem zauwazylem ze linie:
Set DB = CurrentDB()
access przyjmowal bez zastrzezen - czy
to jest definicja z przypisaniem?
czy to byloby tez poprawne?
| W edytorze VB musisz włączyć:
| Tools/References/Microsoft DAO 3.6 Object Database
| a potem zamiast: Dim dbs As Database
| wpisz Dim dbs As DAO.Database (to samo z recordsetem)
dziekuje bardzo!
tymczasem zauwazylem ze linie:
Set DB = CurrentDB()
access przyjmowal bez zastrzezen - czy
to jest definicja z przypisaniem?
czy to byloby tez poprawne?
Set ustawia zmienna obiektowa !
A w przykladzie twoim zmienna DB jest kojarzona z aktualnie otwarta baza
Forrest Gump <hashta@wp.plwrote in message ne
ws:aqs6hm$nt@dns.ats.pl...
Witam
Dim db As DAO.Database, rst As DAO.Recordset - Compiler error :
User-defined type not defined
Rozumiem, że powstał błąd na skutek deklaracji tych zmiennych - kompilator
nie wie co to DAO.
Co mam zrobić aby uzyć DAO lub ADO w Funkcjach ?
Pozdrawiam
Forrerst Gump
By użyć DAO dodaj odwołanie do DAO (Tools-References-zaznacz Microsoft DAO
<wersjaObject Library). Jak zauważysz, ADO jest zahaczone domyślnie - jak
nie chcesz używać, to odhacz.
Pozdrav
Dorota
Witam
Może nie przedstawię problemu jasno, ale mam coś takiego:
Otrzymałem pik Access'a ******.mdb , który "powinien" działać pod
A97,
lecz przy próbie otwarcia wyświetla komunikat: "Błąd kompilacji. Nie
mozna
odnaleźć projektu lub biblioteki."
Zatrzymuje sie na linii:
Private Sub FillOptions ()
Dim dbs As Database
Co moze być przyczyną tego? Czyżby ktos napisał ta bazę pod Acc2000 , a
zapisał w formacie Acc97 - (czy jest jakaś róznica formatów) - czy nie
powinno w takim razie dołączyć kodu, lub brakującej biblioteki do pliku?
Jeśli zadałem bzdurne pytania - przepraszam.
M.Szelc.
Z konieczności zastosowałem VFP6 jako apikacje klienta dla MSSQL
poprzez ODBC.
Aż taka niemiła ta konieczność? ;-)
Czy można odpalić procedurę przechowywaną z parametrem wejściowym z
poziomu VFP? . Znalazłem kontrolkę Microsoft DAO DataContro 6.0(SP4) ale
nie ma do niej helpa i nie mam pomysłu jak przesłać do procedury
przechowywanej parametr. Pod DELPHI wszystko dobrze pracuje tylko ta
cena wersji legalnej.
Można posłużyć się SQLEXEC.
"Zygmunt Musial" <mus@spec.waw.plwrote in message
Z konieczności zastosowałem VFP6 jako apikacje klienta dla MSSQL
poprzez ODBC.
Czy można odpalić procedurę przechowywaną z parametrem wejściowym z
poziomu VFP? . Znalazłem kontrolkę Microsoft DAO DataContro 6.0(SP4) ale
nie ma do niej helpa i nie mam pomysłu jak przesłać do procedury
przechowywanej parametr. Pod DELPHI wszystko dobrze pracuje tylko ta
cena wersji legalnej.
Zygmunt
1. Po co Ci DAO?
2. looknij tutaj:
HOWTO: Execute a Stored Procedure on SQL Server
Q114787
Mam dosc spory problemik:
program Subiekt dla Windows uzywa bazy Accessa
jak to podają na stronce
http://www.insert.com.pl/produkty_dla_windows/subiekt_dla_windows/szc...
y_opis.html
"Microsoft Access 97 (Microsoft DAO Jet 3.51, Microsoft DAO Jet 3.51 Service
Pack 2), Microsoft Corporation;"
mam WinXP i OfficeXP i nie moge otworzyc pliku bazy - wywala informacje
ze musze nalezec do grupy uzytkownikow bazy albo takie tam inne brednie
(zamknac polaczenia itp-
polaczenia sa zamkniete wiec spox)...
chcialem po prostu przeslac dane Subiekta do MySQL
MySQLFront otwiera baze przez ODBC wyswietla liste tabel
ale nie pozwala na przejrzenie ich struktury i zawartosci
wyrzuca komunikat ze nie mam praw do przegladania
czy moze jest jakis crack do plikow accessa co by wywalal te prawa
i ustawial pelny dostep? Subiekt potem juz ich nie nadpisze bo
przy tworzeniu bazy korzysta z gotowego pustego wzorca.
a moze tu jest jakis cyrk z XPkami? ale nie chce mi sie downgradowac na
Office97 :(
a moze sterownik ODBC tez downgradowac (Win98?)?
z gory dzieki za wszelkie rady
pozdrawiam
pg-X/Gertas
Wasilewski Robert <r.wasilew@softbank.plwrote:
Witam !
Mam pewien problem. Otóż w bazie stworzonej na moim PC znajdują się moduły
zawierające różne funkcje przeze mnie napisane. Oczywiście wszystko działa.
Po skopiowaniu bazy na PC kolegi funkcje z modułów przestają działać. Nawet
wpisanie dowolnej wbudowanej funkcji (np. left) i wciśnięcie F1 powoduje
wyświetlenie komunikatu:
Nie można odnaleźć projektu lub biblioteki.
Czy ktoś wie o co chodzi ?
Po pierwsze:
- jest od tego osobna grupa. Ale poniewaz zadawalem kiedys
na niej to pytanie i nie doczekalem sie zadnej odpowiedzi
wiec:
Po drugie:
- po otwarciu zrodla jakiegokolwiek modulu wywolaj z menu
opcje Narzedzia - Odwolania i porownaj wyniki na swoim PC
i na PC kolegi. Prawdopodobnie (z niewiadomych przyczyn)
Access zaladowal sobie inne niekompatybilne biblioteki.
Tradycyjnie (to nowa, swiecka tradycja) dotyczy to bibliotek
DAO - ,,Microsoft DAO 2.5/3.0 compatibility library'' oraz
,,Microsoft DAO 3.51 Object Library'', ale moze chodzic o
jakiekolwiek inne.
Pozdrawiam,
K.
MB wrote:
Witam
Nie jestem zbyt mocno zorientowany w bazach, obecnie posiadam Buildera
4.0 Standard ktory gotowych komponentow do obslugi baz danych nie zawiera
(byc moze sie myle).
Czy istnieje mozliwosc zrobienia prostej bazy na wersji standard (tabela
dostawcow, tabela transakcji, kilka raportow) ?
Jesli tak to jak sie do tego zabrac..., a jesli nie to czy istnieja
jakies dostepne komponenty ktore moga byc dolaczone do wersji standard, i
gdzie ich szukac ? Moze sa gdzies dostepne przykladowe zrodla ?
Za pomoc z gory dziekuje
C++ Builder w wersji Standard (od numeru 4) nie ma wbudowanego dostępu
do baz danych. Chodzi nie tylko o komponenty, ale również środowisko nie
ma żadnego wsparcia w tym kierunku.
"Obce" komponenty przeważnie opierają swoje działanie na mechanizmach
już w Builder wbudowanych - jak klasy typu TDatabase, itp., zatem z
wersją Standard też większość z nich nie pójdzie. Jednym z miejsc, gdzie
można te rzeczy znaleźć jest BDE Alternatives Guide:
http://www.kylecordes.com/bag/index.html
Są też inne wyjścia. Najlepiej używać wersji przynajmniej Professional
Buildera, ma się wtedy najwięcej możliwości.
Można cofnąć się do Buildera 3, który w wersji Standard miał wszystko co
potrzebne do baz danych.
Można też dostęp do bazy danych typu Access zrealizować przez OLE
Automation we współpracy z Microsoft DAO, jeśli ma się dostęp do tych
bibliotek.
Pozdrawiam,
Piotr Budzyński
Private Sub Form_Load()
Dim dbsDane As DAO.Database
Dim rstOpis As DAO.Recordset
Dim strMessage As String
Set dbsDane =
OpenDatabase("D:MaciejProgramyPrzypominaczdbDane.mdb")
Set rstOpis = dbsDane.OpenRecordset("SELECT * FROM tblPrzypomnienia
WHERE Data=Date()")
To As DAO.Database nie jest potrzebne. Natomiast potrzebne jest najpierw
zrobienie menu Project, References i zaznaczenie Microsoft DAO 3.51 Objest
Library.
Następnie prawidlowy najkrótszy kod to:
Dim WS As Workspace
Dim DB As Database
Dim RS As Recordset
Set WS=DBEngine.Workspaces(0)
Set DB=WS.OpenDatabase("D:Maciej ... itd nazwa pliku mdb)
Set RS=DB.OpenRecordset(strSQL) ' to jakis Select... itd
....
Set DBGrid.DataSource=RS
Set MSFlexGrid.DataSource=RS
........
Wiesiek
-----Original Message-----
From: Grzegorz [mailto:grzego@yahoo.com]
Sent: Thursday, April 26, 2001 1:09 PM
To: pl-comp-lang-vba@newsgate.pl
Subject: Tworzenie mdb
Mam problem w jaki sposob utworzyc nowa baze Accessa z VB
(uwaga! nie chodzi
mi p utworzenie bazy bedac w samym Accessie czyli z poziomu VBA ale z
poziomu zupelnie innego programu nie zwiazanego do tej pory w
zaden sposob z
Accessem)
Pozdrawiam,
Grzegorz
w Project-References zaznacz "Microsoft DAO 3.51 Object Library" (lub 3.6)
potem w kodzie:
Sub UtworzBazeDanych()
Dim DE As New DAO.DBEngine
DE.CreateDatabase "c:MojaBazaDanych", dbLangPolish, dbVersion30
'dbVersion30 - MSAccess 97 (chyba)
'dbVersion40 - MSAccess 2000
End Sub
Morris
Przeczytaj wszystkie posty z tego wątku
"Pawlak, Pawel" <Pawel.Paw@f2virt.onet.plwrote in message
news:192D7ED3BF2CD511A4DB00008364046203061C@mailserver.domdata.depfa-it.com.
..
| -----Original Message-----
| From: Grzegorz [mailto:grzego@yahoo.com]
| Sent: Thursday, April 26, 2001 1:09 PM
| To: pl-comp-lang-vba@newsgate.pl
| Subject: Tworzenie mdb
| Mam problem w jaki sposob utworzyc nowa baze Accessa z VB
| (uwaga! nie chodzi
| mi p utworzenie bazy bedac w samym Accessie czyli z poziomu VBA ale z
| poziomu zupelnie innego programu nie zwiazanego do tej pory w
| zaden sposob z
| Accessem)
| Pozdrawiam,
| Grzegorz
w Project-References zaznacz "Microsoft DAO 3.51 Object Library" (lub
3.6)
potem w kodzie:
Sub UtworzBazeDanych()
Dim DE As New DAO.DBEngine
DE.CreateDatabase "c:MojaBazaDanych", dbLangPolish, dbVersion30
'dbVersion30 - MSAccess 97 (chyba)
'dbVersion40 - MSAccess 2000
End Sub
Morris
Przeczytaj wszystkie posty z tego wątku
<se@poczta.onet.plwrote in message
| napisz
| wstaw referencje do dao i napisz
| Dim baza As DAO.Database
| Dim tabela As DAO.Recordset
jak wstawic te referencje dao moze ktos podesle mi odp na priv razem z
gotowym kodem
Piszę na grupę ponieważ jest to fundamentalna rzecz którą powinien znać
każdy (a jak widać nie zna).
Referencje do bibliotek dodaje się z menu Project-References.
O ile nie dodaliśmy więcej niż jedną bibliotekę posiadającą objekty Database
lub Recordset to przedrostek DAO. jest zbędny.
Jednak dla zachowania kompatybilności kodu z przyszłymi zmianami bibliotek
dodawanie tego przedrostka jest wskazane nawet wtedy gdy nie jest on
konieczny.
P.S. Referencja o którą chodzi przedpiszcy nazywa się Microsoft DAO 3.51
(lub 3.6) Object Library
po co sobie utrudniac z dbf
imporuj wszystko do acsesa a potem
Dim db As Database, Rs As Recordset
i dla dowolnej bazy np fakt.mdb
owierasz ja domyslnie ( musisz zaladowac w projekcie DAO 3,5
Project/Reference/Microsoft DAO 3,5 Object Library )
Set db = DBEngine.Workspaces(0).OpenDatabase("fakt.mdb")
wybierasz np kolumne " nadoobro " ( lub inna w bazie )
Set Rs = db.OpenRecordset("nadobro")
zapelniasz obiekt
form1 nakladasz kontrolke | data<< ktora sie zaladuje
Set Form1.Data1.Recordset = Rs
Form1.Data1.Recordset.MoveLast
nie wpisujesz nazwy bazy DatabaseName ani RecordSource
tylko Connect Access
form1 nakladasz pole textowe text1 i text 2
Wypelniasz Data Source | Data1
wypelniasz DataField | np nadobro
dla drugiego DataField | nazwa drugiej kolumny w twojej bazie
i tyle
mozna załadowac Query, listboxy ( posortowane )
i w ogóle wszystko
andy@polbox.com
To znaczy że w referencjach nie masz zaznaczonego DAO 3.51
Jak najbardziej mam dolaczone DAO 2.5/3.5 nie dziala DAO 3.51 nie dziala
1. Utwórz nowy projekt VB 6 typu standart exe.
2. W menu Project, References zaznacz Microsoft DAO 3.51 Object Library,
Kliknij OK.
3. Ponownie otwórz menu Project References Powinno być:
a) Visual Basic for Aplications
b) Visual Basic runtime object and procedures
c) Visual Basic object and procedures
d) OLE Automation
e) Microsoft DAO 3.51 object library
Jeżeli są jeszcze inne to odznacz, są niepotrzebne.
Do formy dodaj przycisk Command Button
Dla niego wpisz kod:
Private Sub Command1_Click()
Dim WS As Workspace
Dim DB As Database
Set WS = DBEngine.Workspaces(0)
Set DB = WS.OpenDatabase(App.Path + "iblio.mdb")
DB.Close
WS.Close
End Sub
Uruchom przez Run, nie może być komunikatu o błędzie.
Jedyną możliwą przyczyną dla której to mogłoby nie chodzić jest to że masz
wersje LE.
Nie istnieje inna możliwość, więc nie pisz że nie chodzi.
Wiesiek
Witam.
Pisząc program natknąłem się na taka przeszkodę.
Sofcik musi otwierać _sieciowo_ dbf'a , modyfikować
go i zapisać w nim jakieś zmiany :(
Pierwszy problme polega na tym, iż nie wiem jak go
otworzyć jeśli już jest używany przez inny program...
Dla testu zrób tak: W VB ustaw najpierw referencje na
Microsoft DAO 2.5 Object Library (dBase III jest 16-bitowa)
Nastepnie wstaw kontrolke DATA i ustaw dla niej:
Connect DBASE III
DatabaseName: scieżke do pliku dBase
RecordSource: nazwe tabeli
dodaj do projektu kilka pól tekstowych z DataSource Data1
i zobacz czy czytają sie rekordy i czy można zmieniać wartosci
w polach. Wszystko powinno byc bez problemów.
Natomiast z indeksami ntx jest mały horror.
Pozdrawiam
Wiesiek
Użytkownik Jacek Fidot <fi@zeus.polsl.gliwice.plw wiadomości do grup
dyskusyjnych napisał:89g9of$l9@zeus.polsl.gliwice.pl...
kopiuje z MSDNa :
Set Db = Workspaces(0).OpenDatabase("BIBLIO.MDB")
Set Rs = Db.OpenRecordset("AUTHORS")
po uruchomieniu wywala blad: type mishmasch ze wskazanie m na set rs ...
Ktos moze mi pomoc?
Spróbuj tak:
Dim db As DAO.Database
Dim RS As DAO.Recordset
Set db = DBEngine.OpenDatabase("C:BIBLIO.MDB")
Set RS = db.OpenRecordset("AUTHORS")
Sprawdzałem i działa, natomiast upewnij się czy napewno masz odwołanie do
Microsoft DAO 3.51 Object Library
Spróbuj tak:
Dim db As DAO.Database
Dim RS As DAO.Recordset
Set db = DBEngine.OpenDatabase("C:BIBLIO.MDB")
Set RS = db.OpenRecordset("AUTHORS")
Sprawdzałem i działa, natomiast upewnij się czy napewno masz odwołanie do
Microsoft DAO 3.51 Object Library
jestem ci winny PIWO!!! zadzialalo. Szkopul tkwil w tym, ze nie mialem tego
DAO. ... Czytalem gdzies ze musi byc w sytuacjach gdy uzywamy ADO. Ale ja
nic takiego nie uzywam, a moze nic o tym nie wiem. Jezeli ktos by mi mogl
wyjasnic dlaczego tak sie stalo to bede wdzieczy. Jeszcze raz wielkie
dzieki za pomoc. Moge ruszyc dalej ...
Wcześniej należy w mnu Project References zaznaczyć np. Microsoft DAO 3.51,
wtedy system podpowiada wszystkie wpisy w kodzie.
Wiesiek
Witam,
Mam problem:
Po zainstalowaniu VB 6.0 chciałem zrobić prostą bazę danych.
Napisałem poniższy kod:
Private Sub Command2_Click()
Dim db As Database
Dim rs As Recordset
Dim nazwa As String
Set db = DBEngine(0).OpenDatabase(App.Path & "1uzytkownik.mdb")
Set rs = db.OpenRecordset("SELECT * FROM [user] WHERE [usuniety]= FALSE "
&
_
"ORDER BY [nazwisko], [imie], [poziom]", dbOpenDynaset)
End Sub
I tu zaczyna się problem. Program w momencie dojścia do instrukcji
zawierającej OpenRecordset wyświetla komunikat, że dana kwarenda lub
tabela
nie istnieje.
Oczywiście nie ma żadnej pomyłki w strukturze pliku bazodanowego.
Zainstalowałem też wszystkie potrzebne do obsługi baz danych biblioteki.
Niestety to dalej nie działa. Może ktoś wie o co tu chodzi?
pozdrawiam
Łukasz
dzieki zadzialalo - nie myslalem, ze to takie proste
Musisz tylko dodać referencje obiektu DAO.
Microsoft DAO 2.5/3.5 Compatibility Library
czy
Microsoft DAO 3.51 Object Library
przypuszczam, ze ta druga (DATA dodaje ja automatycznie)
==================
g@polbox.com
==================
Pozdrawiam
Jacek
Gugu wrote in message <7i16tp$75@korweta.task.gda.pl...
ach jak milo... :)
dzieki zadzialalo - nie myslalem, ze to takie proste
| Musisz tylko dodać referencje obiektu DAO.
Microsoft DAO 2.5/3.5 Compatibility Library
czy
Microsoft DAO 3.51 Object Library
przypuszczam, ze ta druga (DATA dodaje ja automatycznie)
==================
g@polbox.com
==================
--
Pelny dostep do Internetu juz od 8,34 PLN na miesiac - http://rubikon.pl
| Nie to Twój ewidentny błąd. P&DW sam tego nie wymyślił, a więc w Twoim
| projekcie do którego robiłeś instalke w menu Project, References masz
| odznaczoną opcje dodającą plik EXPSVR.DLL i najprawdopodobniej również
inne
| zupełnie niepotrzebne.
Witam
dzieki za odpowiedz.
W reference mam zaznaczone:
Visual Basic for aplications
Visual Basic runtime obiects and procedures
Visual Basic Obiect and procedures
Ole automation
Microsoft DAO 3,51 obiect library
To wszystko sie samo zaznaczylo.
Skad wiedziec czy cos mozna wyrzucic? I co wyrzucic.
Prosze Cie o pomoc, w instalkach nie jestem dobry.
W References jest prawidłowo, w głównej zakładce. Zobacz co masz w
Components w wszystkich zakladkach zaznaczone.
Wiesiek
Pilnie poszukuje czegos takiego
co zwie sie Microsoft DAO w wersji 3.5
(DAO to Data Access Objects).
Z tego co wiem to jakies biblioteki Microsoftu.
Bylem juz na www.microsoft.com/download ale
tam wyszukiwarka nic takiego nie znalazla.
Gdzies obilo mi sie o uszy ze jest to na
plytach z ktoras wersja Borland Delphi.
Znalazlem na sieci DAO 2.1 ale chyba za stara
wersja bo program ktory tych bibliotek
potrzebuje nie chodzi z DAO 2.1.
Jesli ktos ma cos takiego lub wie gdzie to moze byc
bardzo prosze o przyslanie mailem
(nie wazne ile to ma) lub link.
Pozdrawiam
Radek
******************************************
* ra@artland.com.pl *
* -------------------------------------- *
* The greatest thing you'll ever learn *
* is just to love and be loved in return *
******************************************
Pilnie poszukuje czegos takiego
co zwie sie Microsoft DAO w wersji 3.5
(DAO to Data Access Objects).
Z tego co wiem to jakies biblioteki Microsoftu.
Bylem juz na www.microsoft.com/download ale
tam wyszukiwarka nic takiego nie znalazla.
Gdzies obilo mi sie o uszy ze jest to na
plytach z ktoras wersja Borland Delphi.
Znalazlem na sieci DAO 2.1 ale chyba za stara
wersja bo program ktory tych bibliotek
potrzebuje nie chodzi z DAO 2.1.
Jesli ktos ma cos takiego lub wie gdzie to moze byc
bardzo prosze o przyslanie mailem
(nie wazne ile to ma) lub link.
Pozdrawiam
trzeba ci było szukać na
http://www.microsoft.com/data/ado/
poczytaj tam, z tego co pamiętam, obsługa DAO jest zawarta w ADO. A co, do
Delphi potrzebne? :)
pozdrawiam,
Przeczytaj wszystkie posty z tego wątku
Dzięki za pomoc.
Niestety deklaracja: Dim db As Database działa tylko na jednym pliku pomimo
że nie zmieniam żadnych ustawień w Accesie. Wygląda to tak jakby gdzieś w
pliku bazy siedziała informacja o podłaczaniu do ADO.
Odnośnie :Dim db As Database....
W nowszych wersjach MS Access w projekcie VBA defaultową referencją jest
Microsoft ActiveX Data Objects 2.X Library (poprzednio było DAO !!!!!) i
dlatego jeśli chcemy korzystać w obiektów DAO , a taki jest obiekt Database
czy Recordset który np otrzymujemy jako wynik operacji
CurrentDb.OpenRecordset możemy zrobić, a właściwie musimy, jedną z 3-ch
następujących rzeczy
1. Dodać referencję w projekcie do Microsoft DAO 3.X Object Library, a linijka
kodu deklaracji powinna wówczas wygladać następująco:
Dim db As DAO.Database
Dim rst As DAO.Recordset
2. Dodać referencję w projekcie do Microsoft DAO 3.X Object Library oraz
jednocześnie usunąć referencję do Microsoft ActiveX Data Objects 2.X Library a
linija kodu deklaracji może wówczas wygladać następująco :
Dim db As Database
Dim rst As Recordset
albo
Dim db As DAO.Database
Dim rst As DAO.Recordset
3. Zadbać o to aby refrecje w projekcie w okienku referencji były w kolejności
jak :
najpierw
Microsoft DAO 3.X Object Library
a potem dopiero
Microsoft ActiveX Data Objects 2.X
a linijka kodu deklaracji może wówczas wygladać następująco :
Dim db As Database
Dim rst As Recordset
albo
Dim db As DAO.Database
Dim rst As DAO.Recordset
czyli w każdym przypadku bezpieczniej jest użyć jednak deklaracji
Dim rst As DAO.Recordset
i w każdym przypadku trzeba w Tools/Reference sprawdzić czy jest referencja do
Microsoft DAO 3.X Object Library, przy braku dodać....
tools -references -Microsoft DAO 3.6 Object Library
i dziala
a czasami mimo tego ze ta referencja *jest zaznaczona* i tak nie
dziala... wtedy pomagaja metody z mojego poprzedniego posta. pozdr,m.
||| tools -references -Microsoft DAO 3.6 Object Library
||| i dziala
|| a czasami mimo tego ze ta referencja *jest zaznaczona* i tak nie
|| dziala... wtedy pomagaja metody z mojego poprzedniego posta. pozdr,m.
| Musi działać. To kwestia kolejności na liście references - najpierw "DAO
| 3.6", a niżej dopiero "OLE Automation".
Co ma OLE do DAO ???
Obiekty gryzą się między ADO i DAO (np. obiekt Recordset)
Poza tym ja nie uważam, aby kolejność na liście referencji była tym na
czym należałoby polegać !
Tzn. owszem, ale po co ? A jeśli jakaś część naszego kodu manipuluje
referencjami ?
Jeśli zajdzie taka dziwna potrzeba, że musimy równocześnie korzystać i z
ADO i z DAO, to:
1) można do DAO odwoływać się niejawnie
Dim db as Object
Set db=CurrentDb
Dim rc as Object
Set rc=Me.RecordsetClone
2) jesli odpada pkt.1 to _należy_ deklarować obiekty z odwołaniem do
właściwej biblioteki:
Dim rc as DAO.Recordset
contra
Dim rc as ADO.Recordset
Z innej beczki:
czasami mimo właściwych referencji nadal nic nie działa !
Dalczego? Bo DAO jest źle zarejestrowane ! Albo w rejestrze albo w naszej
bazie.
W tym drugim przypadku wystarczy odklikać referencję i po ponownym
otwarciu ponownie ją zaznaczyć.
Czy nie jest łatwo zapomnieć wtedy o prawidłowej kolejności ?
Ale IMO, jeśli ktoś decyduje się na którąś bibliotekę (ADO/DAO) to raczej
nie powinien ich mieszać!
Dlatego uważam, że pkt.1 jest rozwiązaniem najlepszym, jeśli komu
przyjdzie korzystać z tego, czego w ADO nie dorobiono.
Public Sub LPsztuczka1()
' ToolsReferences: "Microsoft DAO x.x Object Library - twoja wersja
biblioteki DAO
Dim db As DAO.Database 'deklaracja poprawda przy referencji do biblioteki
DAO
Dim rst As DAO.Recordset 'deklaracja poprawda przy referencji do biblioteki
DAO
Set db = CurrentDb
SQLstring = "SELECT * FROM TwojaKwerenda"
Set rst = db.OpenRecordset(SQLstring) ', dbOpenDynaset, dbConsistent,
dbPessimistic)
With rst
.MoveFirst
numer = 0
Do Until .EOF
'zakladam ze kolumna Lp jest pierwsza kilumna tabeli
numer = numer + 1
.Edit
.Fields(0) = Str$(numer) 'kolumna Lp ma typ Text - mozesz ja
nazywac wtedy _
'np. tak
[FV01,FV02,...], [1,2,3,...] _
'roznie, jak tylko
wymyslisz.
.Update
.MoveNext
Loop
End With
End Sub
Jak w temacie - czy można uzyskać pole z LP kolejnych wierszy w
kwerendzie.
(Autonumer nie wchodzi w grę)
Pozdrawiam
Mirek
Chodzi o "zabicie" zmiennych obiektowych na koncu procedury :-).
Calkiem poprawna wyglada tak:
Public Sub LPsztuczka1()
' ToolsReferences: "Microsoft DAO x.x Object Library - twoja wersja
biblioteki DAO
Dim db As DAO.Database 'deklaracja poprawna przy referencji do biblioteki
DAO
Dim rst As DAO.Recordset 'deklaracja poprawna przy referencji do biblioteki
DAO
Set db = CurrentDb
SQLstring = "SELECT * FROM TwojaKwerenda"
Set rst = db.OpenRecordset(SQLstring) ', dbOpenDynaset, dbConsistent,
dbPessimistic)
With rst
.MoveFirst
numer = 0
Do Until .EOF
'zakladam ze kolumna Lp jest pierwsza kilumna tabeli
numer = numer + 1
.Edit
.Fields(0) = Str$(numer) 'kolumna Lp ma typ Text _
'- mozesz ja nazywac wtedy _
'np. tak [FV01,FV02,...], [1,2,3,...] _
'roznie, jak tylko wymyslisz.
.Update
.MoveNext
Loop
End With
Set rst = nothing 'zabicie zmiennej obiektowej
Set db = nothing 'zabicie zmiennej obiektowej
End Sub
Jak w temacie - czy można uzyskać pole z LP kolejnych wierszy w
kwerendzie.
(Autonumer nie wchodzi w grę)
Pozdrawiam
Mirek
OK. Krytykę przyjąłem.
Znalazłem błąd - nie włączone DAO.
Włączyłem - poszedł dalej i stanął na linii:
Set MySet = MyDb.OpenRecordset("ExpArray", DB_OPEN_DYNASET)
wywalając błąd: Type mismatch
Mam Access 2000
W referencjach wybrane:
Visual Basic For Applications
Microsoft Access 9.0 Object library
OLE automation
Microsoft ActiveX Data Objects 2.1 Library
Microsoft DAO 3.6 Object library
Typ Recordset występuje w dwóch wykorzystywanych przez
Ciebie bibliotekach: ADO i DAO, pod tą samą nazwą
ale różni się trochę ( metody, właściwości, itp).
Aby wsazać kompilatorowi który chcesz używać powinieneś
deklarować konkretnie:
Dim rs As DAO.Recordset
lub
Dim rs As ADODB. Recordset
Z tego co piszesz w Twoim kodzie używany jest DAO.
Rozwiązania problemu:
1. Jeśli nie używasz wyrzuć ADO (Microsoft ActiveX Data ...)
z referencji; lub
2. Zmień kolejność bibliotek w okienku referecji (strzałeczki
z boku - priority) Kompliator bierze typ z pierwszej biblioteki
napotkanej. Teraz masz ADO przed DAO, zmień żeby DAO
było "wyżej" - nad ADO; lub
3. Dopisz wszędzie w kodzie przy odwołaniu do typu rekordset
przedrostek : DAO. lub
....
Podobne problemy możesz mieć z innymi typami...
Prawdopodobnie utworzyłeś pustą bazę i zaimportowałeś obiekty
ze starszej wersji. Przy tworzeniu nowej bazy Accessy 9 i 10
domyślnie dołączają w referencjach tylko ADO ( DAO jest na
wylocie).
Gdybyś przekonwertował bazę ze starszej wersji referencje
miałbyś OK.
Pozdrawiam
SWid
No i co? Nie czytacie, Kolego, wystarczająco uważnie! :))
| [...]
|
| Zajrzałem do Tools References ... ale nie wiem do czego referencje
| mogły mi sie urwać. Jak sprawdzić, które referencje są mi potrzebne.
| Pewnie to abecadło VB, ale ja niestety jestem cieńki.
| Podpowiesz jeszcze co nieco :-)
Standardowo wystarczą Ci:
- Visual Basic For Applications (zawsze podpięty)
- Microsoft Access (tu nr wersji) Object Library (jw)
- Microsoft DAO 3.6 Object Library
lub:
- Microsoft ActiveX Data Objects (tu nr wersji) Library
albo obydwie, jeśli korzystasz z DAO i ADO równocześnie.
Jeśli automatyzujesz pracę z Excelem lub Wordem, będziesz potrzebował
odpowiedniego odwołania do każdej z tych aplikacji, czyli np. pod a'2003
"Microsoft Excel 11.0 Object Library" i/lub "Microsoft Word 11.0 Object
Library". Oprócz tego mnie się zdarza używać odwołania do "Microsoft XML (tu
nr wersji)". Poza tym staram się z referencjami nie szaleć.
Nie wiem po jaką cholerę Access sam dodaje "OLE Automation" przy tworzeniu
pustej bazy. Staram się to usuwać, bo jak dotąd nie spotkałem się z potrzebą
wykorzystania tej referencji. Zauważyłem też, że w niektórych - na szczęście
rzadkich ! - sytuacjach gryzie się ona z DAO, tzn. trzeba pamiętać, aby
odwołanie do DAO było wyżej niż odwołanie do "OLE Automation" (o ile tę
ostatnią zdecydowaliśmy się jednak pozostawić).
Po jakiejkolwiek zmianie w referencjach wykonaj Debug -Compile.
Jeśli przeniosłeś bazę na inny komputer, na którym jest inna wersja MS
Access i inne biblioteki na dysku, może okazać się, że referencje się
"urwały" - na liście referencji widać je wtedy jako "MISSING". Przy prostych
operacjach wystarczy często podpięcie odwołań do bibliotek w dostępnych
wersjach - np. w przypadku mało skomplikowanej automatyzacji dla kodu VBA
bez znaczenia jest, czy podpięliśmy "Microsoft Word 11.0 Object Library" czy
"Microsoft Word 9.0 Object Library".
Więcej na ten temat znajdziesz w archiwum Grupy.
Pozdrawiam,
Krzysiek
W Accesie 2000 używając ADO pobieram dane z SQL Serwera.
Używam:
Microsoft ActiveX Data Objects 2.1 Library
Microsoft DAO 3.6 Objects Library
OLE Automation
Microsoft Access 9.0 Objects Library
Visual Basic For Applications
Pytanie: Czy można używać jednocześnie ODBC i ADO oraz przy użyciu
Recordset
otwierać tabele lokalne?
Czy są jakieś przeciwskazania łączenia różnych metod?
Czy błąd: Run-time error '13':
Type mismatch
jest winą używanych bibliotek?
Jezeli sie dobrze domyslam, twoj problem polega na tym, ze nie deklarujesz
odpowiednio obiektow Recorset.
A w sytuacji gdy uzywasz obu bibliotek (DAO i ADO) powinienes jawnie
oznaczyc o ktory typ ci chodzi.
W ADO powinno to wygladac tak:
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn =CurrentProject.Connection
Set rs = New ADODB.Recordset
rs.Open "tabela", cn, , , adCmdTable
Natomiast w DAO w nastepujacy sposob:
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("tabela")
Jezeli NIE bedziesz deklarowal w powyszy sposob bedziesz sie zawsze
odwolywal do biblioteki, ktora ma priorytet w Referencjach czyli figuruje na
liscie odwolan jako pierwsza (wczesniej). Wtedy moze sie zdarzyc ze masz
blad Type mismach, poniewaz przy przypisaniu obiektu do zmiennej; np do
zmiennej typu recorset ADO probujesz uzyc nieodpowiedniej metody, w tym
wypadku CurrentDb.
-------
Piotr Chlabicz
MISSING: Microsoft DAO 2.5/3.5 Compatibility Library.
Jak odnaleźć tę bibilotekę (w ścieżce podanej w referencjach jest inna
bibiloteka).
A wyłącz ją w cholerę (w referencjach) i podłącz taką wersję DAO jaką masz
Nie udalo mi sie natomiast z kwerendami.
Co zmienic w tym kodzie by importowaly sie rowniez kwerendy i pozostale
obiekty?
---
Sub ImportujKwerendy()
Dim db As Database
Dim mojDok As DAO.Document
Set db = OpenDatabase("c:TwojaBaza.mdb") ' nazwa bazy ze ścieżką
For Each mojDok In db.Containers("QUERIES").Documents
DoCmd.TransferDatabase acImport, "Microsoft Access", db.Name, acQuery,
mojDok.Name, mojDok.Name
Next
db.Close
Set db = Nothing
End Sub
-------
Pozdrawiam,
Andrzej
Użytkownik Krzysztof Ciuba <kci@calia.daewoo.lublin.plw wiadomości do
grup dyskusyjnych napisał:95u07f$1d@slimek.man.lublin.pl...
Masz dwa wyjścia:
A - ambitne:
Oczywiście, że procedura nie chodzi bo Acc2000 używa ADO. Przyznam się, że
ja dopiero zaczynam się z tym bawić. Jeśli Ty się w tym potrafisz poruszać
to poprubój.
1) Należy się połączyć z bazą danych za pomocą obiektu Connection
2) dla obiektów z tego połączenia wykonać zmodyfikowaną procedurę, którą
poprzednio przesłałem.
B - mniej ambitne:
Przełącz się przynajmniej na czas importu formularzy na bibliotekę DAO,
która rozumie typ database. W tym celu w oknie modułu VB:
Tools -References
zaznacz Microsoft DAO 3.6 Object Library
na wszelki wypadek zamień w kodzie
Dim mojDok As Document
na Dim mojDok As DAO.Document
i teraz już moja procedura powinna śmigać :-)
ps. nie zapomnij usunąć odwołanie do DAO 3.6
--
Pozdrowienia
KC
--
Moja poczta jest zawsze ze mną - e-mail przez WWW - http://rubikon.pl
Jeżeli chodzi o potencjalne problemy z referencjami, to
dodam, że korzystam z biblioteki Microsoft DAO 3.6 Object Library.
... i ósmą poprawkę do Dżeta (znaczy się mdac_typ.exe) oczywiście
zainstalowałeś?
| Co rozumiesz pod pojeciem referencje, bo albo cos
przeoczylem, albo czegos nie
| wiem, bo nie widze nic takiego.
Alt+F11
menu tools-references
i musisz włączyć referencję Microsoft DAO 3.6 jeżeli chcesz
używać dao
od wersji bodajże A2000 - jest używane ADO,
więc albo się pzresiądz albo podłącz referencję
| Zatem prosze o krotkie resume - jakie Dim i Set, lub gdzie
co ustawic, zeby
| domyslnie operowac DAO?
tjw. i będzie można używać obiektów poprzez DAO.
PS.
Na końcówkach na których będzie baza musisz mieć dao
zarejestrowane inaczej będzie ci wywalało błędy
(hehehe bo się moduł nie będzie chciał skompilować ;-)
Dokładniej ta:
W nowszych wersjach MS Access w projekcie VBA defaultową referencją jest
Microsoft ActiveX Data Objects 2.X Library (poprzednio było DAO) i dlatego
jesli chcemy korzystać w obiektów DAO , no Recordset DAO możemy zrobić, a
właściwie musimy, jedną z 3-ch następujących rzeczy
1. Dodać referencję w projekcie do Microsoft DAO 3.X Object Library, a linija
kodu deklaracji powinna wówczas wygladać następująco:
Dim rst As DAO.Recordset
2. Dodać referencję w projekcie do Microsoft DAO 3.X Object Library oraz
jednocześnie usunąć referencję do Microsoft ActiveX Data Objects 2.X Library a
linija kodu deklaracji może wówczas wygladać następująco :
Dim rst As Recordset
albo
Dim rst As DAO.Recordset
3. Zadbać o to aby refrecje w projekcie w okienku referencji były w kolejności
jak :
najpierw
Microsoft DAO 3.X Object Library
a potem dopiero
Microsoft ActiveX Data Objects 2.X
a linijka kodu deklaracji może wówczas wygladać następująco :
Dim rst As Recordset
albo
Dim rst As DAO.Recordset
czyli w każdym przypadku bezpieczniej jest użyć jednak deklaracji zprefiksem
DAO
Dim rst As DAO.Recordset
Dim db As Database
Dim tbl As TableDef
Dim fld As Field
Set db = CurrentDb
For Each tbl In db.TableDefs
With tbl
If .Name = NazwaTabeli Then
For Each fld In .Fields
With fld
If .Type = dbText And .AllowZeroLength = False Then
.AllowZeroLength = True
End If
End With
Next
End If
End With
Next
Problem w tym, że aby zastosować tę procedurę w Access2000 muszę dołączyć bibliotekę Microsoft DAO.
Czy da się to samo zrobić w Access2000 nie korzystając z DAO, a tylko z ADODB?
Próbowałem sobie wypisać przynajmniej nazwy field.properties, ale to chyba fałszywy trop. Zresztą zobaczcie kod:
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim fld As Field
Dim prp As Property
Set conn = CurrentProject.Connection
Set rs = New ADODB.Recordset
rs.Open "NazwaTabeli", conn
For Each fld In rs.Fields
debug.print fld.Name
debug.print fld.Type
For Each prp In fld.Properties
debug.print prp.Name
debug.print prp.Value
Next prp
Next fld
Czuję, że w ten sposób nie osiągnę mojego celu, bo nawet gdyby te properties coś mi mówiły, to chyba i tak nie dam rady zmienić parametrów tabeli, jeśli właśnie otwarty jest bazujący na niej rekordset. A więc nie tędy droga. Ale którędy?
Z góry dziękuję za pomoc.
Jurek
Jestem tutaj nowy, więc postanowiłem najpierw poszukać w archiwach zanim
wyskoczę z głupim pytaniem. Niestety, rozwiązania mojego problemu nie
znalazłem, jedyne co mogłem zauważyć, to to, że nie jestem jedynym mającym
problem z przejściem z DAO do ADO. A problem mam następujący. Access przy
tworzeniu nowej tabeli ustawia standardowo przy polach tekstowych właściwość
AllowZeroLength jako false. Dla mnie takie ustawienie jest niewygodne,
dlatego napisałem sobie jeszcze gdy używałem Access97 procedurkę zmieniającą
tę właściwość dla wszystkich pól tekstowych na true. Oto kod:
Dim db As Database
Dim tbl As TableDef
Dim fld As Field
Set db = CurrentDb
For Each tbl In db.TableDefs
With tbl
If .Name = NazwaTabeli Then
For Each fld In .Fields
With fld
If .Type = dbText And .AllowZeroLength = False Then
.AllowZeroLength = True
End If
End With
Next
End If
End With
Next
Problem w tym, że aby zastosować tę procedurę w Access2000 muszę dołączyć
bibliotekę Microsoft DAO.
A kto Ci to powiedzial, ze musisz?
Wystarczy, ze zmienisz 4 linijki w swoim kodzie i dalej bedzie dzialal "bez"
DAO:
Dim db 'As Database
Dim tbl 'As TableDef
Dim fld 'As Field
(tu reszta Twojego kodu z jedna zmiana - zamiast stalej dbText trzeba jawnie
podac jej wartosc=10:
If .Type = 10 And .AllowZeroLength = False Then
).
W ten sposob unikniesz odwolan do biblioteki DAO.
Dziala, sprawdz.
K.P.
Zrobilem sobie formularz testowy (chce najpierw zobaczyc zasade dzialania i
sposob odwolania do recordsetow).
Jest na nim kilka pol i guzik, po kliknieciu guzika wykonuje sie procedura :
Private Sub Polecenie12_Click()
Dim baza As Database
Dim rs As Recordset
Dim i As Byte
i = 0
Set baza = CurrentDb
Set rs = db.OpenRecordset("Branze", dbOpenTable)
If rs.EOF Then
' bla bla bla
Else
rs.MoveFirst
Do Until rs.EOF Or i = 7
i = i + 1
If i = 1 Then Me!Pole1 = rs.ID_Branze
If i = 2 Then Me!Pole2 = rs.ID_Branze
If i = 3 Then Me!Pole3 = rs.ID_Branze
If i = 4 Then Me!Pole4 = rs.ID_Branze
If i = 5 Then Me!Pole5 = rs.ID_Branze
If i = 6 Then Me!Pole6 = rs.ID_Branze
rs.MoveNext
Loop
End If
rs.Close
Set rs = Nothing
db.Close
Set baza = Nothing
End Sub
Zalaczylem referencje "Microsoft DAO 3.6 Object Library"
Po uruchomieniu (kliknieciu guzika) wyskakuje blad : "Object required" przy
linii :
Set {baza =} CurrentDb
tekst pomiedzy { } jest zaznaczony przez debugera
W czym jest problem ? Czy trzeba ustawiac gdzies jeszcze cos ?
W domu robilem testy, nie bylo tego bledu, byl za to blad odnosnie zmiennej
"rs", ze nie ma takiego typu (czy musze definiowac 'type' - zawartosc
recordsetu ? czy jest tworzona automatycznie w zaleznosci od obiektu
otwieranego ? )
Jeszcze jedno pytanko, jezeli w Tabeli "Branze" mam pole "ID Branze" i chce
pobrac dane z tego pola to czy dobrze napisalem :
If i = 1 Then Me!Pole1 = rs.ID_Branze ???
Z gory dziekuje za wyczerpujace odpowiedzi
Pozdrawiam !
Widget wrote:
Pytalem ostatnio o recordsety, jak to ruszyc. Po wielu godzinach szukania
udalo mi sie znalezc jakies opisy na zagranicznych serwisach. Jest dokladny
opis jak to ruszyc, gdzie co zaznaczyc itp.
Zrobilem sobie formularz testowy (chce najpierw zobaczyc zasade dzialania i
sposob odwolania do recordsetow).
Jest na nim kilka pol i guzik, po kliknieciu guzika wykonuje sie procedura :
Private Sub Polecenie12_Click()
Dim baza As Database
Dim rs As Recordset
Dim i As Byte
i = 0
Set baza = CurrentDb
Set rs = db.OpenRecordset("Branze", dbOpenTable)
If rs.EOF Then
' bla bla bla
Else
rs.MoveFirst
Do Until rs.EOF Or i = 7
i = i + 1
If i = 1 Then Me!Pole1 = rs.ID_Branze
If i = 2 Then Me!Pole2 = rs.ID_Branze
If i = 3 Then Me!Pole3 = rs.ID_Branze
If i = 4 Then Me!Pole4 = rs.ID_Branze
If i = 5 Then Me!Pole5 = rs.ID_Branze
If i = 6 Then Me!Pole6 = rs.ID_Branze
rs.MoveNext
Loop
End If
rs.Close
Set rs = Nothing
db.Close
Set baza = Nothing
End Sub
Zalaczylem referencje "Microsoft DAO 3.6 Object Library"
Po uruchomieniu (kliknieciu guzika) wyskakuje blad : "Object required" przy
linii :
Set {baza =} CurrentDb
tekst pomiedzy { } jest zaznaczony przez debugera
W czym jest problem ? Czy trzeba ustawiac gdzies jeszcze cos ?
W domu robilem testy, nie bylo tego bledu, byl za to blad odnosnie zmiennej
"rs", ze nie ma takiego typu (czy musze definiowac 'type' - zawartosc
recordsetu ? czy jest tworzona automatycznie w zaleznosci od obiektu
otwieranego ? )
Jeszcze jedno pytanko, jezeli w Tabeli "Branze" mam pole "ID Branze" i chce
pobrac dane z tego pola to czy dobrze napisalem :
If i = 1 Then Me!Pole1 = rs.ID_Branze ???
Z gory dziekuje za wyczerpujace odpowiedzi
Pozdrawiam !
a co to jest db?
w linijce db.OpenRecordset ... ?
Pozdrawiam,
Krzysiek
Microsoft DAO 2.5? 2.6? Nie jestem pewien... ale chyba to jest to.
To to, dzieki.
Michal
Użytkownik Mirek :-) <dc@it.plw wiadomości do grup dyskusyjnych
napisał:a1uv9v$89@news.tpi.pl...
przy otwartym module :
Nrzędzia -odwołania -
sprawd czy masz zaznaczone microsoft DAO 3.51 Object Library
ewentualnie odznacz wszystko co jest opatrzone napisem
"BRAKUJE"
Użytkownik "SgTs" <s@interia.plnapisał w wiadomo ci
| Witam serdecznie.
| Dostałem komunikat:
| Compile error:
| User-defined type not defined
| i zaznaczone jest: dbs As database
| i ponownie proszę o pomoc.
| Pozdrawiam
| SgTs
| s@interia.pl
| Użytkownik Mirek :-) <dc@it.plw wiadomości do grup dyskusyjnych
| napisał:a1uu7u$p8@news.tpi.pl...
| np. pod kliknięciem klawisza :
| dim dbs as database, rst as recordset
| set dbs = currentdb
| set rst = dbs.openrecordset("TwojaTabela")
| rst.addnew
| rst![Twoje_Pole_w_Tabeli] = me.Twoj_Niezwiazany_Formant.Value
| rst.update
| set dbs= nothing
| set rst = nothing
| koniec
| Pozdrawiam
| Mirek
| Użytkownik "SgTs" <s@interia.plnapisał w wiadomo ci
| | Witam serdecznie.
| W formularzu są niezwiązane pola z żadną tabelą. Jak pobrać
wartości
| tych
| pól z formularza i umieścić je w tabeli za pomocą VB ???
| Pozdrawiam
| SgTs
| s@interia.pl
PS.
"SgTs" - Jej a kiedy ty masz imieniny ?
Użytkownik "SgTs" <s@interia.plnapisał w wiadomo ci
Witam ponownie.
Użytkownik Mirek :-) <dc@it.plw wiadomości do grup dyskusyjnych
napisał:a1uv9v$89@news.tpi.pl...
| przy otwartym module :
| Nrzędzia -odwołania -
| sprawd czy masz zaznaczone microsoft DAO 3.51 Object Library
| ewentualnie odznacz wszystko co jest opatrzone napisem
| "BRAKUJE"
| Użytkownik "SgTs" <s@interia.plnapisał w wiadomo ci
| | Witam serdecznie.
| Dostałem komunikat:
| Compile error:
| User-defined type not defined
| i zaznaczone jest: dbs As database
| i ponownie proszę o pomoc.
| Pozdrawiam
| SgTs
| s@interia.pl
| Użytkownik Mirek :-) <dc@it.plw wiadomości do grup dyskusyjnych
| napisał:a1uu7u$p8@news.tpi.pl...
| np. pod kliknięciem klawisza :
| dim dbs as database, rst as recordset
| set dbs = currentdb
| set rst = dbs.openrecordset("TwojaTabela")
| rst.addnew
| rst![Twoje_Pole_w_Tabeli] = me.Twoj_Niezwiazany_Formant.Value
| rst.update
| set dbs= nothing
| set rst = nothing
| koniec
| Pozdrawiam
| Mirek
| Użytkownik "SgTs" <s@interia.plnapisał w wiadomo ci
| | | Witam serdecznie.
| | W formularzu są niezwiązane pola z żadną tabelą. Jak pobrać
wartości
| tych
| | pól z formularza i umieścić je w tabeli za pomocą VB ???
| | Pozdrawiam
| | SgTs
| | s@interia.pl
Pozdrawiam i dziękuję za pomoc
Tomek
Użytkownik Mirek :-) <dc@it.plw wiadomości do grup dyskusyjnych
napisał:a1v01m$et@news.tpi.pl...
| Po zaznaczeniu pomogło. Jak wezmę bazę na inny komputer to również będę
| musiał to zaznaczać ???
możesz to zrobić za pomocą kodu
albo wpisywać jak to zaproponował "SgTs"
PS.
"SgTs" - Jej a kiedy ty masz imieniny ?
Użytkownik "SgTs" <s@interia.plnapisał w wiadomo ci
| Witam ponownie.
| Użytkownik Mirek :-) <dc@it.plw wiadomości do grup dyskusyjnych
| napisał:a1uv9v$89@news.tpi.pl...
| przy otwartym module :
| Nrzędzia -odwołania -
| sprawd czy masz zaznaczone microsoft DAO 3.51 Object Library
| ewentualnie odznacz wszystko co jest opatrzone napisem
| "BRAKUJE"
| Użytkownik "SgTs" <s@interia.plnapisał w wiadomo ci
| | Witam serdecznie.
| Dostałem komunikat:
| Compile error:
| User-defined type not defined
| i zaznaczone jest: dbs As database
| i ponownie proszę o pomoc.
| Pozdrawiam
| SgTs
| s@interia.pl
| Użytkownik Mirek :-) <dc@it.plw wiadomości do grup dyskusyjnych
| napisał:a1uu7u$p8@news.tpi.pl...
| | np. pod kliknięciem klawisza :
| | dim dbs as database, rst as recordset
| | set dbs = currentdb
| | set rst = dbs.openrecordset("TwojaTabela")
| | rst.addnew
| | rst![Twoje_Pole_w_Tabeli] = me.Twoj_Niezwiazany_Formant.Value
| | rst.update
| | set dbs= nothing
| | set rst = nothing
| | koniec
| | Pozdrawiam
| | Mirek
| | Użytkownik "SgTs" <s@interia.plnapisał w wiadomo ci
| | | | Witam serdecznie.
| | W formularzu są niezwiązane pola z żadną tabelą. Jak pobrać
| wartości
| tych
| | pól z formularza i umieścić je w tabeli za pomocą VB ???
| | Pozdrawiam
| | SgTs
| | s@interia.pl
Jacek (jacek_ku@poczta.onet.pl)
Znalazłem.:-)))) piękne dzięki. Zaznaczyłem jeszcze Microsoft DAO 3.6 Object
Library i mogę teraz wpisać:
Dim Zmienna As DAO.Database
Piękne dzięki!!!
Usunalem wpisy z tabel, ale jezeli wpisuje nowa osobe do bazy to nadal
autonumeruje od nr 19 a nie od 1 . Jak to usunac ?
Pisałam już tą notatkę, ale nie mogę jej odnaleźć w wyszukiwarce, widocznie
coś „mi nie wyszło”. Z góry przepraszam Panowie strasznie zazwyczaj
krzyczą... aż strach coś napisać...otóż na stronie
http://www.liquorman.net/Tips.html znalazłam aplikację, która umożliwia
resetowanie pola autonumerowanego przy pomocy ADOX. Nie trzeba korzystać z
całej tej aplikacji, można wykorzystac funkcję ChangeSeedADOX, zamieszczona
poniżej. Podalam też przykładowe wywołanie....
'''' przykładowe wywołanie
Function ResetAutonumer()
'''' Referencje do Microsoft DAO 3.6 Object Library
Dim oDB As DAO.Database
Set oDB = CurrentDb
Dim sNazwaTabeli As String
sNazwaTabeli = "danewykresu"
'''' usuwanie rekordów tabeli
oDB.Execute ("DELETE * FROM " & sNazwaTabeli & ";")
'''' usatwienie pola autonumerowanego
Call ChangeSeedADOX(oDB.Name, sNazwaTabeli, "Identyfikator", 1)
End Function
Public Function ChangeSeedADOX(strDB As String, _
strTbl As String, _
strCol As String, _
lngSeed As Long) As Boolean
'''' http://www.liquorman.net/Tips.html
'''' strTbl = tabela zawierajaca pole autonumerowane
'''' strCol = nazwa autonumerowanego pola
'''' lngSeed = Long integer wartośc jaką chcesz użyć jako początową
'''' dla pola autonumerowanego
'''' Referencja do Microsoft ActiveX Data Objects 2.X
'''' Referencja do Microsoft ADO Ext 2.x for DDL and Security Libraries
Dim cnn As ADODB.Connection
Dim cat As New ADOX.Catalog
Dim col As ADOX.Column
Dim strcnn As String
'''' ustalenie połączenia
Set cnn = CurrentProject.Connection
cat.ActiveConnection = cnn
Set col = cat.Tables(strTbl).Columns(strCol)
col.Properties("Seed") = lngSeed
cat.Tables(strTbl).Columns.Refresh
If col.Properties("Seed") = lngSeed Then
ChangeSeedADOX = True
Else
ChangeSeedADOX = False
End If
Set col = Nothing
Set cat = Nothing
Set cnn = Nothing
End Function
RTFF!
Poza tym juz to bylo przerabiane nie dalej jak 27.05
Zanim wyslesz poczytaj inne posty!
BarneyG :o)]
Przepraszam Panowie, ale ponieważ i ja szukałam tego tematu i nie znalazłam
nic co by mnie zadowalało, pozwolę sobie przytoczyć rozwiązanie na podstawie
strony http://www.liquorman.net/Tips.html. Nie trzeba całej przytoczonej tam
aplikacji wystarczy funkcja ChangeSeedADOX
Public Function ChangeSeedADOX(strDB As String, _
strTbl As String, _
strCol As String, _
lngSeed As Long) As Boolean
''''strTbl = tabela zawierajaca pole autonumerowane
''''strCol = nazwa autonumerowanego pola
''''lngSeed = Long integer wartośc jaką chcesz użyć jako początową
''''dla pola autonumerowanego
'''' Referencja do Microsoft ActiveX Data Objects 2.x
'''' Referencja do Microsoft ADO Ext 2.x for DDL and Security Libraries
Dim cnn As ADODB.Connection
Dim cat As New ADOX.Catalog
Dim col As ADOX.Column
Dim strcnn As String
'''' ustalenie połączenia
Set cnn = CurrentProject.Connection
cat.ActiveConnection = cnn
Set col = cat.Tables(strTbl).Columns(strCol)
col.Properties("Seed") = lngSeed
cat.Tables(strTbl).Columns.Refresh
If col.Properties("Seed") = lngSeed Then
ChangeSeedADOX = True
Else
ChangeSeedADOX = False
End If
Set col = Nothing
Set cat = Nothing
Set cnn = Nothing
End Function
'''' przykładowe wywołanie
Function ResetAutonumer()
'''' Referencje do Microsoft DAO 3.6 Object Library
Dim oDB As DAO.Database
Set oDB = CurrentDb
Dim sNazwaTabeli As String
sNazwaTabeli = "danewykresu"
'''' usuwanie rekordów tabeli
oDB.Execute ("DELETE * FROM " & sNazwaTabeli & ";")
'''' usatwienie pola autonumerowanego
Call ChangeSeedADOX(oDB.Name, sNazwaTabeli, "Identyfikator", 1)
End Function
Sorki, nie krzyczcie tylko, jeśli to rozwiązanie gdzieś w archiwum jest,
bardzo proszę, zresztą na kobietę nie wypada...
Tak często się pouczacie, aż strach coś napisać, sorki jeszcze raz za uwagę
również... Karolina
| Odpalasz excela, Edytor Visual Basic/Tools(Narzędzia)/References
(Odwołania)
| a potem 'odchaczasz' Microsoft DAO 3.6 Object Library lub inne
ja bym zahaczył ... :/
mam zaznaczone to samo. Ale mam taki problem. Jak wejde w te opcje na tej
bazie to wyskakuje mi :
BRAKUJE: MsiSys OLE Control module (Microsoft Internet Transfer Control
5.0
BRAKUJE: Microsoft Windows Common Controls 5.0 (SP2)
BRAKUJE:Microsoft Windows Common Controls-2 5.0
BRAKUJE: Microsoft Internet Controls
BRAKUJE: DirectAnimation Library
BRAKUJE: IE Timer
BRAKUJE: Microsoft ActiveMovie Control
BRAKUJE: EYEDOG OLE Control module
BRAKUJE: Microsoft FlexGrid Control 5.0
BRAKUJE: Microsoft Internet Transfer Control 5.0
Najlepszy jest patent, ze to zwykla baza adresowa i ni jak nie uzywa
takich pierdol. Dowiedzialem sie wlasnie, ze ten kumpel ma u siebie
zaistalowane dwa office'y 95 i 97 (oba Prof). Ale robil ta baze pod 97.
Moze to ma jakies znaczenie ? Ja ni w zab nie moge zainstalowac tego 95.
Musi byc jak jest. Moze jeszcze jakkis pomysl :-))))
Dominik Jesiołowski wrote:
Jacek Kuchta wrote:
| Sprawdzalem na kilku komputerach z roznymi systemami
| operacyjnymi, ale na kazdym jest tak samo. Baza wywala sie na
| podstawowych chyba komendach VBA: glownie na str i chr. Wywala sie z
| komunikatem: "Błąd kompilacji. Nie można znaleźć projektu lub
| biblioteki. Natomaist kumpel mowi, ze u niego działa.
Modul (widok projekt) -Narzedzia -Odwolania
Ja mam tam zaznaczone:
Visual Basic For Applications
Microsoft Access 8.0 Object Library
Microsoft DAO 3.5 Object Library
Po tym jak tam grzebalem pozbylem sie wspomnianego problemu.
Pozdrawiam
Dominik Jesiołowski
I jeszcze dołączyć bibliotekę, o ile nie zrobiono tego wcześniej:
Projekt dowolnego modułu/Tools/References/Microsoft DAO 3.6 Object Library
Jak to zrobić? DZIĘKI !!!!
Użytkownik Jacek Kubek <jacek_ku@poczta.onet.plw wiadomości do grup
dyskusyjnych napisał:958ibp$h5@news.onet.pl...
Krzysztof Naworyta:
| Nie jestem aż taki początkujący, ale od pewnego czasu nie mogę dojść
| do tego, w jaki sposób w Accessie 2000 uzyskać dostęp do typów
| zmiennych: Database, QueryDef i innych związanych z Recordsetem.
| W helpie i książkach na rynku jest mnóstwo przykładów z takimi
| typami zmiennych, a mnie się to jakoś nie udaje (używając Variant nie
| udaje mi się otworzyć Recordsetu).
| Ciekawe ... Ludzie helpy czytają ale nie widzą ...
| 1)
| Zmienne obiektowe deklaruje się jako konkretny obiekt:
| Dim rst As Recordset
| Dim db As Database
| itd.
| 2)
| Przypisanie do zmiennej obiektowej musi być poprzedzone
| słowem kluczowym Set:
| Set rst = CurrentDb.OpenRecordset("Tabela1")
| Set rst2 = rst
| itp.
| P.S.
| Przykłady dotyczą DAO
| Jeśli używasz Access 2000 domyślnie używasz ADO
| Jeśli nadal chcesz używać DAO należy odpowiednie zmienne deklarować
jawnie:
| Dim rst As DAO.Recordset
I jeszcze dołączyć bibliotekę, o ile nie zrobiono tego wcześniej:
Projekt dowolnego modułu/Tools/References/Microsoft DAO 3.6 Object Library
Jacek
Wielki dzięki,
ale nie mam dostępu do obiektów: QueryDef, Database, a nawet Workspace.
Także polecenia:
Dim db As Database
Dim qry as QueryDef
kończą się komunikatem: "User-defined type not defined"
Nie wiem, może coś jest z moim Accessem. Używam w firmie wersji legalnej
Office'a, w domu z aplikacji mniej legalnej i w obu przypadkach
dzieje się tak samo.
| I jeszcze dołączyć bibliotekę, o ile nie zrobiono tego wcześniej:
| Projekt dowolnego modułu/Tools/References/Microsoft DAO 3.6 Object
Library
Jak to zrobić? DZIĘKI !!!!
Użytkownik Jacek Kubek <jacek_ku@poczta.onet.plw wiadomości do grup
dyskusyjnych napisał:958ibp$h5@news.onet.pl...
| Krzysztof Naworyta:
| Nie jestem aż taki początkujący, ale od pewnego czasu nie mogę dojść
| do tego, w jaki sposób w Accessie 2000 uzyskać dostęp do typów
| zmiennych: Database, QueryDef i innych związanych z Recordsetem.
| W helpie i książkach na rynku jest mnóstwo przykładów z takimi
| typami zmiennych, a mnie się to jakoś nie udaje (używając Variant
nie
| udaje mi się otworzyć Recordsetu).
| Ciekawe ... Ludzie helpy czytają ale nie widzą ...
| 1)
| Zmienne obiektowe deklaruje się jako konkretny obiekt:
| Dim rst As Recordset
| Dim db As Database
| itd.
| 2)
| Przypisanie do zmiennej obiektowej musi być poprzedzone
| słowem kluczowym Set:
| Set rst = CurrentDb.OpenRecordset("Tabela1")
| Set rst2 = rst
| itp.
| P.S.
| Przykłady dotyczą DAO
| Jeśli używasz Access 2000 domyślnie używasz ADO
| Jeśli nadal chcesz używać DAO należy odpowiednie zmienne deklarować
| jawnie:
| Dim rst As DAO.Recordset
| I jeszcze dołączyć bibliotekę, o ile nie zrobiono tego wcześniej:
| Projekt dowolnego modułu/Tools/References/Microsoft DAO 3.6 Object
Library
| Jacek
DAO musi być deklarowane JAWNIE (domyślnym jest ADO):
Dim db As DAO.Database
itd.
Teraz już wszystko jasne? ;-)
Jacek
© 2009 Najlepszy miesiąc kawalerski w Polsce !!! - Ceske - Sjezdovky .cz. Design downloaded from free website templates