Görüntülenme: 19253
SQL Filtreleme
2007/05/22 2:28
Bildir! Alıntı ile cevap yaz Oyla! 7,5 (1 oy)

Veri tabanında, tarih biçimli alanları içeren sorgulamalarda, dikkat edilmesi gereken sevimsiz bir nokta var. Mesela,
"gg/aa/yyyy"
formatında değer girerseniz hata alabilirsiniz. Çünkü kabul edilen format,
"aa/gg/yyyy"
biçimindedir.

Burada, g: gün; a: ay; y: yıl değerlerini temsil etmektedir.

Örneklemek gerekirse, aşağıdaki kullanım doğru bir kullanımdır.

Dim strTarih As String = Now.Month & "/" & Now.Day & "/" & Now.Year
AccessDataSource1.FilterExpression = "DateRecord >= #" & strTarih & "#"

Öte taraftan,

AccessDataSource1.FilterExpression="DateRecord>=#" & Now.Date & "#"

ifadesi,

"String was not recognized as a valid DateTime." hatasına neden olabilir.

Olabilir, diyorum; çünkü kesin değil. Yani gün 12'den küçük ise, bir sorun oluşmamaktadır. Ancak bu durumda, istenilen sonuçların alındığını garanti etmek zor!

İngilizce kelime ezberleme oyunu: vav.mbirgin.com

Merhaba arkadaşlar,
Bir Access (mdb) veritabanının sadece yapısını yeni bir veritabanı olarak nasıl kaydedebiliriz?
Bir diğer ifadeyle, veritabanını, veriler olmadan nasıl kaydedebiliriz?

Teşekkürler...


Yukarıda ifade ettiğimi başarabilme amacıyla Microsoft Access programını kurcaladım, yardım dokümantasyonlarına baktım... Sonra da, sorunumu bir forumda sordum...

İnternette araştırmaya devam ettim... Ve çözümü buldum.
Boşuna dememişler, azmin elinden bir şey kurtulmaz, diye... Gerçi biraz pahalıya mal oldu.

Ve Çözüm... 

  • Yeni bir veritabanı oluşturulur...
  • Dosya > Dış Veri Al > Al
  • İlgili veritabanı seçilir.
  • Nesneleri Al iletişim kutusundan istenen tablo, sorgu... vb. seçilir
  • Seçenekler düğmesine tıklanarak, "Tablo Al" çerçevesinden "Sadece Tanım" işaretlenir.
  • Ve Tamam düğmesine basılır.

Not: Microsoft Access 2003 'e göre anlatılmıştır.

Öğrendikten sonra basit geliyor...  

İngilizce kelime ezberleme oyunu: vav.mbirgin.com

Access veritabanında SQL sorgularda, dönen kayıtlara otomatik bir numara atanması işlemi için bir komut yoktur. Ve bu özelliğe çoğu kez ihtiyaç duyulur.

Mesela, aylar önce de bu işleve ihtiyaç duymuştum; ancak hayli araştırmama rağmen, tam istediğim şeyi bulamamıştım. Yine de farklı yollarla işimi görmüştüm.

Ve bugün yine böyle bir fonksiyona gereksinim duydum. Ve araştırmaya başladım...
Saatler sonra tam olmasa da, olumlu anlamda bazı sonuçlar elde edebilmiştim.

Örnekleyerek ilerleyeyim.
Aşağıdaki kullanımda, tblUser tablosundan FirstName ve LastName alanları alınıyor. (Tablomuzda 4 adet kayıt olduğunu düşünelim)

SELECT FirstName, LastName FROM tblUser;

Sonuç aşağıdaki gibi olacaktır.

FirstName   LastName
Mustafa Birgin
Mürsel Işık
Mehmet Can
Nisan Kumru

Şimdi, ayrı bir sütun olarak, kayıt sıra numarasını da sonuç tablosuna ekleyelim.

SELECT FirstName, LastName, (SELECT Count(LastName)+1 FROM tblUser AS Tablo1 WHERE Tablo1.ID < Tablo2.ID) AS RowNumber FROM tblUser AS Tablo2;

FirstName   LastName RowNumber 
Mustafa Birgin  1
Mürsel Işık  2
Mehmet Can  3
Nisan Kumru  4

İşi bir adım daha öteleyelim ve belli bir aralıktaki kayıtları döndürmek isteyelim. 
Mesela, yüzlerce kaydı bir GridView nesnesinde, sayfalama kullanırken görüntülerken; tüm kullanıcıları her defasında çekmek yerine, sadece istenenen sayfadaki kayıtları çekmek daha uygun olacaktır. 
Diyelim ki, tablomuzda 2210 kayıt olsun ve GridView kontrolünde her sayfada 100 kayıt listeleniyor olsun. Bu durumda 23 sayfa numaramız olacaktır.
Sözgelimi 8. sayfayı görüntülemek istiyorsak aşağıdaki kullanıma başvurabiliriz.

SELECT * FROM (SELECT (SELECT Count(LastName)+1 FROM tblUser AS Tablo1 WHERE Tablo1.ID < Tablo2.ID) As RowNumber, FirstName, LastName FROM tblUser AS Tablo2)
WHERE RowNumber>700 AND RowNumber<801 ORDER BY RowNumber

Bulduğum yukarıdaki kullanımda, dönen sonuçlara numara atanmıyor ama, kayıtların tablodaki sıra numaraları dönüyor.

Tabloda otomatik artan bir ID alanı oluşturulursa, zaten aynı işi görür, diye düşünülebilir. Ancak ilgili tabloda bazı kayıtlar silindiğinde, ID alanında aralarda bazı değerler atlanmış olur. Bu nedenle yukarıdaki yönteme başvurulabilir.

Yine de, dönen sonuçlara da numara verilipp o numaralara göre işlem yapılabilseydi çok daha güzel olurdu.

Yararlı olması dileğiyle...

Not: Buradaki denemeler Access 2003 bir veritabanı üzerinde yapılmıştır.

Yaralanılan Kaynak:
http://groups.google.com/group/comp.databases.ms-access/browse_frm/thread/db227be5c3a2d2bb/cdb73e9bfb888698

İngilizce kelime ezberleme oyunu: vav.mbirgin.com
Abonelik Bilgisi Abonelik
Kullanıcı Adı:
Parola:
Bilgi Hatırlatma Yeni Üyelik
İletişim | Kullanım Şartları | Reklam Bilgileri | Tüm Üyeler | Ne Nasıl Yapılır? | Arama | RSS | Twitter | Facebook | Youtube

Son Üyeler: Gakk, busbus, siyamiaytar, 1234123123123, Siyami,
Son Oturumlar: