Update ile bugunün tarihini tüm kayıtlara işleme

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Update ile bugunün tarihini tüm kayıtlara işleme

Mesaj gönderen baloglurecep »

Arkadaşlar selam ve saygılar diliyorum. bazen bu firebird ya beni zorluyor yada ben gözümdeki gözlüğü göremiyorum. Bir tablom var. sonradan bu tabloya bir kaç alan ekledim. 2 si tarih tipinde. alanın birisinde sürekli bir tarih oluyor değişken. ancak diğer tarih alanı o tablo çağrıldığı zaman o günün tarihi ile dolması gerek..kaç kayıt varsa tümüne o günün tarihini işleyecek.basit bir update işlemi. ancak ne etiim yaptım ise updateti kabul etmiyor.

UPDATE bakiyler SET bakiyeler.bugun='+QuotedStr(DateToStr(date))+'

date yerine datetime picker bileşini koydum ondaki bilgiyi attımm yine olmadı. nerde hata yapıyor olablirim?
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: Update ile bugunün tarihini tüm kayıtlara işleme

Mesaj gönderen orhancc »

Tarih alanına string kayıt etmeye çalışıyorsun ondan olabilir mi :)
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Re: Update ile bugunün tarihini tüm kayıtlara işleme

Mesaj gönderen baloglurecep »

düz de denedim.

UPDATE bakiyler SET bakiyeler.bugun=date
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: Update ile bugunün tarihini tüm kayıtlara işleme

Mesaj gönderen orhancc »

date değişkenini tipi nedir ve içine ne aktarıyorsun ? sen bunu managerde mi deniyorsun yoksa delphi içinden mi ?
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Re: Update ile bugunün tarihini tüm kayıtlara işleme

Mesaj gönderen baloglurecep »

date değişkeni tarih tipinde içine bugünün tarihini aktarıyorum
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: Update ile bugunün tarihini tüm kayıtlara işleme

Mesaj gönderen orhancc »

aldığın hata nedir ?
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Update ile bugunün tarihini tüm kayıtlara işleme

Mesaj gönderen unicorn64 »

sorguda parametre kullanırsanız bu tarz sıkıntılardan kurtulmuş olursunuz,
yoksa özellikle tarih ve virgüllü sayılarda hata riski yüksek...

alternatif olarak madem o anki tarihi set edeceksiniz, bugun alanınızın tipine göre

Kod: Tümünü seç

UPDATE bakiyler SET bakiyeler.bugun=CURRENT_DATE


yada

Kod: Tümünü seç

UPDATE bakiyler SET bakiyeler.bugun=CURRENT_TIMESTAMP
şeklinde işi firebirde yaptırabilirsiniz
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
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Re: Update ile bugunün tarihini tüm kayıtlara işleme

Mesaj gönderen baloglurecep »

Unicorn hocama teşekkür ediyorum. currendate aklıma hiç gelmedi desem yalan olmaz. aslında firebird fonksiyonları iyice öğrenmek gerek. yalnız delphiden gönderdiğim değişiklik uygulanmıyor yani veri tabanına yazmıyor ancak transactionu commit edersem yapıyor. bu defa tüm veri tabanı kapanıyor. bunu nasıl çöze bilirim. yapmak istedğim çok basit aslında bugünün tarihinden veri tabnındaki diğer tarihi çıkarmak ve integer sayı döndürmek.


DM.BAKIYELER.Close;
DM.BAKIYELER.SelectSQL.Text:='UPDATE BAKIYELER SET BAKIYELER.BUGUN=CURRENT_DATE';
DM.BAKIYELER.Open;
DM.BAKIYELER.ApplyUpdates;
//DM.BAKIYELER.Transaction.Commit // bunuda kullandım olmadı veri tabanı kapandı. lazım olan queryleri tekrar çalıştırmak lazım geldi. applyupdate ilede değişikliği işlemiyor veri tabanıa.
DM.BAKIYELER.Close;
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Update ile bugunün tarihini tüm kayıtlara işleme

Mesaj gönderen unicorn64 »

genelde şu şekilde kullanıyorum

Kod: Tümünü seç

