Excel'de MSSQL'e ait StoreProcedure Çalıştırmak

Katılım
21 Eylül 2006
Mesajlar
14
Excel Vers. ve Dili
xp türkçe
Selamlar;

Aşağıda MSSQL'de daha önceden oluşturulmuş bir StoreProcedure var ancak bunu ADO RecordSet'e alıp çalıştırmak istediğim zaman Nesne Kapalı Olduğundan işlem yapılamaz şeklinde hata veriyor bu işlemi RecordSet dışında bir özellikle yapma şansı varmı veya başka bir ADO özelliğimi kullanmam gerekiyor... Kod Örneği aşağıda belirtildiği gibidir....


//-------------------------------------------------
Private Sub btnBasla_Click()
Dim SenConn As ADODB.Connection
Dim SenRst As ADODB.Recordset
Dim strSQL, strWHERE, TableName, FindCode As String
Dim firscell As Integer
Dim baslikOK As Boolean
LoadGlobalStr
strSQL = "exec MUHASEBE_REPORT '01', '1', '3', '2008-01-01', '2008-01-31'"
Set SenConn = New ADODB.Connection
With SenConn
.CursorLocation = adUseClient
.Open strADOConString
Set SenRst = .Execute(strSQL)
End With
SenRst.MoveFirst
firstcell = 2
baslikOK = False
While Not SenRst.EOF
If Not baslikOK Then
For i = 0 To SenRst.Fields.Count - 1
ActiveSheet.Cells(firstcell - 1, i + 1) = SenRst.Fields(i).Name
Next
End If
For i = 0 To SenRst.Fields.Count - 1
ActiveSheet.Cells(firstcell, i + 1) = SenRst.Fields(i).Value
Next
baslikOK = True
firstcell = firstcell + 1
SenRst.MoveNext
Wend
End Sub
//----------------------------------------------------------------
 
Katılım
28 Temmuz 2007
Mesajlar
60
Excel Vers. ve Dili
All Versions
Selamlar;

Aşağıda MSSQL'de daha önceden oluşturulmuş bir StoreProcedure var ancak bunu ADO RecordSet'e alıp çalıştırmak istediğim zaman Nesne Kapalı Olduğundan işlem yapılamaz şeklinde hata veriyor bu işlemi RecordSet dışında bir özellikle yapma şansı varmı veya başka bir ADO özelliğimi kullanmam gerekiyor... Kod Örneği aşağıda belirtildiği gibidir....


//-------------------------------------------------
Private Sub btnBasla_Click()
Dim SenConn As ADODB.Connection
Dim SenRst As ADODB.Recordset
Dim strSQL, strWHERE, TableName, FindCode As String
Dim firscell As Integer
Dim baslikOK As Boolean
LoadGlobalStr
strSQL = "exec MUHASEBE_REPORT '01', '1', '3', '2008-01-01', '2008-01-31'"
Set SenConn = New ADODB.Connection
With SenConn
.CursorLocation = adUseClient
.Open strADOConString
Set SenRst = .Execute(strSQL)
End With
SenRst.MoveFirst
firstcell = 2
baslikOK = False
While Not SenRst.EOF
If Not baslikOK Then
For i = 0 To SenRst.Fields.Count - 1
ActiveSheet.Cells(firstcell - 1, i + 1) = SenRst.Fields(i).Name
Next
End If
For i = 0 To SenRst.Fields.Count - 1
ActiveSheet.Cells(firstcell, i + 1) = SenRst.Fields(i).Value
Next
baslikOK = True
firstcell = firstcell + 1
SenRst.MoveNext
Wend
End Sub
//----------------------------------------------------------------
Hocam nesne zaten kapalı yahu strADOConString nerde ?
 
Katılım
21 Eylül 2006
Mesajlar
14
Excel Vers. ve Dili
xp türkçe
strADOConString değişkeni global bir değişken ve
LoadGlobalStr fonksiyonu ile daha önceki adımlarda yükleniyor....

Not;
aynı fonksiyon Select * from tabloadi şeklinde çalıştırıldığı zaman çalışıyor ve sonuçları excel sayfasına döküyor.
Not-2;
procedure SQL Query Analyzer'de çalıştırıldığı zaman sonuçlar izlenebiliyor...
 
Katılım
28 Temmuz 2007
Mesajlar
60
Excel Vers. ve Dili
All Versions
Sayın @mpirpanlar kusura bakmayın Excel dosyası olmadan şu nerden bu nerden mantığı ile yaklaşamaz kimse sorunuza , ilgili data kısımlarını boşaltıp yollarsanız bakalım.

Ayrıca SP ler SQL server içersinde çalışması kolaydır ama sizin bu şekilde bi uygulamada SQLString olarak bunları çalıştırmanız sanırım mümkün olmayacaktır neden derseniz sizin excel içersinde adodb.command nesnesi açarak bunun ayarlarını set etmeniz gerekir yani cmd nin tipini sp olarak göstermeniz gerekli diye biliyorum.

En azından Basic Dil grubunda SP çalıştırmanın mantığı budur.

Not : procedure SQL Query Analyzer'de çalıştırıldığı zaman sonuçlar izlenebiliyor... demişsiniz bu zaten normal olarak sizin sp çalıştırmanız için hazırlanmıştır. SP nizin ne sonuç döndüğünü anlamam açısından sp nin de kodlarını aktarmanız lazım aceba doğrumudur yanlışmıdır return değer varmı bilemiyoruz.

Saygılarımla
 
Son düzenleme:
Katılım
21 Eylül 2006
Mesajlar
14
Excel Vers. ve Dili
xp türkçe
Konu hakkında dosya ekleri

Dosya xla dosyası... yanlız kod şu anda ilk gönderdiğim gibi değil command kullanarak parametre yükledim. son hali xla dosyasında. ayrıca txt dosyasında da sp var ordan inceleyebilirsiniz.

