Editleme ve update işlemi veri tabanına neden yansımıyor?

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:

Editleme ve update işlemi veri tabanına neden yansımıyor?

Mesaj gönderen baloglurecep »

Arkadaşlar selam ve saygılarımı iletiyorum herkese... İlginç bir durumla karşılaştım ama çözüm bulamadım. Her zamanki gibi bir kullanımda işlem yapıyorum ama bu defa yapılan işlem veri tabanına yansımıyor. Kısaca açıklamam gerekirse durum şöyle. Ana ekranımda müşterilerin olduğu liste var. Müşteriler tablosunda bir query yardımı ile verileri alıyor. query açık durumda. Satış işlemi için başka bir form açıyorum. Bu formda aynı müşteri querye bağlı datatextler var. Birinde ad soyad, birinde id var. Satış işlemi yapıyorum. En sona satış işleminden bazı bilgileri müşteri tablosuna aktarmam için direk olarak query açık olduğu için edit modunda açıp ilgili alanları gönderiyorum. Ancak tüm satırların çalışmasına rağmen işlem veri tabanına yansımıyor. Kod aşağıdadır.

Kod: Tümünü seç

DM.musteri_Query.Edit;
 DM.musteri_QuerySON_BORC_TARIH.AsDateTime:=EDIT_TARIH.DATE;
 DM.musteri_QuerySON_BORC_TURU.AsString:='VERESIYE SATIŞ';
 DM.musteri_QuerySON_BORC_MIKTAR.AsCurrency:=CURR_SATIS_TOPLAM.Value;
 DM.musteri_Query.Post;
Birde böyle olmuyor diye direk sql kodla update yapayım dedim fakat onda da hata vermedi tüm satırlar çalıştı ancak o da veri tabanına yansımadı. Onun kodu da aşağıdadır.

Kod: Tümünü seç

DM.Q_ORTAK.Close;
  DM.Q_ORTAK.SelectSQL.Clear;
  DM.Q_ORTAK.SelectSQL.Text:='UPDATE musteriler SET musteriler.son_borc_tarih='+QuotedStr(DateToStr(EDIT_TARIH.DATE))+',musteriler.son_borc_turu='+QuotedStr('VERESİYE SATIŞ')+',musteriler.son_borc_miktar='+QuotedStr(FloatToStr(CURR_SATIS_TOPLAM.Value))+' WHERE Id='+QuotedStr(DBText2.Caption)+' ';
  DM.Q_ORTAK.Active:=TRUE;
  DM.Q_ORTAK.ApplyUpdates;
  DM.Q_ORTAK.CloSE;
    ShowMessage('OK');
Bir bilgisi veya fikri olan varsa paylaşırsa çok sevinirim. Kolay gelsin...
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Editleme ve update işlemi veri tabanına neden yansımıyor

Mesaj gönderen freeman35 »

veritabanın ne oluğunu bilmezsek nasıl cevap verebiliriz? Program yazmak hakkında öğrenip bildiklerimiz mevcuttur ama hala telepatik yeteneğimiz yok :)
muhtemelen transaction kullanmıyorsun ve commit etmiyorsun, default rollback ettiği için db de görmüyorsundur. Bu varsayım üzerine verdiğim cevap.
"musteriler.son_borc_tarih='+QuotedStr(DateToStr(EDIT_TARIH.DATE))" bu satırın başka makinada yani şu anki kullandığın makinanın tarih ayarlarının dışında kullanıldığında hata verecektir.
"musteriler.son_borc_turu='+QuotedStr('VERESİYE SATIŞ')" ne diye db ye gereksiz bilgi yazıyorsun? 1-2-3 vs sayısal değerler ver, hem db de gereksiz yer kaybetmezsin, hemde yarın birgün yazım şeklini değiştirdiğinde raporların çakılmaz.
"DM.Q_ORTAK.Active:=TRUE;" DM.Q_ORTAK.Close kullanırken DM.Q_ORTAK.Open kullanmak okuma açısından daha mantıklı, her ikisininde yaptığı iş aynı. Active: Boolean event i designtime da OI ra ekleyip ordan müdahale edebilmek için konulmuş bir event. Kullanmak yanlış değil.
"DM.Q_ORTAK.ApplyUpdates;" CachedUpdate kullanmak niye? suyundanda koydum genede olmuyo mantığında ise yanlış, kullanılan property, function procedure vs bunların ne işe yaradıkları öğrenmeden sadece "yaptım oldu" olur
"ShowMessage('OK');" her şey Türkçe iken OK ne? "Tamam" ın nesi kötü?
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Re: Editleme ve update işlemi veri tabanına neden yansımıyor

