sorgu çalıştırma karmaşası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
techmaster
Üye
Mesajlar: 52
Kayıt: 08 Ağu 2003 03:24
Konum: Adana

sorgu çalıştırma karmaşası

Mesaj gönderen techmaster »

merhabalar...
dataset kullanıyorum ve sorgularda farklı farklı şeylerin kullanılması kafamı karıştırdı...
mesela

.insertsql.add('insert......');

forumda insert,delete,update olaylarında execsql kullanılması gerekir derken geçenlerde sormuş olduğum soruya aldığım bir cevapta bu kodun altına
.open;
.insert;
.post;
yazmam söylendi ve kod çalıştı...tam anlamıyla ne iş yapar bu open ve execsql...iyice kafam karıştı...
bunlar arasında farklar nedir??
master of technology

http://www.cuemot.org
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
kullandığın bileşen
ibdataset ise
bunun selectsql, insertsql,modifysql ve deletesql ine gerekli kodları yazarsan
open,insert,post,delet komutlarını kullanırsın.
yok ben select sql i değiştireceğim dersen yani select sql e insert yada update kodu yazarsan execsql i kullanmalısın.

kullandığın bileşen
ibquery veya ibsql
eğer select ile başlayan sql yazdıysan open
insert yada update yada delete ile başlayan sql yazdıysan execsql

kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
techmaster
Üye
Mesajlar: 52
Kayıt: 08 Ağu 2003 03:24
Konum: Adana

Mesaj gönderen techmaster »

aslangeri hocam çok sağolun...

ama aşağıdaki kodu çalıştırdığımda hata alıyorum