with query,sql,transaction do
begin
   close;
   clear;
   add('UPDATE BAKIYELER SET BAKIYELER.BUGUN=CURRENT_DATE');

   try
     starttransaction;
     executequery;
     committransaction;
   except 
      on exc:exception do
      begin
         rollbackretaining;
         showmessage('Hata oluştu.'+exc.message);
      end;
   end;
end;


commitlemeden veritabanı tarafına yansımaz, ayrıca query için neden open kullandın ki... hele bir de update yaparken...
query yi commitlemek veritabanı bağlantısını kapatmaz normalde, ekstra yazdığın bi kod tetikliyor olmalı...
ve ilk mesajınla son mesajın birbiriyle alakasız sanki...
yapmak istedğim çok basit aslında bugünün tarihinden veri tabnındaki diğer tarihi çıkarmak ve integer sayı döndürmek.
bunu update le yapmaya çalışmıyorsundur umarım :shock:

bugünün tarihini tutan alanı da sırf bu sebep için eklememişsindir dimi?

şuna bir göz at istersen

Kod: Tümünü seç

select datediff (day, date '2010-01-01', current_date)   from rdb$database
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
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Re: Update ile bugunün tarihini tüm kayıtlara işleme

Mesaj gönderen baloglurecep »

Selam ve saygılar unicorn hocam... çok teşeşekkür ederim.bilgileriniz için. firebirdin fonksiyonlarını kullanmayı yeni yeni öğreniyorum. delphiden gönderdiğim komutlarda eski veri tabanı alışkanlıklarım yüzünden sıkıntı çıkarıyor. ama firibirdin çalışması tepkileri mükemmel. ilk kodunuzla işi çözdüm. yalnız balık tutmasını öğrenmek için

select datediff (day, date '2010-01-01', current_date) from rdb$database

bu kodun açılımı yapmanız mümkün mü eğer saygısızlık olarak algılamazsanız. benim veri tabanımda 2 tarih alanı var. son_tarih alanında müşterinin yapmış olduğu en son ödemenin tarihi var. 1000 lerce müşteride bu alan farklı tarihler içerir. kullanıcı müşteri bakiyelerini çağırınca bugün tarihine o günün tarhi atılacak, sonra son ödeme tarihi ile arasındaki fark bulunup kullanıcıya müşterilerinin en son yaptğı ödeme gününden bugüne kadar geçen zamanı ( kaç gündür ödeme yapmadığını ) gösterecek. normalde ödeme yapmayanlar diye bir formum var. yalnız bazı müşterilerim bu bilgilerin bu kısımda yer almasının doğru olacağını söyledikleri için böyle bir çalışma yapacam.

select datediff (day, date '2010-01-01', current_date) from rdb$database

yukardaki kodu delphiden nasıl kullanabilirim. benim veri tabanına nasıl uyarlayabilirim. saygılarımı sunarım.
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Update ile bugunün tarihini tüm kayıtlara işleme

Mesaj gönderen unicorn64 »

estağfirullah yardımcı olabiliyorsam ne mutlu bana... ben de firebirdde yeni sayılırım ve ben de sizin gibi firebird fonksiyonlarını ezbere bilmem, ihtiyacım olduğunda gugıl amcaya sorarım sağolsun yardımcı olur.

datediff delphideki daysbetween,monthsbetween,yearsbetween tarzı bir fonksiyon, yani verilen tarihler arası istenilen türe göre fark çıkarıyor...

Kod: Tümünü seç

select datediff (day, date '2010-01-01', current_date) from rdb$database
dedimizde 01.01.2010 tarihinden bugüne kadar geçen gün sayısını sorgulamış oluyoruz... ibexpertte sorgulayıp görebilirsiniz...

dediğim gibi bu işlem için tabloda sorgulama tarihini yani bugünü tutmana gerek yok, ayrıca bir raporlamada kullanıyorsan o başka tabi...

Kod: Tümünü seç

SELECT COALESCE( datediff(day,son_tarih,CURRENT_DATE) ,-1) FARK FROM BAKIYELER
tarzında br sorgu işini görür sanırım...
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