Merhaba arkadaşlar,
Konu başlığından da anlaşılabileceği gibi bu konumuzda Docmd.RunSql ile CurrentDb.Execute arasındaki farkı inceleyeceğiz.
İlk olarak her iki komut için kısa bir bilgi verelim;
Docmd.RunSql komutu Access arayüzü (interface) ile çalışırken, CurrentDb.Execute komutu Database Engine kullanır. (CurrentDb.Execute komutu DAO komutudur. )
Şimdi de gelin iki komut arasındaki farkları (Aslında bu farkların sebebi CurrentDb.Execute komutunun Database Engine kullanmasından kaynaklanmaktadır. ) kısaca sıralayalım;
1)Docmd.RunSql komutu bir Access komutu olduğundan, otomatik olarak form rapor Vs. kontrollerini algılayabilmektedir. Bu sebepten bu komut içinde kontrolleri belirtebiliriz. Örneğin [Forms]![Form1]![MetinKutusu1] komutunu Docmd.RunSql içinde kullanabiliriz. Buna rağmen CurrentDb.Execute komutu içinde formlardaki kontrolleri kullanamayız. (Çünkü DAO form kontrollerini pek sallamıyor
) Bu işlem için VBA'da değişkenleri kullanabiliriz. Örneğin formda hesaplanan bir değer varsa bu değeri VBA'da bir değişken yardımı ile tutabiliriz. Ardından CurrentDb.Execute komutu içinde kullanabiliriz.
2) Docmd.RunSql komutu size sürekli soru sorar. Eeee bu da canımızı sıkar. Yok efendim 2 kayıt ekliyorsunuz, yok efendim 32 kayıt güncelliyorsunuz. Tabii bu durumu engellemenin de bir yolu var. Aşağıdaki kodları kullanıyoruz:
Şimdi gelelim CurrentDb.Execute komutuna. Bu komut bizi hiç rahatsız etmez. Arka planda kayıtlarını, güncellemelerini, kayıt silme işlemlerini sessiz sedasız gerçekleştirir. (Hiç soru sormaz, bazen diyorum bu komutun bir benzeri hayatta da olsa
)
3) Karmaşık sorgularda CurrentDb.Execute komutu Docmd.RunSql komutuna göre çok daha hızlıdır. (Hadi abartmayalım
Hızlıdır diyelim )
4) Eğer yüklenmekte olan bir formda CurrentDb.Execute komutu çalıştırılırsa ve aynı zamanda da bu formda kayıt işlemi gerçekleştirilmeye çalışılırsa Access bizi uyarabilir.. Der ki: Farklı bir kullanıcı kaydı değiştirdi. (Tam olarak böyle demese de buna benzer bir şeyler kesin der. Sorunludur bu Access
) Bilmez ki bizim Access'imiz, o işlemi yapan başka kullanıcı değil, canımız ciğerimiz ADO'muzdur. 
Evet arkadaşlar işte bu iki komut arasındaki fark bunlar. Tercih size kalmış ama ben bu şartlar altında CurrentDb.Execute komutunu tek geçerim...
Saygılarımı sunar iyi çalışmalar dilerim. Yeni bir konuda görüşmek üzere, kalın sağlıcakla
Not: Bu çalışma hazırlanırken yararlanılan kaynak.
Konu başlığından da anlaşılabileceği gibi bu konumuzda Docmd.RunSql ile CurrentDb.Execute arasındaki farkı inceleyeceğiz.
İlk olarak her iki komut için kısa bir bilgi verelim;
Docmd.RunSql komutu Access arayüzü (interface) ile çalışırken, CurrentDb.Execute komutu Database Engine kullanır. (CurrentDb.Execute komutu DAO komutudur. )
Şimdi de gelin iki komut arasındaki farkları (Aslında bu farkların sebebi CurrentDb.Execute komutunun Database Engine kullanmasından kaynaklanmaktadır. ) kısaca sıralayalım;
1)Docmd.RunSql komutu bir Access komutu olduğundan, otomatik olarak form rapor Vs. kontrollerini algılayabilmektedir. Bu sebepten bu komut içinde kontrolleri belirtebiliriz. Örneğin [Forms]![Form1]![MetinKutusu1] komutunu Docmd.RunSql içinde kullanabiliriz. Buna rağmen CurrentDb.Execute komutu içinde formlardaki kontrolleri kullanamayız. (Çünkü DAO form kontrollerini pek sallamıyor
) Bu işlem için VBA'da değişkenleri kullanabiliriz. Örneğin formda hesaplanan bir değer varsa bu değeri VBA'da bir değişken yardımı ile tutabiliriz. Ardından CurrentDb.Execute komutu içinde kullanabiliriz.2) Docmd.RunSql komutu size sürekli soru sorar. Eeee bu da canımızı sıkar. Yok efendim 2 kayıt ekliyorsunuz, yok efendim 32 kayıt güncelliyorsunuz. Tabii bu durumu engellemenin de bir yolu var. Aşağıdaki kodları kullanıyoruz:
Visual Basic
- DoCmd.SetWarnings False
- 'Docmd.RunSql komutundan önce yukarıdaki kod ile uyarıları iptal ediyoruz.
- Docmd.RunSql "" 'Buraya ilgili kodlar...
- 'Sonra da aşağıdaki kodlarla tekrar uyarıları aktif hale getiriyoruz.
- DoCmd.SetWarnings True
Şimdi gelelim CurrentDb.Execute komutuna. Bu komut bizi hiç rahatsız etmez. Arka planda kayıtlarını, güncellemelerini, kayıt silme işlemlerini sessiz sedasız gerçekleştirir. (Hiç soru sormaz, bazen diyorum bu komutun bir benzeri hayatta da olsa
)3) Karmaşık sorgularda CurrentDb.Execute komutu Docmd.RunSql komutuna göre çok daha hızlıdır. (Hadi abartmayalım
Hızlıdır diyelim ) 4) Eğer yüklenmekte olan bir formda CurrentDb.Execute komutu çalıştırılırsa ve aynı zamanda da bu formda kayıt işlemi gerçekleştirilmeye çalışılırsa Access bizi uyarabilir.. Der ki: Farklı bir kullanıcı kaydı değiştirdi. (Tam olarak böyle demese de buna benzer bir şeyler kesin der. Sorunludur bu Access
) Bilmez ki bizim Access'imiz, o işlemi yapan başka kullanıcı değil, canımız ciğerimiz ADO'muzdur. 
Evet arkadaşlar işte bu iki komut arasındaki fark bunlar. Tercih size kalmış ama ben bu şartlar altında CurrentDb.Execute komutunu tek geçerim...
Saygılarımı sunar iyi çalışmalar dilerim. Yeni bir konuda görüşmek üzere, kalın sağlıcakla

Not: Bu çalışma hazırlanırken yararlanılan kaynak.