Not 3 : sp çalıştığı zaman birden fazla satırlı dönüyor bu konuda da bilginiz olsun...
 
Katılım
28 Temmuz 2007
Mesajlar
60
Excel Vers. ve Dili
All Versions
öncelikte bu kodu yazan arkadaşı canı gönülden tebrik ederim :)
SP deli yazılmış tek kelime ile sorunu anlamaya çalışıyorum kodları inceliyorum benim kodlama tarzımda kodlamış çözebilirsek çözecez bakalım.
 
Katılım
28 Temmuz 2007
Mesajlar
60
Excel Vers. ve Dili
All Versions
Set SentezRst = SentezCom.Execute

If SentezRst.RecordCount > 0 Then
'Call
End If

satırı önünde bi
mesagebox SentezRst.RecordCount
eklediğinizde dönen kayıt sayısı kaç dönüyor hocam ( eğer şirket prosedürlerinize aykırı deilse BT ciniz ile birlikte teamwiever üzerinden gelip göz atmak isterim çok deişik bir kod. Bu arada ne şirketisiniz siz bu kadar kapsamlı bi mssql çalışması valla bravo . ben üniversite arge labda çalıştığım zamanlarımda ancak bu kadar kapsamlı sp yazan görmüştüm.
 
Katılım
21 Eylül 2006
Mesajlar
14
Excel Vers. ve Dili
xp türkçe
rica ederim... Ama şu sorunda takıldım işte...

Ben özel bir yazılım geliştirme firmasında yazılım geliştirme mühendisi olarak çalışlmaktayım. Aslında bir önceki dosyaları bile göndermem doğru değildi ancak forumda sizin veya bir başka değerli arkadaşın bu sorunu çözebileceğini umud ediyorum. Sonuçta burası bir paylaşım sitesi ve oldukça güzel bilgiler paylaşılmış. Bende artık siteyi elimden geldiği kadar takip ediyorum ve yine zaman buldukça diğer sorulara elimden geldiği kadarı ile cevap vermeye çalışacağım. Son 2-3 gündür oldukça fazla örnek inceledim ancak yapılan örnekler hep aynı ve çalıştığı söyleniyor. Benim kodlamamda da bir sıkıntı yok. Anlamadığım ADODB.Command.Execute fonksiyonu zaten RecordSet test için bilinçli olarak sp'ye yanlış değer gönderdiğim zaman zaten daha execute aşamasında hata mesajı dönüyor... (Söz dizimi hatası veya gerekli parametre değeri yok diye.) Command nesnesinin Execute fonksiyonu zaten recordset olduğundan dolayı birden fazla satırlı ve sütunlu sp sonuçlarını destekliyor olması lazım. gerekli set etme işlemleri ve sırası da tamam gözüküyor ancak << nesne kapalı durumda iken EOF,BOF,RecordCount gibi özellikleri zaten kullanamasın gibisinden mesaj geri dönüyor.>>
 
Katılım
21 Eylül 2006
Mesajlar
14
Excel Vers. ve Dili
xp türkçe
Sanırım sorun anlık temp table oluşturma ile ilgili...

Tekrar selamlar.

aynı kodu ilgili database altında var olan normal table üzerinde denediğim zaman excel makrosu sorunsuz çalışıyor, ancak bir önceki sp örneğinde sp arka planda temp bir table oluşturuyor ve bu table iş bitince siliniyor... tabi bunun query analyzer'de çalışması normal o iş bitmeden önce queryanalyzer kendi gridine veya text formatına bunu yükledikten sonra temp table'i sildiği için sorun yok ancak ADODB.Command.Execute işi bittikten sonra temp dosya silindiğinden dolayı recordset kapalı durumda geliyor..

İşin çözümünü şu şekilde hallettim...

ilk sp içinde oluşturduğum ve yine sp içinde istediğim kriterlere göre sorguladığım sql sonucunu (grup by ve order by seçenekleri var) tempdb içerisine tekrar başında ## olan global bir tablo içine insert ediyorum ve yeni oluşan tempdb table'ini işim bittikten sonra tekrar excel ortamından siliyorum...

şu anda yazdığım sp çalışıyor. ilginiz için çok teşekkür ederim.
 
Katılım
28 Temmuz 2007
Mesajlar
60
Excel Vers. ve Dili
All Versions
Tekrar selamlar.

aynı kodu ilgili database altında var olan normal table üzerinde denediğim zaman excel makrosu sorunsuz çalışıyor, ancak bir önceki sp örneğinde sp arka planda temp bir table oluşturuyor ve bu table iş bitince siliniyor... tabi bunun query analyzer'de çalışması normal o iş bitmeden önce queryanalyzer kendi gridine veya text formatına bunu yükledikten sonra temp table'i sildiği için sorun yok ancak ADODB.Command.Execute işi bittikten sonra temp dosya silindiğinden dolayı recordset kapalı durumda geliyor..

İşin çözümünü şu şekilde hallettim...

ilk sp içinde oluşturduğum ve yine sp içinde istediğim kriterlere göre sorguladığım sql sonucunu (grup by ve order by seçenekleri var) tempdb içerisine tekrar başında ## olan global bir tablo içine insert ediyorum ve yeni oluşan tempdb table'ini işim bittikten sonra tekrar excel ortamından siliyorum...

şu anda yazdığım sp çalışıyor. ilginiz için çok teşekkür ederim.
Sorunun çözümlenmesine sevindim hocam gerçekten tebrik ederim bu sp yazma işinde cidden aşmışsın bende vb de çok iyiyimdir ama excelde çok kısıtlı olduğunda elimiz ayağımız bağlanıyor.

Saygılarımla
 
Üst