Access veritabanı sorgulamasında tarih hesapları

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,163
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Excel den Access veritabanına kayıtlı verileri sorgularken, kayıtlı olan tarihe kaç gün kaldığını hesaplatmak istiyorum.
Kod:
strSQL = "select tarih, saat, [B][COLOR="Red"]'" & Date & "' - tarih[/COLOR][/B], konu from memo_tbl"
Kırmızı ile işaretli kısımda yazdığım kod gün farkı vermiyor. Ortaya tuhaf bir tarih çıkarıyor. Bunun dışında, aynı klasör içinde kaldığı sürece kodlar düzgün çalışıyor.
Klasörü zipleyerek ekliyorum. Yardımlar için şimdiden teşekkürler.
 

Ekli dosyalar

mancubus

Destek Ekibi
Destek Ekibi
Katılım
6 Ocak 2010
Mesajlar
2,224
Excel Vers. ve Dili
İŞ: 2021 Win Eng
Kod:
SELECT DateDiff("d", Now, tarih)
şeklinde deneyin
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,389
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Kullanım aşağıdaki gibi olacak.

Kod:
strSQL = "select tarih, saat, [COLOR=Blue][B] tarih - [/B][/COLOR][COLOR=Blue][B][COLOR=Blue][B]date() [/B][/COLOR] as gun_farki[/B][/COLOR], konu from memo_tbl"
 

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,163
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Sayın mancubus ve Sayın Zeki Gürsoy,
İkinize de hızlı dönüş için çok teşekkür ediyorum.
Sayın mancubus,
Sizin yazığınız ifadeyi sql string ifadesi içine bir türlü uyarlayamadım. & " ' Sql string sorguları ile excel formüllerini iç içe yazarken " ', &, " " işaretlerini ustaca kullanabilmek lazım. Ben henüz bunu pek beceremiyorum. tarih farkı böyle bir ifade içinde nasıl kullanılabilir, çok uğraştım, işin içinden çıkamadım. Siz dosya üzerinde deneyip olumlu sonuç alırsanız, lütfen benimle de paylaşın, bilmek isterim.

Sayın Zeki Gürsoy,
yazdığınız "tarih - date()" ifadesi sql string ifadesi içinde hiç sorunsuz kabul gördü ve doğru sonuç verdi. Yeni bir şey öğrenmiş oldum. Sizi bulmuşken bir konuda daha fikrinizi sormak istiyorum: tarih değerlerini Access e gün/ay/yıl olarak gönderiyorum. Veritabanında da aynı şekilde duruyor. Buna rağmen sorgularken Listbox a ay/gün/yıl olarak geliyor. Bunun düzgün gelmesini nasıl sağlayabilirim?
 

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,163
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Sayın mancubus ve Sayın Zeki Gürsoy,
Sayın Zeki Gürsoy,
Sizi bulmuşken bir konuda daha fikrinizi sormak istiyorum: tarih değerlerini Access e gün/ay/yıl olarak gönderiyorum. Veritabanında da aynı şekilde duruyor. Buna rağmen sorgularken Listbox a ay/gün/yıl olarak geliyor. Bunun düzgün gelmesini nasıl sağlayabilirim?
Sayın Gürsoy sorduğum sorunun yanıtını galiba buldum. Merak eden insanlarla da paylaşmış olayım: Format(tarih, 'dd/mm/yyyy') şeklinde yazınca oldu.
Sizden ricam, rastgele farklı tarihler yazsam bile, sorgularken hatırlatmalar listbox üzerinde tarihe göre sıralanmış olarak gelsin. gününe daha çok olan tarihler en altta kalacak şekilde sıralı olarak görüntülenmesi mümkün müdür?. Önceden sonsuz teşekkürler.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,060
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Aşağıdaki kırmızı renkli kısmı ekleyin.

Kod:
strSQL = "select tarih, saat, [COLOR=Blue][B] tarih - [/B][/COLOR][COLOR=Blue][B][COLOR=Blue][B]date() [/B][/COLOR] as gun_farki[/B][/COLOR], konu from memo_tbl [COLOR=Red][B]order by gun_farki[/B][/COLOR]"
 

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,163
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Aşağıdaki kırmızı renkli kısmı ekleyin.

