SQL Server, Tarih Alanı ve sorgulama sorunu (ÇÖZÜLDÜ)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
codeis7
Üye
Mesajlar: 12
Kayıt: 30 Kas 2010 12:41
Konum: istanbul

SQL Server, Tarih Alanı ve sorgulama sorunu (ÇÖZÜLDÜ)

Mesaj gönderen codeis7 »

Merhabalar..
Yaklaşık 3 gündür tüm neti ve siteyi araştırdım. Ama inanın ya doğru cevabı bulamadım. Yada ben bulsamda anlamadım.
Tekrar buraya sormak istiyorum.
Database SQL Server
Delphi 7 kullanıyorum. Sadece 2 tarih arası alanı sorgulamak istiyorum. DateTimePicker ile de denedim, edit ile de denedim en son suieditmask ile gönderiyorum.
SQL Serverdaki tabloada alanım date time olarak ayarlı. Formatı en son gg/aa/yyyy olarak ayarladım windowsda. 23/11/2010 00:00:00 diyede bilgilerim içeride var.
ADO Query kullanıyorum. TArih1 ve Tarih2 diye de 2 tane parametrem var. PArametrelerimde datetime olarak ayarlı.

Hata şu şekilde..
isteğe bağlı özellik uygulanamadı

Kod şu şekilde..

Kod: Tümünü seç

procedure TfrmAna.suiButton6Click(Sender: TObject);
var
tarih1,tarih2: string;
begin
tarih1:= tr1.Text;
tarih2:= tr2.Text;
  qGorev.Close;
  qGorev.Sql.Clear;
  qGorev.Sql.Add('Select * From a.dbo.gorev Where Durum = 1 AND Alici = :puser ');
  qGorev.Sql.Add('and tarih between :tarih1 and :tarih2');
  qGorev.Parameters.ParamByName('puser').Value := user;
  qGorev.Parameters.ParamByName('tarih1').Value := StrToDate(tarih1);
  qGorev.Parameters.ParamByName('tarih2').Value := StrToDate(tarih2);
  qGorev.Open;

end;



Şimdiden teşekkür ederim yorumlarınız için..
En son codeis7 tarafından 02 Ara 2010 02:51 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: SQL Server, Tarih Alanı ve sorgulama sorunu

Mesaj gönderen conari »

datetimepicker kullan ve

Kod: Tümünü seç

qGorev.Parameters.ParamByName('tarih1').Value := datetimepicker1.date;
qGorev.Parameters.ParamByName('tarih2').Value := datetimepicker2.date;
sorun yok.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
codeis7
Üye
Mesajlar: 12
Kayıt: 30 Kas 2010 12:41
Konum: istanbul

Re: SQL Server, Tarih Alanı ve sorgulama sorunu

Mesaj gönderen codeis7 »

yani banada öyle geldi ama hata aşağıdaki resimde


Resim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: SQL Server, Tarih Alanı ve sorgulama sorunu

Mesaj gönderen conari »

parametreleri silip tekrar tanıtmayı dene.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
codeis7
Üye
Mesajlar: 12
Kayıt: 30 Kas 2010 12:41
Konum: istanbul

Re: SQL Server, Tarih Alanı ve sorgulama sorunu

Mesaj gönderen codeis7 »

denendi olumsuz.
codeis7
Üye
Mesajlar: 12
Kayıt: 30 Kas 2010 12:41
Konum: istanbul

Re: SQL Server, Tarih Alanı ve sorgulama sorunu

Mesaj gönderen codeis7 »

Kod: Tümünü seç

