2016-03-31 24 views
0

Çalışmamdaki bir projeyle ilgili bir sorunum var. Sharepoint'te bir veritabanım var. .accdb dosyasına bağlanır (Access 2007/2010). Şimdiye kadar, standart ConnectionString (sadece Sağlayıcı - ACEDB 12.0) ile ADODB Bağlantısı kullandım.ADODB Recordset, tüm çok değer alanlı alanları Access'ten erişemiyor

Veritabanından çok değerli alanlardan birinden veri almaya çalıştığımda, bu sütun için kayıt kümesi boş. Örnek:

Birkaç sütun almalıyım: Kimlik, Yer, İsim, İnsanlar (MVF), Eğitmenler (MVF).

Kişiler sütununda tek kayıt 3-4 değerden daha büyük olduğunda - bu sütunun kayıt seti boş. Eğer 3-4'ten az değerler varsa, noktalı virgülle ayrılmış değerler alıyorum (MVF'nin kaynak verilerini almak için bir SOL JOIN deyimi bile fark yaratmaz)

Excel üzerinde çalışıyorum - End- kullanıcı SADECE Excel kullanır.

Bir Recordset'i izlediğimde - insanların değerlerinin yerleştirilmesi gerektiğinde boş değerlere sahiptir - Buna dayanarak sorunun bağlantı türünden veya bir şeyden kaynaklandığını düşünüyorum. Ayrıca DAO bağlantısını denedim - olumlu sonuç yok.

Ayrıca .accdb dosyasında sadece SQL'i çalıştırmak için geçici bir veritabanı yapmayı denedim (INSERT INTO tmpDB SELECT People FROM inputDB; - bir sözde koddur, sözdizimi iyidir) Ve sonra "Yapılamıyor" Çoklu değer alan için INSERT INTO ".

MVF'nin kullanılması önerilmez, ancak bir SharePoint DB'sidir ve rolüm yalnızca db'den Excel'e veri almaktır. Ben ODBC sürücüsü kullanmaya çalıştı

Güncelleme ...

objConn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" & myconn & ";Uid=Admin;Pwd=;" 

... yerine OLEDB sağlayıcı ...

objConn.Provider = "Microsoft.ACE.OLEDB.12.0" 
objConn.Open myconn 

... ama şimdi MVF daima boş.

+0

Daha iyi çalışıp çalışmadığını görmek için OLEDB sürücüsü yerine Access ODBC sürücüsünü kullanmayı denediniz mi? –

+0

Bu yardımcı olabilir. Yarın kontrol edeceğim. – Krukosz

cevap

0

Bu sorunu çözdüm. İşte yaptığım şey. Kodda sözdizimi hataları olabilir. Hafızamdan yazılan kodu buraya gönderiyorum - bu benim çalışma kodumun bir kopyası değil.

Ana ve en önemli şey bağlantı türüdür. Reserch sonra Microsoft, ADO bağlantısını kullanmanızı önerir. Daha önce gönderdiğim gibi, DAO kayıt kümesi aracılığıyla ek döngü gerektirir ve bu bir sorun olabilir ve Bağlantı dizesi olan DAO'nun kullanılması ADO'dan daha iyi görünmez.

en iyi ve MVFs gelen verileri almak için tek yol DAO olmakla bağlantı "OpenDatabase" yöntemi elde edilebilir GEREKİR - değerlerin büyük sayı ile MVFs hiçbir sorun yoktur bu durumda.

Sub ImportMVFs() 

Dim dbs As DAO.Database 
Dim rsRecord As DAO.Recordset 
Dim rsChild As DAO.Recordset 
Dim strSQL As String 
Set dbs = "Path to database - works with .accdb too" 
Set db = ws.OpenDatabase(dbs) 'This type of connection is a best way to import from MVF. 

strSQL = "SELECT * FROM tblToImport;" 
Set rsRecord = db.OpenRecordset(strSQL) 
Debug.Print rsRecord.Field("Column1").Value 
Debug.Print rsRecord.Field("Column2").Value 

Do Until rsRecord.EOF 

     Set rsChild = rsRecord.Field("MultiValuedFieldColumn") 

     Do Until rsChild.EOF 
     Debug.Print rsChild.Field(0).Value 'We have to iterate through all mvfs 
     'Here it's possible to make a temporary table in Access to reorganize MVFs into simple records 
     'For example: Using SQLQuery as SQL string with Execute method. 

     db.Execute SQLQuery 
     rsChild.MoveNext 
     Loop 

     rsRecord.MoveNext 

Loop 

rsRecord.Close 


Set rsRecord = Nothing 
Set dbs = Nothing 

End Sub