Kod:
strSQL = "select tarih, saat, [COLOR=Blue][B] tarih - [/B][/COLOR][COLOR=Blue][B][COLOR=Blue][B]date() [/B][/COLOR] as gun_farki[/B][/COLOR], konu from memo_tbl [COLOR=Red][B]order by gun_farki[/B][/COLOR]"
Sayın Leventm yardımınız ilaç gibi geldi. SQL sorguları için önerebileceğiniz bir kaynak var mı (web sayfası, pdf, gibi)? Sonsuz teşekkürler..
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,060
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Sayın Leventm yardımınız ilaç gibi geldi. SQL sorguları için önerebileceğiniz bir kaynak var mı (web sayfası, pdf, gibi)? Sonsuz teşekkürler..
Sn Antonio

Benim özellikle önerebileceğim bir kaynak yok. Bu konuların uzmanı Zeki beydir. Kendisi bir kaynak önerebilir. Ancak google ile bir arama yaparsanız istediğinizden fazla kaynak bulabilirsiniz. Ben genellikle böyle yapıyorum. İlave bir bilgi daha vereyim.

Eğer sıralamayı büyükten küçüğe doğru yapmak isterseniz:

order by gun_farki desc

Küçükten büyüğe doğru:

order by gun_farki asc

Not: Eğer asc veya desc olarak belirtmezseniz, işlem default olarak asc sıralamasına göre yapılacaktır.

Asc: Ascending
Desc : Descending
 

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,163
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Sn Antonio

Benim özellikle önerebileceğim bir kaynak yok. Bu konuların uzmanı Zeki beydir. Kendisi bir kaynak önerebilir.
Zeki bey zaten bu konudan haberdar dır. Umarım bu mesajı görür. Bu arada sorun çözüldü derken başka senaryolar ve beraberinde yeni sorunlar oluştu. Şöyle ki, ilk mesajıma eklediğim dosyaya iki textbox daha ekledim, altına da bir buton yerleştirdim. Textboxlardaki tarih aralığındaki bilgileri sorgulamasını istediğimde, aşağıda kırmızı ile işaretlediğim yerde "tür uyuşmazlığı" hatası veriyor. Ben yazdığım sorgulama kodlarını aşağıya yazıyorum. (Yardım için bir kelime ekleyen herkese önceden saygılarımla ve sonsuz teşekkürlerimle..)
Textbox4 = "22/01/2014"
Textbox5 = "26/01/2014"
Kod:
Private Sub CommandButton2_Click()
ListBox1.Clear
If TextBox4.Value = "" Or TextBox5.Value = "" Then
    MsgBox "Sorgu için tarihleri giriniz.", vbCritical, "Eksik bilgi"
    Exit Sub
End If
'On Error Resume Next
yol = ThisWorkbook.Path & "\memo_vtb.accdb"
Set conn = CreateObject("adodb.connection")
conn.Open "provider=microsoft.ace.oledb.12.0; data source='" & yol & "';"
strSQL = "select format(tarih, 'dd/mm/yyyy'), saat, tarih - date(), konu from memo_tbl where tarih >= '" & Format(TextBox4.Value, "dd/mm/yyyy") & "' and tarih <= '" & Format(TextBox5.Value, "dd/mm/yyyy") & "' order by tarih"
[COLOR="Red"][B]Set rs = conn.Execute(strSQL)[/B][/COLOR]
ListBox1.RowSource = Empty
ListBox1.Column = rs.getrows
Set rs = Nothing
Set conn = Nothing
End Sub
 

Murat OSMA

Altın Üye
Altın Üye
Katılım
23 Mayıs 2011
Mesajlar
5,508
Excel Vers. ve Dili
Microsoft 365 TR-EN
Altın Üyelik Bitiş Tarihi
31-12-2028
TextBox formatlarındaki tek tırnak işaretlerini kaldırıp bir deneyin.
 