qGorev1.Close;
qGorev1.SQL.Clear;
qGorev1.SQL.Add('SELECT * FROM a.dbo.gorev where tarih between '+#39+FormatDateTime('mm-dd-yyyy',DT1.Date)+#39' and '+#39+FormatDateTime('mm-dd-yyyy',DT2.Date)+#39'');
qGorev1.Open;
parametresiz bu şekilde yapıldı. datetime pickerların 1. si ve 2.si db deki tarihin 1 öncesi ve bir sonrası olursa sorgulama başarılı oluyor. Ama gün sayısı fazlalaşınca aşağıdaki hatayı veriyor.

the conversion of a char data type to a datetime type resulted in an out-of-range dateime value



Az kaldı kafaı çizmeye..
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: SQL Server, Tarih Alanı ve sorgulama sorunu

Mesaj gönderen aslangeri »

s.a.
parametrelerin tipini ayarlayıp öyle deneyin.

Kod: Tümünü seç

parambyname('xxx').datatype=ft...
birde profilerdan bakın bakalım çalıştırmaya çalıştığı sql kodu nedir.
kodu alıp management studio dan çalıştırmayı deneyin.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
cmkare
Üye
Mesajlar: 177
Kayıt: 23 Ağu 2010 11:29

Re: SQL Server, Tarih Alanı ve sorgulama sorunu

Mesaj gönderen cmkare »

Veri tabanındaki alanları tipi ne? varchar falansa işlemez.

date/time ise şunu dene..

qry3.Close;
qry3.SQL.Text:='SELECT * FROM Tablo Adı WHERE tarih >= '''+datetostr(Datetimepicker1.Date)+''' and tarih <= '''+datetostr(Datetimepicker2.Date)+'''' ;
qry3.OPEN;
codeis7
Üye
Mesajlar: 12
Kayıt: 30 Kas 2010 12:41
Konum: istanbul

Re: SQL Server, Tarih Alanı ve sorgulama sorunu

Mesaj gönderen codeis7 »

son durum şudur..

Kod: Tümünü seç

qGorev1.Close;
qGorev1.SQL.Clear;
qGorev1.SQL.Add('SELECT * FROM a.dbo.gorev where tarih between '+#39+FormatDateTime('mm-dd-yyyy',DT1.Date)+#39' and '+#39+FormatDateTime('mm-dd-yyyy',DT2.Date)+#39'');
qGorev1.Open;
eğer girilen tarihler arasında kayıt varsa sorun yok. Herşey çalışıyor. Eğer o tarihler arasında kayıt yok hata veriyor..

Örnek 3 kayı var db de. 10.11.2010 11.11.2010 ve 12.10.2010 diye 3 kayıt var. 10.11.2010 ve 12.10.2010 arası seçildiğinde doğru çalışan sorgui 10.11.2010 ve 13.10.2010 arası çalıştırıldığında hata veriyor.

the conversion of a char data type to a datetime type resulted in an out-of-range dateime value
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: SQL Server, Tarih Alanı ve sorgulama sorunu

Mesaj gönderen unicorn64 »

sorun tarih formatıyla alakalı
13.10.2010 değerini 2010 yılı 13. ayın 10u gibi görüyor ve karakterden tarihe çevirirken hata oluştu, değer aralık dışında diyor...

Kod: Tümünü seç

qGorev.Parameters.ParamByName('tarih1').asdatetime:= datetimepicker1.date;
qGorev.Parameters.ParamByName('tarih2').asdatetime:= datetimepicker2.date;
şeklinde denediniz mi?
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
codeis7
Üye
Mesajlar: 12
Kayıt: 30 Kas 2010 12:41
Konum: istanbul

Re: SQL Server, Tarih Alanı ve sorgulama sorunu(ÇÖZÜLDÜ)

Mesaj gönderen codeis7 »

ileride takılanlar için ihtiyaç olur diye çözümü yazıyorum.

ADO Query ile SQL Server iki tarih arası filtreleme..

query1.Close;
query1.SQL.Clear;
query1.SQL.Add('set dateformat dmy');
query1.SQL.Add('SELECT * FROM a.dbo.gorev where durum=1 and ');
query1.SQL.Add('tarih between '''+FormatDateTime('dd.mm.yyyy',DateTimePicker1.Date)+''' and '''+FormatDateTime('dd.mm.yyyy',DateTimePicker2.Date)+'''');
query1.Parameters.ParamByName('pdurum').Value := durum;

saygılar..
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: SQL Server, Tarih Alanı ve sorgulama sorunu (ÇÖZÜLDÜ)

Mesaj gönderen unicorn64 »

bilgisayarın tarih formatını değiştirdiğinizde bu yaptığınızın çözüm olmadığını göreceksiniz...

Kod: Tümünü seç

dd.mm.yyyy
yerine

Kod: Tümünü seç

yyyy-mm-dd
şeklinde kullanmanızı öneririm...
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
codeis7
Üye
Mesajlar: 12
Kayıt: 30 Kas 2010 12:41
Konum: istanbul

Re: SQL Server, Tarih Alanı ve sorgulama sorunu (ÇÖZÜLDÜ)

Mesaj gönderen codeis7 »

Çok fazla anlamadığımdan söyle anlatim.

Serverda : Server 2003
SQL Server 2005.

Kendi makinamda SQL 2008 Management var
Bende Win 7 kullanıyorum.

makinamda tarih dd/mm/yyyy ayarlı.
Serverın tarihi dd/mm/yyyy ayarlı.

SQL Server, db 'ye mm/dd/yyyy kayıt ediyor.

Kodda demin gönderdiğim gibi..
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: SQL Server, Tarih Alanı ve sorgulama sorunu (ÇÖZÜLDÜ)

Mesaj gönderen unicorn64 »

pardon

Kod: Tümünü seç

set dateformat dmy
bunu farketmemişim... doğrudur çalışır :D
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Cevapla