Generate Sql

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
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Generate Sql

Mesaj gönderen serbek_tr »

Hayırlı günler ve çalışmalar arkadaşlar merak ettiğim bir konu daha doğdu
hani modify kısmına şunları yazarız ya

Kod: Tümünü seç

/////////1. numaralı komut////////////
UPDATE TBL_DOVIZ
SET
DOVIZ=:DOVIZ,
resim=:resim
WHERE
Id = :OLD_Id
Generate SQl komutunu kullandığımızda kendisi otomatikman aşağıdakini veriyor. bizim yazdığımız ile kendi verdiği arasında ne fark vardır

Kod: Tümünü seç

/////////2 numaralı komut////////////
update TBL_DOVIZ
set
  DOVIZ = :DOVIZ,
  RESIM = :RESIM,
  ID = :ID
where
  DOVIZ = :OLD_DOVIZ and
  RESIM = :OLD_RESIM and
  ID = :OLD_ID
Aklıma şu geldi Transaction editorden seçtiğimiz Read Commited seçeneğine göre yapılanlar anında diğer kullanıcılara da yansıyacak ben bu kayıt üzerinde değişiklik yaparken başka bir kullanıcıda erişim yapabilecek sonuçta ve yapılan değişiklikler ikimizede yansıyacak(En azından okuduklarımdan ben bunu anladım yanlışım varsa düzeltin lütfen)
diyelimki ben bu kayıt üzerinde düzenleme açtım başka bir kullanıcıda açtı
burada where komutundan sonra yer alan anahtar görevi gören alanlara göre gerçekleşecek modify işlemi ikimizde id de değişiklik yaptık diyelim diğer kullanıcı benden önce onayladı ve değişiklik gerçekleşti bende onayladığımda old_id (Eski id) bulunamadığı için hata vermeyecekmi. 2.komut satırına göre davrandığımızı düşünürşek id yi bulamazsa doviz ve resim alanlarına bakacak bu defa peki onlar üzerindede değişklik yapıp kayıt ederse diğer kullanıcı benim için tekrar sorun olacak bu bu gibi durumlarda ne mantık yürütmeli. ve normal şartlarda 1. komut satırı gibimi yapmalı yoksa generate sql komutunun verdiği 2. komut satırı gibi mi kullanmalı kod yazarken

Not:(Arkadaşlar eğerki ben bu olayı yanlış anlamışsam bu yazdıklarımın hepsi boş demektir)
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

öncelikle kullanılan database componet gibi detay bilgileri yazın ki arama yapıldığında detaylı bilgi bulunabilsin. yoksa arama yaptım ama bulamadım o yüzden soruyorum deniyor.
ibupdatesql ile ilgili daha yeni 1-2 mesaj önce yazıldı hatta sanırım senin mesajına yazılmış
programcı olucaksanız ingilizce bilmek zorundasınız, bilmiyorsanız elinize sözlük alıp kurcalayın, ben ingilizceyi böyle öğrendim

Kod: Tümünü seç

UPDATE/*güncelle*/ TBL_DOVIZ
SET /*ayarla*/
DOVIZ=:DOVIZ,
resim=:resim
WHERE/*nerede*/
Id = :OLD_Id 
tercüme edersek
Id nerede OLD_Id ye eşitse, dovizi dovize resimi resime (atama sağdan sola yapılır) ayarla, TBL_DOVIZ i güncelle
alın size sözlükle yapılmış bir tercüme. bu SQL için değil tüm programlama dilleri için geçerli temel mantık.
,sorunun detayına gelince. sen modify yani değişiklik diyorsun sen prkey yi kullanıcıya yada kendin değiştirmiyceksin, prkey satır numarası gibi düşün, e ozaman değil 2 kişi 20 kişide aynı anda update etse, en son yazılan kecerlidir, prkey ler hiç bi kullanıcada değişmiyeceği için hiç bir problem olmaz