Kod: Tümünü seç

 frm_ekle.grupidal();
 frm_ana.IBDataSet1.Close;
 frm_ana.IBDataSet1.insertSQL.Clear;
 frm_ana.IBDataSet1.insertSQL.Add('insert into ALBUM (ALBUM_GRUP_ID,ALBUM_ADI,ALBUM_TARIHI,ALBUM_CD,ALBUM_KAPAK)');
 frm_ana.IBDataSet1.insertSQL.Add('VALUES ('''+inttostr(grupid)+''','''+edit5.Text+''','''+edit3.Text+''','''+edit4.text+''','''+edit7.text+''')');
 frm_ana.IBDataSet1.open;
 frm_ana.IBDataSet1.Insert;
 frm_ana.IBDataSet1.Post;
 frm_ana.IBDataSet1.Transaction.CommitRetaining;
yukarıdaki kodu çalıştırmaya çalıştığımda 'Field GRUP_ID must have a value' diye bir hata alıyorum...GRUP_ID farklı bir tabloda..ilgisi yok bu kodlarla...
ancak yukarıdaki koda aşağıdaki gibi bir satır eklediğimde (* işaretli satır) ise 'Empty Query' hatası veriyor..

Kod: Tümünü seç

 frm_ekle.grupidal();
 frm_ana.IBDataSet1.Close;
 frm_ana.IBDataSet1.SelectSQL.Clear;*
 frm_ana.IBDataSet1.insertSQL.Clear;
 frm_ana.IBDataSet1.insertSQL.Add('insert into ALBUM (ALBUM_GRUP_ID,ALBUM_ADI,ALBUM_TARIHI,ALBUM_CD,ALBUM_KAPAK)');
 frm_ana.IBDataSet1.insertSQL.Add('VALUES ('''+inttostr(grupid)+''','''+edit5.Text+''','''+edit3.Text+''','''+edit4.text+''','''+edit7.text+''')');
 frm_ana.IBDataSet1.open;
 frm_ana.IBDataSet1.Insert;
 frm_ana.IBDataSet1.Post;
 frm_ana.IBDataSet1.Transaction.CommitRetaining;
burdan datasetin selectsql'deki sorguyu çalıştırmaya çalıştığını anladım ama sebebini anlamadım çünkü ben burda insertsql sorgusunu çalıştırmasını istiyorum...ama şunuda söyleyeyim bu koddan önce selectsql kullandım ama alan seçmek için yani bi işlem yaptırmadım...

iyi çalışmalar...
master of technology

http://www.cuemot.org
Kullanıcı avatarı
miskin
Üye
Mesajlar: 103
Kayıt: 26 Tem 2005 02:02
Konum: Gavuristan

Mesaj gönderen miskin »

bende anlayana kadar zorlandiydim ama, anladim en sonunda.
Eger veri tabanindan verileri almak istiyorsan Select (Secmek) veri tabanina sec deyip ambari actiriyorsun gelen degerlerle islemlerini yapiyorsun, degerlere ihtiyacin kalmadigi zaman close ile ambari kapatiyorsun.
Digerinde ise execSql (Execute) yerine getir diyerek bir komut gönderiyorsun ve istediklerin ambarin icinde yerine getiriliyor.

Yukarda verdigin örnek'in calisamamamasi ambari aciyorsun ama neyi sececegini bildirmiyorsun yani ambari acmadan SQL texti vermen lazim.

Gene anlatamadim ama olsun :)
miskin
Ve Tanri, bütün kullarini davul edecek :)
Kullanıcı avatarı
techmaster
Üye
Mesajlar: 52
Kayıt: 08 Ağu 2003 03:24
Konum: Adana

Mesaj gönderen techmaster »

hocam veriyorum ya sql texti işte insertsql ile :?
ama ben insertsql sorgusunu yerine getirmesini isterken o gidip selectsql'i çalıştırmaya çalışıyor(doğru anladıysam)
master of technology

http://www.cuemot.org
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

selam aslında kardeş neden bu basit işlerle kendinizi yoruyorsunuz ki siz Execsql kullancaksanız Delete,Update,insert komutlarında yani kayıtlar arasında oynama yapılmıyorsa... yok kayıtlar giriliyorsa open gibi komutlar kullanılmaktadır
bunu ibquery ile de yapabilirsiniz
mesela siz silme işlemi yapcaksanız ve butona basıldığında gerçekleşmesini o anda görmek istiyosanız
Ibquery1.close;
ıbquery1.sql.clear;
ibquerey1.sql.add('delete from tablo adı');
ibquery1.sql.execsql;
sonra koda devam ediyoz
ibquery1.close;
ibquery1.sql.clear;
ibquery1.sql.add('select*from tablo adı');
ibquery1.open;
kolay gelsin.......
Kullanıcı avatarı
techmaster
Üye
Mesajlar: 52
Kayıt: 08 Ağu 2003 03:24
Konum: Adana

Mesaj gönderen techmaster »

selman hocam dediğiniz gibi yapıncada 'use open for a select statement' hatası veriyor...

Kod: Tümünü seç

 frm_ekle.grupidal();
 frm_ana.IBDataSet1.Close;
 frm_ana.IBDataSet1.insertSQL.Clear;
 frm_ana.IBDataSet1.insertSQL.Add('insert into ALBUM (ALBUM_GRUP_ID,ALBUM_ADI,ALBUM_TARIHI,ALBUM_CD,ALBUM_KAPAK)');
 frm_ana.IBDataSet1.insertSQL.Add('VALUES ('''+inttostr(grupid)+''','''+edit5.Text+''','''+edit3.Text+''','''+edit4.text+''','''+edit7.text+''')');
 frm_ana.IBDataSet1.ExecSQL;
master of technology

http://www.cuemot.org
true_false
Üye
Mesajlar: 401
Kayıt: 22 Tem 2004 02:03
Konum: sıkıntı çekmişlere yakın bi yerden

Mesaj gönderen true_false »

techmaster yazdı:

Kod: Tümünü seç

 frm_ekle.grupidal();
 frm_ana.IBDataSet1.Close;
 frm_ana.IBDataSet1.insertSQL.Clear;
 frm_ana.IBDataSet1.insertSQL.Add('insert into ALBUM (ALBUM_GRUP_ID,ALBUM_ADI,ALBUM_TARIHI,ALBUM_CD,ALBUM_KAPAK)');
 frm_ana.IBDataSet1.insertSQL.Add('VALUES ('''+inttostr(grupid)+''','''+edit5.Text+''','''+edit3.Text+''','''+edit4.text+''','''+edit7.text+''')');
 frm_ana.IBDataSet1.ExecSQL;

frm_ana.ibdataset1.transaction.commitretainig;
olarak denermisin

tavsiye :
eğer tablona editler üzerinden bilgi gireceksen dbedit kullan datasource ve tablo alanlarını belirt ve aşağıdaki kodları kullan

ilk önce tablonu append moduna getir bu formun showu veya create veya bir buton olabilir

Kod: Tümünü seç

if not frm_ana.ibdataset1.active then
frm_ana.ibdataset1.open;
frm_ana.ibdataset1.append;


kayıt yaptığın yere (button olabilir)

Kod: Tümünü seç

frm_ana.ibdataset1ALBUM_GRUP_ID.asstring:= inttostr(grupid);
frm_ana.ibdataset1.post;
frm_ana.ibdataset1.transaction.commitretaning;
frm_ana.ibdataset1.refresh; 
type
Tform1 = class(Tform)
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
arkadaşım ibdataseti kullanıyorsun. insertsql ine değerler veriyorsun.
ama select sqlde ne yazıyor. sen
frm_ana.IBDataSet1.open;
frm_ana.IBDataSet1.Insert;
frm_ana.IBDataSet1.Post;
önce open komutunu veriyorsun. open komutu ile selectsql çalışıyor. ibdataseti table gibi kullanmalısın.
yani delphiden select,insert,delete, ve modify sqllerini hazırlayacaksın sonra programın içinde sanki bir table kullanıyormuş gibi kullanacaksın.
arkadaşların burda hataya düştükleri nokta ibdataset i tquery yada tupdate sql gibi kullanmaya çalışıyorlar(çalışılıyor). IBdataset in SQL (select,insert,...) kodlarını program içinden değiştirmeyin (en azından başlangıç seviyesindeki arkadaşlar) ibdatasetin ilgil sqllerini(select,insert,up....) hazırladıktan sonra table gibi kullanın.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

aslangeri hocam doğru söylüyü +1
Kullanıcı avatarı
techmaster
Üye
Mesajlar: 52
Kayıt: 08 Ağu 2003 03:24
Konum: Adana

Mesaj gönderen techmaster »

sorunu şu şekilde hallettim

Kod: Tümünü seç

 frm_ana.IBDataSet1.Close;
 frm_ana.IBDataSet1.selectSQL.Clear;
 frm_ana.IBDataSet1.selectSQL.Add('insert into ALBUM (ALBUM_GRUP_ID,ALBUM_ADI,ALBUM_TARIHI,ALBUM_CD,ALBUM_KAPAK)');
 frm_ana.IBDataSet1.selectSQL.Add('VALUES ('''+inttostr(grupid)+''','''+edit5.Text+''','''+edit3.Text+''','''+edit4.text+''','''+edit7.text+''')');
 frm_ana.IBDataSet1.Open;
 frm_ana.IBDataSet1.Transaction.CommitRetaining;
aslangeri hocam dediğnizi tam anlayamadım yani birden fazla dataset kullanıp hepsine ayrı işmi yaptırayım...
master of technology

http://www.cuemot.org
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

merhaba;
techmaster yazdı:sorunu şu şekilde hallettim

Kod: Tümünü seç

 frm_ana.IBDataSet1.Close;
 frm_ana.IBDataSet1.selectSQL.Clear;
 frm_ana.IBDataSet1.selectSQL.Add('insert into ALBUM (ALBUM_GRUP_ID,ALBUM_ADI,ALBUM_TARIHI,ALBUM_CD,ALBUM_KAPAK)');
 frm_ana.IBDataSet1.selectSQL.Add('VALUES ('''+inttostr(grupid)+''','''+edit5.Text+''','''+edit3.Text+''','''+edit4.text+''','''+edit7.text+''')');
 frm_ana.IBDataSet1.Open;
 frm_ana.IBDataSet1.Transaction.CommitRetaining;
Nasıl çalıştı bilmiyorum ama yukarıda ki kod yine çalışmaz. :D Open yerine ExecSQL kullanmalısın...
iyi günler...
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

s.a aslangeri hocamın bahsettiği olay şu Ibdataset bileşeni aslında o kadar kullanışlı ki hem delete fonk.hem update gibi fonksiyonları mesela formunuza bir tane daha ibquerty gibi nesneler eklemedende yapılabilyor fakat ibdataset kullanılırken dikkat edilmesi gereken hususlar var onlar nedir diye sorarsanız
mesela ibdatasette carikart diye bir tablomuz olsun.........bu cari kartta diyelim bir dbgridde göstereceğiz (select*from carikart) diye biz şimdi ibdatasette bir daha update işlemini veya ne bilim delete işlemini yaptırıyoz yaptırdıkdan soınra tekrar eski haline kodlarla döndürmek gerekiyor.
Kullanıcı avatarı
techmaster
Üye
Mesajlar: 52
Kayıt: 08 Ağu 2003 03:24
Konum: Adana

Mesaj gönderen techmaster »

hmmm...sağolun selman hocam..datasetin karışık bişey olduğu zaten belliydi :D
@Uğur1982...
bende öyle biliyordum ama en sonunda bunu denemek zorunda kaldım ve ne hikmetse çalışıyor...

yok ben öğrenemiyecem heralde bu interbase bileşenlerini...olmaması gerekn şeyler oluyor...yoksa oluyorda bizmi olmaz diye biliyoruz :? :shock:
master of technology

http://www.cuemot.org
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

s.a aslında kardeş duruma göre değişir yerine göre ibquery yerine görede ibdataset kullanılmalı ben mesela her ikisinide kullanıyorum birde şunu unutmayın ki ibquery salt okunur sonçlar döndürdüğü için onda herhangi bir oynama yapamazsınız.
Cevapla