IBDatasetle Güncellemeyi nasıl yaparız?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

IBDatasetle Güncellemeyi nasıl yaparız?

Mesaj gönderen NewMember »

Kod: Tümünü seç

procedure TFrmSatis.SatilaniStokdanDus;
begin
    datmodul.StokSorgu.Close;
    datmodul.StokSorgu.SelectSQL;
    datmodul.StokSorgu.SelectSQL.Add('update STOK CIKAN=CIKAN+1 where URUNKODU="'+DBUrunKodu.Text+'"');
    datmodul.StokSorgu.Execsql;
    datmodul.StokSorgu.Close;

end;
Veritabanı=Firebird;
StokSorgu=Bir IBDataset Yukarıdaki kod hata veriyor.Bu kod Ado datasetlerinde çalışıyordu ama burada çalışmadı.Acaba IBDatasetle nasıl güncelleme yapabiliriz.Teşekkürler.
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Mesaj gönderen ALUCARD »

ibdatastin updatesql , insertsql ve refreshsql sqllerini yazdın ve otomatık oluşturdun mu

bunu mutlaka oku
viewtopic.php?t=135&highlight=ibdataset+kullan%FDm%FD


veya soru sormadan once

Resim Arama Yap
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

hocam yukarıdaki kod tamamen yanlış. select de update ettirmeye çalışıyorsun.update yi modify de yapman lazım. IBDatasetin 5 sql özelliği vardır
1- SelectSQL
2- InsertSQL
3- DeleteSQL
4- RefreshSQL
5- ModifySQL

Kod: Tümünü seç

tabloyu select edeceksen

IBDataset.SelectSQL.ADD('selecet * from tablo');

update edeceksen

IBDataset.ModifySQL.ADD('update tablo set alan1, alan2, alan3 where alan1 =:alan1');

IBdataset.RefreshSQL.ADD('select * from tablo where alan1 =:alan1');

IBDataset1.InsertSQL.ADD('insert into tablo alan1, alan2, alan3 values burayada bu alnlara aktaracağın değerleri yazacan ');
yani her olay kendi yerine yazılacak...
kolay gelsin..
En son kadirkurtoglu tarafından 03 Tem 2005 10:16 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

O yazıyı daha önceden okudum hatta IBDatasetin sqllerini o yazıya göre oluşturmuştum ama ben şunu öğrtenmek istiyorum.Update sqlini nazıl benim koduma uyarlayacağım?Yani ÇIKAN fieldini +1 yapabilmek için nasıl bir kod yazıcam.

IBDatabasedeki ModifySQL kodu şöyle

Kod: Tümünü seç

update STOK
set
  ACIKLAMA = :ACIKLAMA,
  ALISFIYATI = :ALISFIYATI,
  BIRIMI = :BIRIMI,
  CIKAN = :CIKAN,
  GIREN = :GIREN,
  SATISFIYATI = :SATISFIYATI,
  URUNADI = :URUNADI,
  URUNCINSI = :URUNCINSI,
  URUNKODU = :URUNKODU
where
  URUNKODU = :OLD_URUNKODU
Ben bunu şu şekle çevirip (kod ile) ExecSql diyorum hata veriyor.

Kod: Tümünü seç

datmodul.StokSorgu.ModifySQL.Clear;
    datmodul.StokSorgu.ModifySQL.Add('update STOK set');
    datmodul.StokSorgu.ModifySQL.Add('CIKAN = :CIKAN');
    datmodul.StokSorgu.ModifySQL.Add('where URUNKODU =:OLD_URUNKODU');
    datmodul.StokSorgu.ParamByName('OLD_URUNKODU').Value:=DBUrunKodu.Text;
    datmodul.StokSorgu.ParamByName('CIKAN').Value:=StrToFloat(DBSatisMiktari.Text)+1;
    datmodul.StokSorgu.ExecSQL;

Yardım edecek arkadaşlara teşekkürler.Herkese kolay gelsin.
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

datmodul.StokSorgu.ModifySQL.Clear;
datmodul.StokSorgu.ModifySQL.Add('update STOK set cikan= satis + 1 where cikan =:cikan ');
datmodul.StokSorgu.ExecSQL;
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Mesaj gönderen ALUCARD »

şimdi bir ürün satıldığında bunu stoktan düşmek istiyorsan bence bunu triger le yaptır. boylece sen uğraşma derim ben biraz arama yap forum da mutlaka bulursun

viewtopic.php?t=3138
viewtopic.php?t=4338
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

Kod: Tümünü seç

 
    datmodul.StokSorgu.close;
    datmodul.StokSorgu.ModifySQL.Clear; 
    datmodul.StokSorgu.ModifySQL.Add('update STOK set cikan= satis + 1 where cikan =:cikan '); 
     datmodul.StokSorgu.ExecSQL;
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

Arkadaşlar ilginize çok teşekürler.Trigerlarla aram hiç iyi değil.o yüzdendelphi kodlarıyla yaptırmaya çalışıyorum.Ancak bu kodlarda aynı hatayı veriyor.