updatesql lerde where kısmına sadece prkey ler yazılacak ki direk o kayıda konumlanıp o kayıt üzerinde işlem yapılsın
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 !!!
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Database : Firebird
Bileşen :IB bileşenleri
Freeman35 hocam biraz sitem ettin galiba haklısında belki ama ben zaten arama yapmadımki, aradımda bulamadımda demedim ingilizceyi hiç bilmiyorumda demedim. evet ayrıca senin yazmış olduğun komut benim daha önceki sorumda da geçti bundada haklısın(Görüyorsunkide arama yapıyorum sayın abiciğim(sizleri gerçekten birer abi-kardeş olarak görüyorum. dalga falan sanmayın bu sözümü)) ama benim orduğum daha öncekilerle alakalı değil (Belkide ben anlatamadığım için öyle düşündünüz)birşeye dikkat çekmek istedim ve bununla ilgili aklıma takılanları paylaşıp düşünce almak istedim. Bu arada arama yapmadım derken yanlış anlama gözü kapalı soru sordum da demek istemedim yani. neyse hocam fazla uzatmaya gerek yok özetleyeyim primary yada unique key herneyse geçtim bunu da yalnız primary yada unique key olarak tanımlı olmayan da where komutundan sonra yer alıyor mesela resim alanı (Generate Sql in yaptığı bu)ve dolayısı ilede bu alan değişebilecek bir alan. senin dediğine göre where komutundan sonra prmy keyler yer alacakki o kayda konumlasın peki generate Sql komutu neden bu tanımlamayı yaptı doğrusu bumudurki bu komut bunu veriyorda sadece key alanları vermiyor

Kod: Tümünü seç

/////////2 numaralı komut//////////// 
update TBL_DOVIZ 
set 
  DOVIZ = :DOVIZ, 
  RESIM = :RESIM, 
  ID = :ID 
where 
  DOVIZ = :OLD_DOVIZ and 
  RESIM = :OLD_RESIM and 
  ID = :OLD_ID
yukarıda ki komut generate Sql komu
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: Generate Sql

Mesaj gönderen sadettinpolat »

serbek_tr yazdı:Generate SQl komutunu kullandığımızda kendisi otomatikman aşağıdakini veriyor. bizim yazdığımız ile kendi verdiği arasında ne fark vardır
fark sizin key field alanında bu üç alanıda işaretlemiş olmanızdan kaynaklanıyor. ibDataset, key field alanında seçili olan alanları where kısmına yazıyor.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

işin güzelliğide burda ya ben sadece ikisini key field olarak seçtim bundan eminim tekrar tekrar baktım sadece bu tabloda değil diğer tablolarda da aynı şeyi yapıyor isterseniz sizde bir deneyin sizde karşılarşırmısınız bununla bilmem ama ben eminim sadece 2 sini key alan olarak tanımladım
lütfen rica ediyorum sizde ufak bir table oluşuturun tek yada çift key fark etmez ama IBUpdateSql den generate sql komutunu seçin ve oluşturduklarına bir bakın where kısmına tüm fieldları ekliyor
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

key field olarak sadece BOLGEID yi seçtim.

Kod: Tümünü seç

update BOLGELER
set
  BOLGEKODU = :BOLGEKODU,
  BOLGEMAHALI = :BOLGEMAHALI,
  NAKLIYECIID = :NAKLIYECIID
where
  BOLGEID = :OLD_BOLGEID
key field olarak sadece BOLGEID ve NAKLIYECIID yi seçtim.

Kod: Tümünü seç

update BOLGELER
set
  BOLGEKODU = :BOLGEKODU,
  BOLGEMAHALI = :BOLGEMAHALI,
  NAKLIYECIID = :NAKLIYECIID
where
  BOLGEID = :OLD_BOLGEID and
  NAKLIYECIID = :OLD_NAKLIYECIID
gözünüzden kaçan ufak bir nokta var bence veya ibx bileşenleriniz güncel değilse güncelleştirmeyi deneyin.
bendeki 6.8
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

