Update ile bugunün tarihini tüm kayıtlara işleme
-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
Update ile bugunün tarihini tüm kayıtlara işleme
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?
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?
Re: Update ile bugunün tarihini tüm kayıtlara işleme
Tarih alanına string kayıt etmeye çalışıyorsun ondan olabilir mi 

-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
Re: Update ile bugunün tarihini tüm kayıtlara işleme
düz de denedim.
UPDATE bakiyler SET bakiyeler.bugun=date
UPDATE bakiyler SET bakiyeler.bugun=date
Re: Update ile bugunün tarihini tüm kayıtlara işleme
date değişkenini tipi nedir ve içine ne aktarıyorsun ? sen bunu managerde mi deniyorsun yoksa delphi içinden mi ?
-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
Re: Update ile bugunün tarihini tüm kayıtlara işleme
date değişkeni tarih tipinde içine bugünün tarihini aktarıyorum
Re: Update ile bugunün tarihini tüm kayıtlara işleme
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
yada
şeklinde işi firebirde yaptırabilirsiniz
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
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...

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...

-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
Re: Update ile bugunün tarihini tüm kayıtlara işleme
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;
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;
Re: Update ile bugunün tarihini tüm kayıtlara işleme
genelde şu şekilde kullanıyorum
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...
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ç
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...
bunu update le yapmaya çalışmıyorsundur umarımyapmak istedğim çok basit aslında bugünün tarihinden veri tabnındaki diğer tarihi çıkarmak ve integer sayı döndürmek.

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...

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...

-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
Re: Update ile bugunün tarihini tüm kayıtlara işleme
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.
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.
Re: Update ile bugunün tarihini tüm kayıtlara işleme
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...
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...
tarzında br sorgu işini görür sanırım...
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
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
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...

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...