mancubus

Destek Ekibi
Destek Ekibi
Katılım
6 Ocak 2010
Mesajlar
2,224
Excel Vers. ve Dili
İŞ: 2021 Win Eng
hızlı dönüş için çok teşekkür ediyorum.

Sizin yazığınız ifadeyi sql string ifadesi içine bir türlü uyarlayamadım.
rica ederim.

bir çok mesaj atılmış.

ben ilk mesajım tam olsun diye, o mesajda da olduğu gibi, sadece ilgili bölümü ekleyeyim.

Kod:
DateDiff(""d"", tarih, Now)
çift tırnak içeren bir ibareyi çift tırnaklı bir başka ibarenin (değişken vs) içine alırken, kullanırken tırnak sayısını 1 artırıyoruz. dolayısı ile "d" önde ve sonda birer çift tırnak içeriyor. bunları ikişer çift tırnak yapıyoruz.






_______________

Datediff fonksiyonu için detay:

2 tarih verisi arasındaki zaman farkını belirtilen zaman birimi yönünden hesaplar. d gün farkı, m ay farkı, y yıl farkı içindir.

vba içinde yalın olarak kullansa idik:
örnek olarak yıl sonundan bugüne kadar kaç gün geçtiğini mesaj kutusuna yazdıralım.
Kod:
MsgBox DateDiff("d", #12/31/2013#, Now)
yazacaktık.

fakat bunu sorgu olarak belirlediğimiz değişkenin içinde kullanmak için çift tırnakları birer adet artırıyoruz:
Kod:
MsgBox "SELECT DateDiff(""d"", tarih, Now) FROM memo_tbl"
tam olarak icra edilecek sorgu metnini verir.


tabii burada DateDiff foksiyonu örnek.
 
Son düzenleme:

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,060
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
İlgili satırı aşağıdaki ile değiştirerek deneyin.

Kod:
strSQL = "select format(tarih, 'dd/mm/yyyy'), saat, tarih - date(), konu from memo_tbl where tarih >=cdate('" & TextBox4 & "') and tarih <=cdate('" & TextBox5 & "') order by tarih"
 

Murat OSMA

Altın Üye
Altın Üye
Katılım
23 Mayıs 2011
Mesajlar
5,508
Excel Vers. ve Dili
Microsoft 365 TR-EN
Altın Üyelik Bitiş Tarihi
31-12-2028
Alternatif olarak denenebilir;

Kod:
strSQL = "select format(tarih, 'dd/mm/yyyy'), saat, tarih - date(), konu from memo_tbl"
strSQL = strSQL & " where clng(cdate(tarih)) >= clng(cdate(TextBox4.Value)) and"
strSQL = strSQL & " clng(cdate(tarih)) <= clng(cdate(TextBox5.Value)) order by tarih"
 

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,163
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Sayın mancubus, cevapsız bırakmadığınız için teşekkürler. Verdiğiniz bilgi benim için çok önemlidir. Ayrıca yazdığınız kodlara ilişkin açıklama yapmanız takdire değerdir. Çok sağolun.

Sayın Leventm, yazdığınız satırı aynen yapıştırdım ve sorun ortadan kalktı. Hangi tarihleri yazsam, o tarihler aralığında ki verileri bulup getiriyor. Evde dikkatlice nerede hata yapmış olduğumu inceleyip, bulmaya çalışacağım. Ne kadar teşekkür etsem azdır.

Sayın OSMA, Levent Beyin kodlarının çalıştığını görünce artık ona odaklanıp bıraktım. Zaten yaptığınız SQL sorgusunun uzunluğu ve tanım ifadeleri şu an ki seviyemi aşıyor. İlgilendiğiniz için çok teşekkür ederim. Hakkınızı helal edin.

Bu konu ile ilgili olarak sadece saat in yazıldığı textboxta ki saat ve dakika denetimi kafamı karıştırıyor. Ama bu ayrı bir konu olduğundan, hemen bu akşam bunu ayrı bir konu başlığı altında soracağım. İlgilenirseniz minnettar kalırım.
Saygılarımla.
 

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,163
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Problem çözülmüş görünüyor. :eek:k::
Zeki Hocam kulaklarınızı epey çınlattık. SQL Sorgulamalarında kabul gören fonksiyonlar ile tek ve çift tırnak kullanım adabını örnekleyen bir kaynak sizde ya da web de varsa, ben ve bu konu ile ilgilenen tüm arkadaşların yararlanmasını sağlamış olursunuz. Zaten mesajlardan da bu konuda eksikliklerim olduğu anlaşılmıştır.
Kısa bir süre öncesine kadar Access in varlığı yokluğu umurumda bile değildi. Varsa yoksa Excel sayfası, ve Excel Sayfasına göre yazılmış makrolar.. Tabi satır sayısı 1.000 i aşınca, aramalarda her dokunuşta yuvarlağın dönmesini seyreder dururdum. Özellikle Change olayı ile iki karakter yazmak bile sorundu. Donar dururdu. Tam bu noktada ADO ve dolayısıyla Access ister istemez keşfedilmeyi bekliyor. Kaynak önerileriniz için önceden teşekkürler ve saygılarımla.
 

Murat OSMA

Altın Üye
Altın Üye
Katılım
23 Mayıs 2011
Mesajlar
5,508
Excel Vers. ve Dili
Microsoft 365 TR-EN
Altın Üyelik Bitiş Tarihi
31-12-2028
Sayın OSMA, Levent Beyin kodlarının çalıştığını görünce artık ona odaklanıp bıraktım. Zaten yaptığınız SQL sorgusunun uzunluğu ve tanım ifadeleri şu an ki seviyemi aşıyor. İlgilendiğiniz için çok teşekkür ederim. Hakkınızı helal edin.
Sn. antonio, önerdiğim kodları da denemenizi isterdim. Çözüm olursa farklı bir yol daha öğrenmiş olurdunuz. ;)