DyNamic SQL ERROR
SQL Error Code=-104
Token unknown -Line 2 char1 update


Teşekkürler.
mhizar
Üye
Mesajlar: 78
Kayıt: 30 May 2005 11:06

Mesaj gönderen mhizar »

Sende benim gibi trigerleri yapamıyorsun galiba.Aynı sorun benim başımda da var.Bu delete,insert sorgularını yapamıyorum.Bulursam cevabını yazarım.Kolay gelsin.
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

arkadaşım yazmış olduğun hataya dikkat et line 2 char 1 yani sql lin 2.satırı 1.harfi yanlış diyor. benim yukarıda yazdığım ifade de tek sql satırı var sen sanırım iki parça haline getirdin ancak hatalı yapmışsın. hemen pes etme hata dan doğruya ulamalısın. 2. sql satırını sil veya uygun şekilde düzelt. sonra tekrar dene
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

@kadirkurtoglu haklı. Ezbere gitmeyin arkadaşlar.
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

Arkadaşlar kusura bakmayın.Ezbere falanda gitmiyorum ama olmuyorda işte.Aşağıdaki kod çalışıyor ama ben oradaki 1500 ifadesi yerine satış formunda satılan miktar hanesinde ne yazıyor ise ona ekletmek istiyorum.Onu yapamıyorum.Yardım ederseniz sevinirim.Aşağıdaki kod yapısı çalışıyor ama o da tyam doğrumu onuda bilmiyorum.

Kod: Tümünü seç

datmodul.StokSorgu.close;
    datmodul.StokSorgu.ModifySQL.Clear;
    datmodul.StokSorgu.ModifySQL.Add('update STOK set CIKAN=1500 where URUNKODU ='''+DBUrunKodu.Text+''' ');
    datmodul.StokSorgu.Open;
    datmodul.StokSorgu.Edit;
    datmodul.StokSorgu.Post;

Çalıştırmak istediiğimide şu şekilde yazıyorum ama olmuyor.

Kod: Tümünü seç

procedure TFrmSatis.SatilaniStokdanDus;
 VAR SAYI:INTEGER;
 begin
    SAYI:=StrToInt(DBSatisMiktari.Text);
    datmodul.StokSorgu.close;
    datmodul.StokSorgu.ModifySQL.Clear;
    datmodul.StokSorgu.ModifySQL.Add('update STOK set CIKAN=CIKAN+SAYI where URUNKODU ='''+DBUrunKodu.Text+''' ');
    datmodul.StokSorgu.Open;
    datmodul.StokSorgu.Edit;
    datmodul.StokSorgu.Post;
end;
Bu kod çalışmıyor.Ayrıca siz yukarıda ExecSql yazmışsınız ExecSQL kullanınca da Use Open for Select Statement diyor.
Nerede hata yapıyorum.Bulamıyorum.Bir kez yapsam syntax kuralını öğrensem bir daha sorun olmaz ama.Bu kodlar klasik querylerde böyle çalışıyordu ama IBDatasete uyarlayamadık.Herkese kolay gelsin.
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

merhaba;

Senin burada bir yanlışın var gibime geliyor.Yapman gereken şöyle bir mantık.
Ne işlem yapman gerekiyorsa onu seçmen gerekir.
Mesala Modify yapmak istiyorsun;

Kod: Tümünü seç

   IBDataSet1.SelectSQL.Add(ModifySQl.Text);

İnsert işlemi yapmak istiyorsun;

Kod: Tümünü seç

    IBDataSet1.SelectSQL.Add(InsertSQL.Text);
bunun gibi...


Bunlardan sonra paramatrelerini girmen gerekir..

Kod: Tümünü seç

IBDataSet1.ParamByName('AD').AsString := HedtAd.Text;
gibi
Dataset Editöre bakarsan oradaki Sql cümlelerini görebilirsin.yukarıdaki parametreyi SQL cümlene göre düzenliyebilirsin..

**Gerekli parametrelerden sonra

Kod: Tümünü seç

      IBDataSet1.Prepare;
      IBDataSet1.ExecSQL;
     IBTransaction1.CommitRetaining; 
böyle bir yapı uygulaman lazım...

** Ayrıca Update,Modify,Delete Bu tür SQL cümlelerinde

Kod: Tümünü seç

 datmodul.StokSorgu.Open; 
kullanamazsın.ExecSQL kullanman gerekir..

Kod: Tümünü seç

datmodul.StokSorgu.ModifySQL.Add('update STOK set CIKAN=CIKAN+SAYI where URUNKODU ='''+DBUrunKodu.Text+''' '); 


Ayrıca ben olsaydım yukarıdaki gibi bir SQL cümlesini IBQuery de kullanırdım,IBdatasetin Default SQl cümlesini değiştirmezdim...

iyi günler....
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

IBDataSet1.SelectSQL.Add(ModifySQl.Text); satırında hata veriyor.
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

Tabi birde o satırdan evvel;

Kod: Tümünü seç

IBDataset1.SelectSQL.Clear;
demelisin..
Cevapla