2016-04-04 21 views
0

VBA'ya yeni geliyorum ve bir Excel dosyasından bir SQL Server veritabanına bağlantı açan bir komut dosyası yazarken birkaç işaretçiye ihtiyacım var. VBA dil başvurusuna https://msdn.microsoft.com/en-us/library/office/gg264383.aspx numaralı telefondan bakıyorum ve bunun nasıl yapıldığına dair bilgi bulamıyorum. Aşağıdaki ben etrafında yüzen bulunan bir makro etkin excel dosyasından kazımak başarmış şudur:DB Bağlantısı için Excel VBA Komut Dosyası

Sub CopyData() 
    Dim sSQL As String 
    Dim rs As ADODB.Recordset 
    Dim cn As ADODB.Connection 
    Set cn = New ADODB.Connection 
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=[Server Name];Initial Catalog=[Catalog];" 
    End With 
End Sub 

Senaryoyu çalıştırdığınızda bir hata 'tanımlanmamış Kullanıcı tanımlı türü' verilecektir. Ve Dim rs AS ADODB.Recordset satırı vurgulanır. Bu yüzden benim anlayışım ADODB.Recordset'in henüz bir sınıf olarak tanımlanmadığı ... ama bunun yerleşik bir sınıf olduğunu düşündüm. Ve bunun yerleşik bir sınıf olmadığını varsayarak, bu sınıfın tanımlanacağı kaynak kodunda herhangi bir yeri bulamıyorum. Son hedefim, excel dosyasına girdiye dayalı bir SQL sorgusu çalıştırmak ve sorgunun sonuçlarını bitişik sütunlara çıkarmaktır. Sorularım:

1) Veri tabanı bağlantı nesnelerinde Microsoft belgelerini nerede bulabilirim? 2) Belki bir SQL sorusu daha, ama bağlantı dizesini nasıl biçimlendirmeliyim?

+1

Microsoft ActiveX Data Objects kitaplığı 2.8 ekleyin. "Microsoft" ile başlayanlardan biri olmalıdır .. – PKatona

+1

https://msdn.microsoft.com/en-us/library/ms677497(v=vs.85).aspx –

+0

Evet, Tim doğru bağlantıya sahip. – PKatona

cevap

1
Dim con As ADODB.Connection 
Dim rec As ADODB.Recordset 
Set con = New ADODB.Connection 
Set rec = New ADODB.Recordset 
rec.CursorLocation = adUseClient 
con.Open ("Provider=SQLOLEDB;Data Source=ip;Initial Catalog=dbname;user ID=userid; password=password;") 
Query = "SELECT unique_Id FROM data group by unique_Id;" 
rec.Open Query, con 
Do While rec.EOF() = False 
    'do events 
rec.MoveNext 
Loop 

hangi kütüphane emin değilim ama Araçlar/Referanslar giderek bir kütüphane eklemeniz gerekir bir Referans