CopyFromRecordset ve sütun başlıkları

Katılım
3 Nisan 2007
Mesajlar
235
Excel Vers. ve Dili
2003 TR
CopyFromRecordset kullanarak VEriTabanlarından veri aldırıyorum. Ancak sütun başlıkları gelmiyor. Mutlka bu işlevi kullanmamam gerekiyor, çünkü verileri Excele inanılmaz drecede hızlı çekiyor, tek eksiğim Verilerin veritababanındaki sütun başlıkları olmadan gelmesi.

Yardımcı olacak arkadaşlara teşekkürlerimi sunarım. :)

Sub VeriAl()
Sayfa1.Cells.Delete
Call Baglan("\\sql\MALİYET K SYSTEM\VERİ.mdb", "SELECT SİPARİS.[YMAMÜL TANIMI]," & _
"[STOK MALZEMEHAREKET].[MALZEME CİNSİSTH], " & _
"[STOK MALZEMEHAREKET].[İRSALİYE TARİHSTH], " & _
"[STOK MALZEMEHAREKET].[KAPANIS STH], " & _
"[RED TUTANAK].[RED NEDENİ], [RED TUTANAK].OPERATOR1 " & _
"FROM (SİPARİS LEFT JOIN [STOK MALZEMEHAREKET] ON SİPARİS.[ÜRÜN NO] = [STOK MALZEMEHAREKET].[ÜRÜN NOSTH]) " & _
"LEFT JOIN [RED TUTANAK] ON SİPARİS.[ÜRÜN NO] = [RED TUTANAK].[RÜRÜN NO] " & _
"WHERE (((SİPARİS.[FATURA ACIKLAMASI])='PLAN'))" & _
"ORDER BY SİPARİS.[SEVK TARİHİ];")
Sayfa1.Range("A1").CopyFromRecordset Rec
Call BaglantiKes
Sayfa1.Cells.Columns.AutoFit
End Sub
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Şöyle birşey olabilir....

sayfa1.range("a1")= rec.fields(0).name
sayfa1.range("b1")= rec.fields(1).name
sayfa1.range("c1")= rec.fields(2).name
sayfa1.range("a2").CopyFromRecordset Rec
 
Katılım
3 Nisan 2007
Mesajlar
235
Excel Vers. ve Dili
2003 TR
Ellerinize sağlık, bende DAO ile ilgisi ne konunun demiştim ve mesajı incelememiştim, şimdi baktığımda gördüm ve şöyle düzenledim

Sayfa1.Range("A2").CopyFromRecordset Rec
On Error Resume Next
For byt = 0 To Rec.Fields.Count
Cells(1, byt + 1) = Rec.Fields(byt).Name
Next byt
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Önemli değil.....

Alanlar çok fazla sayıda değilse, döngü kullanmayın... daha hızlı olur.
 
Katılım
8 Temmuz 2004
Mesajlar
254
Excel Vers. ve Dili
office 2007-mssql 2008 R2
Selam,

Bende her seferinde sütun başlıkları için ayrı bir kod yazıyordum. :)

Teşekkürler.
 
Katılım
3 Nisan 2007
Mesajlar
235
Excel Vers. ve Dili
2003 TR
Rec.Fields(1).Name
kullanarak sütun başlıklarını aldım. Peki Tablo adlarını nasıl yazdırabiliriz.

Yani; İlgili sütun hangi Table dan alınmış?
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Merhaba;

Aşağıdaki örnekte, Excel VBA ile bağlantı kurduğum bir MDB dosyasındaki tablo isimlerini aşağıdaki gibi alıyorum.

Siz kendinize göre uyarlayabilirsiniz herhalde...

Kod:
Sub Test()
    Dim DatabasePath As String
    Dim Cat As Object
    Dim i As Integer
    
    DatabasePath = "D:\TestFolder\vt1.mdb"
    Set Cat = CreateObject("ADOX.Catalog")
    Cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DatabasePath
    
    For i = 1 To Cat.tables.Count - 1
        If Not Left(Cat.tables(i).Name, 4) = "MSys" Then MsgBox Cat.tables(i).Name
    Next
End Sub
 
Son düzenleme:
Katılım
3 Nisan 2007
Mesajlar
235
Excel Vers. ve Dili
2003 TR
Teşekkürler ancak şöyle bir sorunum var;

