2011-05-17 15 views
6

Erişim kodunda çalıştığımdan beri yıllar geçti ve bu beni gerçekten delil haline getiriyor.Access 2003/2007 'de kayıt defterini açın

Sadece bir şey hatırlamıyorum ve tek yapmak istediğim kodda bir kayıt seti açmak ve denediğim kodun çevrimiçi veya herhangi bir kodunu bulmam. Bunun

kısa: kutsal cehennemde

Dim rsSystem As Recordset 
Dim sSQL As String 

sSQL = "SELECT * FROM Table" 
Set rsSystem = CurrentDB.OpenRecordset(sSQL) 

Ne ben eksik

?

Şimdiden teşekkürler. Bir "Recordset" açma bütün permütasyon burada

+0

OpenRecordset yönteminde bir tür uyuşmazlığı hatası alıyorum. Yukarıda gösterilen kodu kullanıyorum, DAO veya ADODB niteleyicileri yok. – Tom

+0

Bir kod penceresinde iseniz, menü çubuğundan ** Araçlar/Referanslar ** açılırken ** Add References ** diyalog penceresine ulaşırsınız. –

+0

@Robert - Ah, teşekkürler – Tom

cevap

7

örnekleri: http://www.vbexplorer.com/VBExplorer/vb_feature/june2000/Database_Beginner_ADO_DAO.asp

kolay yolu geçerli veritabanında DAO kullanmaktır. ADO veya DAO kullanmak istiyorsanız

Dim rs As New ADODB.Recordset 
rs.Open "tblPeople", CurrentProject.Connection, adOpenDynamic 
+0

Sorgulamak istediğim her şey Access veritabanında yer aldığından bağlantı dizelerini kullanmak yerine yalnızca bir tür CurrentDB niteleyicisi kullanamıyorum? – Tom

+0

Tamam, DAO'ya bir referans eklemem gerekmiyor mu? Bunu Access 2010 içinden yapabileceğim bir yer bulamıyorum. – Tom

+0

Yukarıda eklediğim ADO'yu deneyin. –

1

karar: My VBA ... ADO

Dim db as DAO.Database 
Dim rs as DAO.Recordset 
Set db = CurrentDB 
Set rs = DB.OpenRecordset("table or query name") 

biraz paslanmış, ama? İşte bir DAO (Access/Jet için daha doğal) örneğidir. Bu kayıt kümesinde ne yapmak istediğinizden emin değilsiniz.

+0

Eklemeyi denediğimde bağlamsal listede DAO'yu görmüyorum, eminim ki bu sadece MDB'ye eklemem gereken bir referanstır, ancak benim için Hayatımı Access 2010 IDE – Tom

2
Dim rsSystem As Recordset 

Hem ADO hem de DAO nesne modelleri, Recordset nesnelerini içerir. Onları değiştiremezsin.

Hangisini istediğinizi belirtmediğinizden, sizin için bir ADO Recordset ... olabilir, bu da OpenRecordset yöntemindeki tür uyuşmazlığı hatasını hesaba katar. yöntem, bir DAO Recordset döner O

Set rsSystem = CurrentDB.OpenRecordset(sSQL) 

, böylece ilk gibi rsSytem ilan.

aç kodu:

Dim rsSystem As DAO.Recordset 
+0

'un herhangi bir yerinde referans bulamıyorum Evet teşekkürler. @ Yukarıdaki Robert'in çözüm benim için en iyi çalışır. Tüm bu Access eşyaları şimdi bana dönmeye başlıyor. – Tom

+1

Yukarıdaki yorumunuzu anlıyorsam, yanlış yönlendirilen ADO ile gitmeye karar verdiniz. MS'in 10 yıl önce neyi desteklediğini yansıtıyor, ancak bunu yapmak yanlıştı ve o zamandan beri Jet/ACE/ODBC verileriyle Access'te kullanılmak üzere DAO üzerinden ADO'yu desteklemeyi bıraktılar. –

7

bunu DAO veya ADO ise belirtmeden sadece Recordset bildirirseniz, Erişim sizin referanslar sırasına bağlı olarak DAO veya ADO, olacak mı kendi başına karar verecek penceresinde, Araçlar -> Referanslar'a gidin ve listeye bakın.
Böyle bir şey olacaktır:
Access references window

Bu örnekte, DAO hakkında bir başvuru ("Microsoft DAO 3.6 Nesne Kitaplığı") orada ve ADO ("Microsoft ActiveX Data Objects 2.5 Kitaplığı olduğunu görüyoruz ").

Recordset'inizi türü belirtmeden bildirirseniz, Access bu başvurulardan birincisini alır (= listenin en üstünde olanı) ve bu tür bir Recordset oluşturur. Bu örnekte, bu örnekte DAO.Recordset olacaktır.

Şimdi soruya geri dönün:
Türü belirtmeden, Recordset bildirirsiniz.
ilk başvuruda Erişim veritabanınız ADO ise, Access bir ADODB.Recordset oluşturur.
Sonra bir DAO.Recordset bekler bir DAO yöntemi ile açın, ve bu yüzden bu hatayı alırsınız. O zaman belirtmek gerekmez

  1. Access veritabanı sadece veya DAO (ama ikisi birden değil) ADO bir başvuru sahip olduğundan emin olun: sorunu çözmek için iki yol vardır

    Kayıt kümesinin türü.

  2. Gerçekten her iki kaynağa da ihtiyacınız varsa, kodlarınızın gerçekten beklediğinden emin olmak için her zaman kayıtlarınızı DAO.Recordset veya ADODB.Recordset olarak bildirin.
+0

Kapsamlı açıklama için teşekkürler. – Tom

2

"Tablo" SQL'de ayrılmış bir sözcüktür. Tablonuzu "tablo" olarak adlandırmanız gerekiyorsa, köşeli parantez içine alın: "SELECT * FROM [Table]".

İlgili konular