adoquery tarih convert hatası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
emrekilinc1984
Üye
Mesajlar: 58
Kayıt: 15 Eyl 2016 12:13

adoquery tarih convert hatası

Mesaj gönderen emrekilinc1984 »

merhaba arkadaşlar aşağıda işaretlemiş olduğum tarih sorgusunda sql den hata dönüyor bana yardımcı olursanız sevinirim.

(Conversion of a varchar data type to a datetime data type resulted in an out-of-range value in SQL query) bu hatayı veriyor sorguyu çalıştırdığımda.

Kod: Tümünü seç

var tar1 : String;
begin
tar1:=datetostr(terDateA.Date);

   with module.adoStokRapor do
   begin

    Close;
      SQL.Clear;
        SQL.Add ('select * from IVR_SIPARIS where siparis_no like '+#39+siparisNo.text+#37+#39);
          SQL.Add (' and sezon like '+#39+sezon.text+#37+#39);
            SQL.Add (' and kumas_icerik like '+#39+kumasicerik.text+#37+#39);
             SQL.Add (' and model_tanim like '+#39+modelTanim.text+#37+#39);
              SQL.Add (' and adet like '+#39+adet.text+#37+#39);
              // SQL.Add (' and termin_tarihi =');
               // SQL.Add(''''+tar1+'''');
                 Open;
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: adoquery tarih convert hatası

Mesaj gönderen sabanakman »

Connection nesnesinin AfterConnect olayında ya da bu tür sorgulardan önce tarih biçimini "set dateformat dmy" komutu ile gün.ay.yıl yaparak çalışırsanız hata düzelecektir. Tabi 30 Şubat, 31 Eylül, 32 Ekim, 13. ay gibi değer girişler yapılmaya çalışılırsa yine aynı hata gelecektir.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: adoquery tarih convert hatası

Mesaj gönderen xxxjedixxx »

Şu şekilde de kullanabilirsin.

Kod: Tümünü seç

  with module.adoStokRapor do
  begin
//  Close;  // buna gerek yok, zaten SQL.Text değiştiğinde zaten kapanır
//  SQL.Clear; // Aşağıdaki gibi Add kullanmadan Text'e direkt atayabilirsin.

    SQL.Text := 'select * from IVR_SIPARIS where siparis_no like ''' + SiparisNo.text + '%'' ' +
                'and sezon like ''' + Sezon.text + '%'' ' +
                'and kumas_icerik like ''' + Kumasicerik.text + '%'' ' +
                'and model_tanim like ''' + ModelTanim.text + '%'' ' +
                'and adet like ''' + Adet.text + '%'' ' +
                'and termin_tarihi = :pTermin';
    Parameters.ParamByName('pTermin').Value := terDateA.Date;
    Open;
    ....
emrekilinc1984
Üye
Mesajlar: 58
Kayıt: 15 Eyl 2016 12:13

Re: adoquery tarih convert hatası

Mesaj gönderen emrekilinc1984 »

Merhaba Verdiğiniz kod çalışmıyor sql den izlediğimde gelen sorgu aşağıdaki şekilde sanırım tarihi alanını hiç yollamamış program verdiğiniz kodla yardımcı olursanız sevinirim.


Kod: Tümünü seç

select sum(adet) as toplam from IVR_SIPARIS where kesim_onayla=0 and siparis_no like '609%'
 and sezon like '%'
 and kumas_icerik like '%'
 and model_tanim like '%'
 and adet like '%'
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: adoquery tarih convert hatası

Mesaj gönderen xxxjedixxx »

Merhaba,

Tüm kriterleri doldurup denediniz mi? Tarihin SQL trace'de görünmemesi çok enteresan.

Ayrıca kurduğunuz mantık ile ilgili bir hata var görünüyor. Sınırlamak istemediğiniz kriterler boş olsa bile daima sorguda geçiyor. Şu şekilde yapmanız daha doğru olacaktır.

Kod: Tümünü seç

    SQL.Text := 'select * from IVR_SIPARIS where siparis_no like ''' + SiparisNo.text + '%''';
    if Trim(Sezon.text) <> '' then
      SQL.Text := SQL.Text +  ' and sezon like ''' + Sezon.text + '%''';
    if Trim(Kumasicerik.text) <> '' then
      SQL.Text := SQL.Text +  ' and kumas_icerik like ''' + Kumasicerik.text + '%''';
    if Trim(ModelTanim.text ) <> '' then
      SQL.Text := SQL.Text +  ' and model_tanim like ''' + ModelTanim.text + '%''';
    if Trim(Adet.text ) <> '' then
      SQL.Text := SQL.Text +  ' and adet like ''' + Adet.text + '%''';

    SQL.Text := SQL.Text + ' and termin_tarihi=:pTermin';
    Parameters.ParamByName('pTermin').Value := terDateA.Date;
    Open;
Cevapla