Sub VT_VeriAl()
Application.ScreenUpdating = False
Sayfa1.Cells.Delete
Call BaglanExecute("\\sql\MALİYET K SYSTEM\VERİ.mdb", "SELECT DISTINCT " & _
"SİPARİS.[YMAMÜL TANIMI], SİPARİS.SADET, SİPARİS.[FİRMA KODUGELİR], SİPARİS.[MAMÜL KODU], SİPARİS.[MAMÜL TANIMI], SİPARİS.[SİPARİS TARİHİ], SİPARİS.[TESLIM TARIHI], SİPARİS.[SİPARİS LTL], SİPARİS.[SİPARİS LEURO], SİPARİS.[SİPARİS LDOLAR], SİPARİS.[SEVK TARİHİ], SİPARİS.YMAMÜLGRUP, SİPARİS.[FATURA NO], SİPARİS.[ÜRETİM TARİHİ], SİPARİS.[ÜRETİM TUTARI], SİPARİS.[FATURA TARİHİ], SİPARİS.[FATURA ACIKLAMASI], SİPARİS.[FATURA TUTARI], SİPARİS.HESAPTL, SİPARİS.[KKONTROL TARİHİ], SİPARİS.[KKONTROL YAPILDI], SİPARİS.[YI/YD], SİPARİS.[SİPARİS MALZEME], [STOK MALZEMEHAREKET].[TALEP TERMİNİ], [STOK MALZEMEHAREKET].[BİRİM FİYATYTLSTH], [STOK MALZEMEHAREKET].[BİRİM FİYATEUROSTH], [STOK MALZEMEHAREKET].[BİRİM FİYATDOLARSTH], [STOK MALZEMEHAREKET].TEDARİKCİSTH, [STOK MALZEMEHAREKET].TERMİNSTH, [STOK MALZEMEHAREKET].[MALZEME CİNSİSTH], [STOK MALZEMEHAREKET].[İRSALİYE TARİHSTH], [STOK MALZEMEHAREKET].[KAPANIS STH], [RED TUTANAK].[RED ADEDİ], " & _
"[RED TUTANAK].[RED TARİHİ], [RED TUTANAK].[RED MALZEME], [RED TUTANAK].[RED TUTAR], [RED TUTANAK].TEZGAH, [RED TUTANAK].OPERATOR1, [RED TUTANAK].OPERATOR2, [RED TUTANAK].[RED NEDENİ], [RED TUTANAK].RACIKLAMA, SİPARİS.[ÜRÜN NO], SİPARİS.[SIPARIS NO], SİPARİS.KAPANIS " & _
"FROM (SİPARİS LEFT JOIN [STOK MALZEMEHAREKET] ON SİPARİS.[ÜRÜN NO] = [STOK MALZEMEHAREKET].[ÜRÜN NOSTH]) LEFT JOIN [RED TUTANAK] ON SİPARİS.[ÜRÜN NO] = [RED TUTANAK].[RÜRÜN NO] " & _
"WHERE (((SİPARİS.[FATURA ACIKLAMASI])='PLAN'))" & _
"ORDER BY SİPARİS.[SEVK TARİHİ];")
Sayfa1.Range("A2").CopyFromRecordset Rec
On Error Resume Next
For int1 = 0 To Rec.Fields.Count
Sayfa1.Cells(1, int1 + 1) = Rec.Fields(int1).Name
Next int1

Call BaglantiKes
'Sayı Formatları
'Sayfa1.Range("I:K, Q:Q, T:T, V:V").NumberFormat = "#,##0.00"
Sayfa1.Cells.Columns.AutoFit
Sayfa1.Range("1:1").Font.Bold = True
End Sub

Sub Test()
Dim DatabasePath As String
Dim Cat As Adox.Catalog
Dim i As Integer, Biriktir As String
DatabasePath = "\\sql\MALİYET K SYSTEM\VERİ.mdb"
Set Cat = CreateObject("ADOX.Catalog")
Cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DatabasePath
For i = 1 To Cat.Tables.Count - 1
Select Case Left(Cat.Tables(i).Name, 4)
Case Is <> "MSys"
Debug.Print Cat.Tables(i).Name
End Select
Next
Cat.ActiveConnection.Close
End Sub


Şöyle bir sorunum var, Table adlarının tümü listeleniyor, bana ise sadece sorgumda kullandığım table adları lazım.

Yani Excel çektiğim verilerin ilk satırı verilerin çekildiği tablonun adı, ikinci satır şu an kodlarımda olduğu gibi sütun adları olmalı
 
Üst