SQL bağlantıyı Fonksiyon haline Getirmek

Katılım
17 Mayıs 2005
Mesajlar
117
Excel Vers. ve Dili
2013 TR
2013 EN
Merhabalar SQL den raporlama yaptığım dosyada SQL bağlantısını her makroda tanımlamak yerine bu bağlantıyı aşağıdaki kodlarla Fonsiyon olarak tanımladım,

Kod:
 Function SQL_Connect
 Dim conn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim SqlText, tirnak As String
    
 With conn
    .Provider = "sqloledb"
    .CommandTimeout = 1200
    .ConnectionString = "Data Source= NETSIS;USER ID= rapor;PASSW=;AUTO TRANSLATE=FALSE"
    .Open
    .DefaultDatabase = Sayfa1.Cells(2, 2).Value
    End With
  End Function
Daha sonra raporlama amacı ile aşağıdaki macroyu yazdım

Kod:
Sub Kotadan_Stok_Raporu()
 'On Error Resume Next

SQL_Connect
SqlText = "SELECT STOK_KODU,STOK_ADI,KOD_5,SUM(KULL_STOK_BKY),SUM(KULL_STOK_TUTAR),OTV_ORAN "
    SqlText = SqlText + " FROM MEH_KULLANILABILIR_STOK_MLYT"
    SqlText = SqlText + " GROUP BY STOK_KODU,STOK_ADI,KOD_5,OTV_ORAN"
    rs.Open SqlText, conn, adOpenStatic, adLockReadOnly
    Sayfa2.Activate
    Cells(2, 2).AutoFilter
    Sayfa2.Range("B3:I100").ClearContents
    i = 3
    Do While Not rs.EOF
        'Maliyet Listesine Yazdırma
        Sayfa2.Cells(1, 1).Value = i
        Sayfa2.Cells(i, 2).Value = rs(0)
        Sayfa2.Cells(i, 3).Value = rs(1)
        Sayfa2.Cells(i, 4).Value = rs(2)
        Sayfa2.Cells(i, 5).Value = rs(3)
        Sayfa2.Cells(i, 6).Value = rs(4)
        Sayfa2.Cells(i, 7).Value = rs(4) / rs(3)
        Sayfa2.Cells(i, 8).Value = rs(5)
        rs.MoveNext
        i = i + 1
        Loop
   
    conn.Close
    Set rs = Nothing
    Set conn = Nothing
End Sub
Macro başladığında fonksiyon işlevini yerine getirmekte ve bağlantıyı sağlamakta ancak bağlantıdan sonra makroya geri döndüğünde

Kod:
 rs.Open SqlText, conn, adOpenStatic, adLockReadOnly
Bölümüne geldiğinde
Kod:
Run Time Error '424' : 
Object Required
hatası vermekte bunu aşmanın bir yöntemi varmıdır,

her makroya tek tek vermekte mümkün şu anki haliyle her makro yeniden bağlantı kuruyor ancak dosyamda toplamda 1000 in üstünde rapor varyasyonu var ve bu durumda dosya boyuu çok fazla büyümekte, birazda olsa bunu azaltmak için bu tanım yapmam gerekiyor,


Saygılar,
 
Son düzenleme:

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,284
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
Fonksiyon, geriye değer döndüren yapıdır. Prosedür olarak kullanın.
 
Katılım
17 Mayıs 2005
Mesajlar
117
Excel Vers. ve Dili
2013 TR
2013 EN
İlginiz için teşekkür ederim ancak Ekleden Procedure yaptığımda çıkan öntanımlardan hepsini denememe rağmen hepsinde
Kod:
Run Time Error '424' : 
Object Required
hatasını verdi
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Merhabalar,

Şu şekilde deneyin. Burada mantık; bağlantının açık olup olmadığını kontrolü ve daha sonrasında kapalıysa, tekrar bağ kurma üzerinedir.

Standart bir modül sayfasına kopyalayın. Conn adlı değişkenin Public tanımlandığına dikkat edin ve kodlarınızın geri kalanlarında local olarak tanımladığınız conn değişkenlerini silin. Yoksa, derleme hatası alırsınız.

Kod:
Public conn As New ADODB.Connection
Sub SQL_Connect()
With conn
     If .State <> adStateOpen Then
        .Provider = "sqloledb"
        .CommandTimeout = 1200
        .ConnectionString = "Data Source= NETSIS;USER ID= rapor;PASSW=;AUTO TRANSLATE=FALSE"
        .Open
     End If