Mesaj gönderen baloglurecep »

Öncelikle freeman35 adlı kullanıcya cevabı ve yorumları için teşekkür ediyorum. Kullandığım veri tabanı firebird 2.0. Bu yüzden firebird kısmından sordum. kullandığım quey bileşenleri (3. sınıf companentler) auto commit özelliği sayesinde otomatik commit etmekte. diğer kısımlardaki kullanım ise (tarih ve veresiye satış ifadeleri) programın genel yapısı gereği. oradaki show mesaj ise kodların çalışıp çalışmadığını sırayla okunup okumadığını anlamak için basitçe yerleştirilen kod. ben de open ifadesinin yeterli olduğunu biliyor öyle kullanıyorum. aplyupdate active true kodlarını kullanmıyorum. sadece burada her yolu denediğim için bunları denemek için kullandım son olarak.

iyi çalışmalar dilerim ...
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Editleme ve update işlemi veri tabanına neden yansımıyor

Mesaj gönderen freeman35 »

Haklısın benim hatam firebird bölümüne baktığımı unutmuşum. Auto işlerinden mümkün olduğunca kaçının, kimin ne yazdığımı bilmediğiniz kodlar sıkıntı yaşatabilir. Commit değil commitretaing kullan, ayrıca bir hata veriyorsa try except blockları bu hatayı engelleyebilir
kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
omurolmez
Üye
Mesajlar: 187
Kayıt: 31 Eki 2012 11:41

Re: Editleme ve update işlemi veri tabanına neden yansımıyor

Mesaj gönderen omurolmez »

update sorgusunun çalışması için where şartının yerine getirilmesi gerekiyor.
Ancak ilk kodunuz mutlaka çalışmalı, ShowMessage('OK') çağrısını, ilk kodunuza Post tan sonraya koyabilirsiniz.
Eğer tablonuzu güncelliyor ancak aynı tabloyu başka bir TTable bileşeninde de kullanıyorsanız; ikinci TTable bileşeninde değişiklikleri görebilmek için Refresh çağırabilirsiniz. Refresh in çalışıp çalışmadığına emin değilim. Eğer sonuc alamazsanız, Table2.Close; Table2.Open; çağırabilirsiniz.

ShowMessage('OK'); yönteminden daha kolayı, komutlara breakpoint / kesme noktası (F5) eklemektir. Eğer program sahada çalışıyor ise, hazır bileşenden bulacağınız veya kendiniz yazacağınız bir log sisteminde, şu tip bir çağrı yapmanızdır :
_log('Post çağrıldı.');
Böylece müşterinizdeki (tercihen size e-posta ile gönderilen) log dosyalarınızı inceleyebilirsiniz.
Kodu test etmek için yazılan kodlar, orjinal koddan daha karışık olmamalıdır. Orjinal kodunuzdaki güvenli AsDateTime :=edit.Date ataması, test kodunuzda daha riskli olan,
borc_tarih='+QuotedStr(DateToStr(EDIT_TARIH.DATE))+',m
atamasına dönüşmüş.
Ömür Ölmez
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Sorun Çözüldü...

Mesaj gönderen baloglurecep »

Arkadaşlar sorunu dataset nesnesi yerine query nesnesi kullanarak çözdüm. dataset update işlemi yapmadı. ona anlam veremedim. Cevaplarıyla bilgi paylaşımı yapan herkese teşekkürler ediyorum. saygıyla kalınız.
Cevapla