Kodun uzunluğu konusunda; eğer Levent Bey'in önerdiği kodu da 3 satır hâline getirdiğinizde aşağı/yukarı aynı uzunlukta olduğunu göreceksiniz.

Tanım ifadeleri konusunda da; CLng(Cdate(tarih)) ifadesi, tarihi sayıya dönüştürür.. Zannediyorum Excel Dershanesi başlığında, Değişken tipi değiştirme ile ilgili bir konu olması gerek. O konu size yeni bilgiler kazandırabilir.


İyi çalışmalar.
 

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,163
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Sn. antonio, önerdiğim kodları da denemenizi isterdim. Çözüm olursa farklı bir yol daha öğrenmiş olurdunuz. ;)

Kodun uzunluğu konusunda; eğer Levent Bey'in önerdiği kodu da 3 satır hâline getirdiğinizde aşağı/yukarı aynı uzunlukta olduğunu göreceksiniz.

Tanım ifadeleri konusunda da; CLng(Cdate(tarih)) ifadesi, tarihi sayıya dönüştürür.. Zannediyorum Excel Dershanesi başlığında, Değişken tipi değiştirme ile ilgili bir konu olması gerek. O konu size yeni bilgiler kazandırabilir.
İyi çalışmalar.
Sayın OSMA,
Yazdığınız kodların tarihi sayıya dönüştürme metodu ile sorgulama yaptığını bilmiyordum. Bunu hatırlattığınız için için çok teşekkür ederim. İşten çıkar çıkmaz evde sakin bir şekilde buna odaklanacağım. Tekrar teşekkürler..

Sayın Gürsoy, size ve Zafer Bey e SQL Kitaplığı kaynağı için çok teşekkür ederim. Bir kelime bile katkı sunan her kese derin saygılarımı sunuyorum.
 

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,163
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Sayın OSMA,
SQL sorgusu için verdiğiniz kodları denedim ama maalesef çalıştıramadım. "ifadede, tanımlanmamış clng işlevi" hatası veriyor. Tek-çift tırnaklarda bir hata mı yaptım, bilemiyorum.
 
Üst