End With
End Sub
Daha sonra, herhangi bir prosed&#252;r&#252; &#231;al&#305;&#351;t&#305;rmadan &#246;nce bu alt prosed&#252;r&#252; &#231;a&#287;&#305;r&#305;n.

Kod:
Sub Kotadan_Stok_Raporu()
'On Error Resume Next
 
Call SQL_Connect
.....
....
End Sub
NOT : Herbir prosed&#252;r &#231;al&#305;&#351;t&#305;r&#305;ld&#305;&#287;&#305;nda, tekrar tekrar ba&#287;lant&#305; olu&#351;turulmayaca&#287;&#305; i&#231;in, kodlar&#305;n&#305;z&#305;n &#231;al&#305;&#351;mas&#305; farkedilir &#351;ekilde h&#305;zlanacakt&#305;r. H&#305;zlanman&#305;n etkilerini tam olarak g&#246;rebilmeniz i&#231;in ise; Prosed&#252;rlerinizin sonundaki conn.Close komutlar&#305;n&#305; kald&#305;r&#305;n.

&#199;al&#305;&#351;ma Kitab&#305;n&#305;z&#305;n kapanma -Private Sub Workbook_BeforeClose(Cancel As Boolean)- olay&#305;na da conn.close komutunu koymay&#305; unutmay&#305;n. Ba&#287;lant&#305;y&#305; i&#351;iniz bitti&#287;inde kesmeniz gerekir.
 
Son düzenleme:

Rafet

Altın Üye
Katılım
24 Mart 2005
Mesajlar
230
Excel Vers. ve Dili
Ofice 2010 - Türkçe
Altın Üyelik Bitiş Tarihi
01-12-2025
Sorunuza cevap veremicem. Ama Ayni şeyler üstune , yanı Netsisden raporlama üstüne çalıştığınızdan sorunuz dikkatimi cekti. Bende Netsisten Raporlarımı excel üstünden sağlamaktayım.
3 Servere birleştirerek 7 şube hakkında ayrı ayrı raporlama , takip etme konusunda doğan ihtiyaçlarımızdan dolayı bu yola girdim. Ve 1 senede öyle geliştiki artık hemen herşeyi excelden raporlar yaparak görmeye başladık.

Fakat sizin kullandığınız yönteminizden farklı. Recordset acıyosunuz. Ben bu şekilde bağlantıyı sadece UPDATE , INSERT işlemi yaparak sağlamaktayım. Kulladığım bağlantı sekli şu sekilde.

Kod:
baglanti2007 =  "ODBC;DRIVER=SQL Server;SERVER=192.168.0.0;UID=Kulanici;PWD=parola;APP=Microsoft Office 2003;DATABASE=DATABASE2007"

    With Sheets("Baglan").Range("Alan1").QueryTable
        .Connection = _
        "" & baglanti & ""
        .CommandText = Array( _
        "SELECT SUBE_KODU, UNVAN ,(CAST(SUBE_KODU AS CHAR(2))+UNVAN) SUBE FROM TBLSUBELER " _
        )
        .Refresh BackgroundQuery:=False
    End With
baglantiyi su an göstermek için bu şekilde gösterdim.Programımın içinde If komutuyla biraz varvasyonlar ile ve option tuşlarını kulanarak roprlarımda sorgulacak baglantiyi sectiriyorum.
Bu bağlantılarda SQL in şifresi gözüktüğünden bir excel sayfasında tanımlayarak baglanti bilgilerini bu sayfada tutmaya çalışıtım. Fakat sayfa şifrelemenin güvenlikli olmadığını düşünerek Accses veritabanıda tutmaya ordan cekmeye çalışıtım Fakat sağlıklı olmadı hala bi çözüm bulamadım.

Ben Excel fonksiyonu oluşturma düşünceniz bende başka düşünceler uyandırdı.
Bir sonuca varırsam excel.web.tr tabi silerle paylaşmak isterim.
 
Katılım
17 Mayıs 2005
Mesajlar
117
Excel Vers. ve Dili
2013 TR
2013 EN
verdi&#287;iniz yard&#305;m ve emekleriden &#246;t&#252;r&#252; Say&#305;n Fpc ve Rafet hocalar&#305;ma sayg&#305;lar&#305;m&#305; sunuyorum
 
Üst