SQL İLE ÇEKTİĞİM VERİLERİ EXCELDE HÜCRELERE YAZARKEN HIZ SORUNU YAŞIYORUM ÇOK YAVAŞ!

ey58

Altın Üye
Katılım
17 Ocak 2023
Mesajlar
20
Excel Vers. ve Dili
2019 ve VBA
Altın Üyelik Bitiş Tarihi
17-01-2028
Merhaba sql serverdan verilerimi sql ile cekip vba koduma ekledim excelde hücrelere yazarken cok yavaş yazıyor kodumun notasyonu kötü sanırım yeni veriler geldiğinde eski veriler silinip yeni veriler gelsin istiyorum ama sadece verilerin geldiği hücreler temizlenip yeni veriler gelecek sekilde olmalı yazdım ama silme işlemini yaptırdıktan sonra daha yavaşladı yardımcı olabilir misiniz? çalısmayı ekliyorum şimdiden tesekkürler..
 

Ekli dosyalar

Katılım
12 Aralık 2015
Mesajlar
1,200
Excel Vers. ve Dili
Türkçe Ofis 2007
Veri/DışVeriAl/Diğer/Sql Server ile almak daha uygun olabilir Eğer tüm tabloyu değil de karışık bir Sql Metniniz varsa onu belirtirseniz.
 

ey58

Altın Üye
Katılım
17 Ocak 2023
Mesajlar
20
Excel Vers. ve Dili
2019 ve VBA
Altın Üyelik Bitiş Tarihi
17-01-2028
O sekilde yapabiliyorum ama tarih filtresi artı SQL in içine excelden bir hücreden değer girip işleme bunlarin hepsi VBA ile mümkün ve hepsini denedim inanın en hızlı verileri VBA çekiyor veri boyutu büyüdükçe sizin dediginiz yöntem tablo olarak cagiriyor sıkıntı değil ama mudehalleler çok mümkün olmuyor kullanım rahatlığı tarih aralığına göre verileri getirme çok harika işler çıkıyor VBA ile ama bu hız sorununu çözemedim 🤔
 

ey58

Altın Üye
Katılım
17 Ocak 2023
Mesajlar
20
Excel Vers. ve Dili
2019 ve VBA
Altın Üyelik Bitiş Tarihi
17-01-2028
Bende sorunun verileri hücreye yazdırma ve silme de olduğunu düşünüyorum VBA m çok iyi olmadığı için daha farklı bir yazdırma ve silme yöntemi vardir diye buraya yazdim.
 
Katılım
12 Aralık 2015
Mesajlar
1,200
Excel Vers. ve Dili
Türkçe Ofis 2007
ama mudehalleler çok mümkün olmuyor
Aslında mümkün, ilk önce tablo olarak verileri çekip daha sonra L1 ve M1 hücrelerine tarih girip, bu tarihler arsındaki verileri, aşağıdaki gibi bir kod ile alabilirsiniz.
Kod:
Sub verial()
Dim sqlmet As String
sqlmet = "SELECT* FROM Sayfa1 WHERE bastar>=" & CDbl(Range("L1")) & " AND bittar<=" & CDbl(Range("M1"))
With Range("A1").ListObject.QueryTable
        .CommandType = xlCmdSql
        .CommandText = sqlmet
        .Refresh 
    End With
End Sub
 
Son düzenleme:
Katılım
20 Mart 2023
Mesajlar
27
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Tarih filtresi koymak istiyorsanız alttaki şekilde parametre tanımlayarak excelde hücre üzerinden otomatik almasını sağlayabilirniz.
? için size parametre tanımlaması yapmanızı istediğinde ilgili hücreyi tanımlamanız yeterli.
Umarım doğru anlamışımdır.

Kod:
select * from tablo
where tarih=?
 

ey58

Altın Üye
Katılım
17 Ocak 2023
Mesajlar
20
Excel Vers. ve Dili
2019 ve VBA
Altın Üyelik Bitiş Tarihi
17-01-2028
Tarih filtresi koymak istiyorsanız alttaki şekilde parametre tanımlayarak excelde hücre üzerinden otomatik almasını sağlayabilirniz.
? için size parametre tanımlaması yapmanızı istediğinde ilgili hücreyi tanımlamanız yeterli.
Umarım doğru anlamışımdır.


evet çok sağolun doğru bu dediğiniz parametre tanımlamayı microsoft query ile yapmasını biliyorum ama ordada sunu yapmak gerekiyor uzun sql kodumu servera vıew olarak kaydedip vıewı cağırıyorum query kısmında parametlere tanımlayıp tarih kısmını filtreleyebiliyorum ama bu sefer en ufak bir sorgu değişikliğinde ekleme cıkarma bağlantıyı tekrar kurmam sorguyu tekrar cağırmam gerekiyor.. dediğim gibi yapanı gördüm o cok hızlı çalısıyor o yuzden onun yaptıgı gibi yapmaya çalısıyorum ama beceremicem sanırım.
 
Katılım
12 Aralık 2015
Mesajlar
1,200
Excel Vers. ve Dili
Türkçe Ofis 2007
Bir kere tablo oluşturduktan sora tekrar tablo oluşturmanıza gerek yok #5 nolu mesajdaki kodlar sadece o tablonun SQL metnini değiştiriyor ve tabloyu yeniliyor.
 
Son düzenleme:

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,305
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
SQL'den alınan verileri sayfaya alırken zaten "CopyFromRecordset" metodunu kullanıyorsunuz, bu hız açısından iyi bir şey ..... en azından döngüyle almıyorsunuz.

Bana göre esas sorun, SQL komutunda..... Çok fazla Join, Case-When, SubQuery .... var. Bunlar da, şartları sağlayan veri kümesinin Recordet nesnesine yazılmasını geciktiriyor.

.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,256
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
@Haluk üstadın da belirttiği gibi sorun ekrana listeleme değil, sorgunuzun çalışma mantığıyla ilgilidir.

Gördüğüm kadarıyla fatura bilgilerini alıyorsunuz. STLINE tablosunu JOIN işlemine dahil etmenize gerek yok. EXISTS ile kontrol eder ve SubQuery yerine CrossJoin kullanırsanız sorgunuzun çalışma hızıyla ekrana yazılma süresi dahil 1-3 saniye aralığında olacağını tahmin ediyorum.

.
 

ey58

Altın Üye
Katılım
17 Ocak 2023
Mesajlar
20
Excel Vers. ve Dili
2019 ve VBA
Altın Üyelik Bitiş Tarihi
17-01-2028
@ZekiGürsoy
fatura bilgilerinden ziyade faturanın içindeki malzemeleri görmek için stline tablosunu kullanıyorum malzeme hareketleri orda tutuluyor. CrossJoin i arastırıcam subquery gibi ayrı sütun halinde getiriyor mu bakıcam teskkür ederim.
 
Üst