• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

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
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

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.
 
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 ?
 
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.
 
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:
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=?
 
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.
 
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:
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.

.
 
@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.

.
 
@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.
 
Geri
Üst