ibdataset ile denedigimde bir sorunla karsılasmadım
ibdataset=ibquery+ibupdatesql+ek generator ozelligi
ben sahsen ibdataset kullanmayı tavsiye ederim
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Sadettinpolat ve gkimirti hocam sağolun var olun uğraştırdım sizi dediğiniz gibi bir terslik var bende ama nedir bulacağım inşallah şimdilik bunları kendim manuel yazacağım zaten generate Sql ile yazılanlar şeklinde uygulamayı çalıştırdığımda kayıt eklemede sorun çıkarıyor ama kendim manuel yazdımmı sorun yok hayırlısı artık tekrar sağolun
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

S.A.
kardeş ibdataset in üzerine sağ tıkladığın zaman açılan pencerede options sayfasında keyfields ve updatefields var.
Keyfields alanında seçtiğin alanlar where den sonra yazılan alanlardır. burda hangileri seçili ise generate sql komutunu verdiğin zaman o alanlar kullanılır.
Bilmem anlatabildimmi.
Kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

benim kızdığım yada sinirlendiğim yok sanırım üslübumdan böyle anlaşılıyor.
IBupdatesql yapıyor diye doğrudur demek yanlış. öncelikle IBX i update et son versiyonu 08 di yanlış hatırlamıyorsam.
diğer taraftanda generate sql demeden önce sana field listesi gelir, soldaki field lar dan sen bir veya fazlasını seçersin. otomatik yani getprkey dersen orda saçmalıyor işte yani adamın bug ı bu, bana çok tırmalattırmıştı. koduna baktım, bir table create edip ona prkeyleribuldurtup listenin içinde işaretliyor. ama IBTable doğru çalışmıyor yaniindex özellikle birden fazla alan verildiyse.
bu sebepten ben mutlaka kendim işaretlerim fieldları.
sağ taraftaki liste ise oluşturulacak SQL içinde olucak field ları seçiyorsun. genelde bu hepsidir. ama eğer bir computed field farsa onuda seçersen hata alırsın, çünkü o alana kayıt yapılamaz o yüzden onu seçmemelisin. ondan sonra generate sql dersen herşey doğru oluşur. ha ama sen ben üşünemem yazarım diyorsan ellede yazabilirsin :)

ibdataset hiç kullanmadım, bi ara deneyim dedim uğraştım :) eskialışkanlıklar kolay bırakılmıyor. ben o yüzden herbirini ayrı ayrı forma koyuyorum. query updatesql transaction bu standart değişmez üçlü. rapor yapıcaksamda sadece ibupdate sql i silmem table ı direk readonly açıyor. bazen buda işime geliyor.

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 !!!
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Freeman35 , sana karşı saygısızlık etmek istemedim eğer öyle olduysa özür dilerim dediğin gibi uslubun onu yansıttı ,artık bana veryansın etsende umarsamayacağım demekki :D , ama şunda haklı çıktın keyi otomatik al diyordum ve bunu dediğim içinde keylerle ilgili birtakım kodlar yazıyor kendiliğinden kendim seçtim problem olmadı şimdi sağol,
Yalnız farklı forum başlığı açmayayım diye yine buraya yazayım dedim (amma çok sorun çıkıyor ya iyikide yaniyiz ha) şimdide kayıt okeylerken şöle bir hata ile karşılaşıyorum yalnız bütün değerler yerine oturuyor yani field lara verilen tüm degerler grid üzerinde görülüyor ıb table için post verince şu hatayı alıyorum"Dynamic SQl Error, Sql Error code =-204 Table unknown doviz, At line 1,column 13 sebep ne olabilir.
Ayrıca belirteyim bu table master bir table a bağlı.

Ve delphi5 kullanıyorum IBX bileşen setini nerden bulabilirim. Delphiturkiye nin arşiv cd sinde 6 ve sonrası için update var yani 5 için yokmu
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Arkadaşlar şu
"Dynamic SQl Error, Sql Error code =-204 Table unknown doviz, At line 1,column 13 hatası varya IbTable yerine Query kullanayım dedim Select * from doviz dedim daha sonra field editorden Alanları ekleyeyim dedim aynı hatayı verdi
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

arkadaşlar olurmu böyle birşey ilgili table nin generator ünü kaldırdım sorun kalmadı ne yapacağız şimdi
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Cevapla